projects/aports·blob master · refs

45 lines · 1.1 KiB

1#!/bin/sh
2set -eu
3
4BASE_URL='https://www.internic.net/domain'
5destdir=${DNS_ROOT_HINTS_DIR:-"/usr/share/dns-root-hints"}
6
7if ! [ -w "$destdir" ]; then
8 echo 'Needs to run as root.' >&2
9 exit 1
10fi
11
12tmpdir=$(mktemp -d)
13
14cleanup() {
15 rm "$tmpdir"/* 2>/dev/null || true
16 rmdir "$tmpdir" || true
17}
18trap cleanup EXIT HUP INT TERM
19
20for f in named.root named.root.sig; do
21 curl -sLR "$BASE_URL/$f" -o "$tmpdir/$f"
22done
23
24read_version() {
25 sed -En 's/.*related version of root zone:\s*([0-9]{10}).*/\1/p' "$1"
26}
27# compare new and current versions
28new_ver=$(read_version "$tmpdir"/named.root)
29cur_ver=$(read_version "$destdir"/named.root)
30
31echo "Version $cur_ver <- Installed"
32echo "Version $new_ver <- Downloaded"
33
34# update to new version if needed
35if [ "$new_ver" != "$cur_ver" ]; then
36 gpgv --keyring "$destdir"/verisign-grs-nstld-key.gpg \
37 "$tmpdir"/named.root.sig "$tmpdir"/named.root || exit 10
38
39 mv "$tmpdir"/named.root "$destdir"/named.root
40 mv "$tmpdir"/named.root.sig "$destdir"/named.root.sig
41
42 printf '\nZone file updated.\n\n'
43else
44 printf '\nZone file already up-to-date.\n\n'
45fi