From: Mark Wooding Date: Mon, 4 Feb 2013 21:34:45 +0000 (+0000) Subject: Initial import. X-Git-Url: https://git.distorted.org.uk/~mdw/dyndns/commitdiff_plain/751afaff7ba5d4e52d436dd874d997821df21fff Initial import. --- 751afaff7ba5d4e52d436dd874d997821df21fff diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa88922 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.ssh/ +dyndns.conf diff --git a/bin/update b/bin/update new file mode 100755 index 0000000..a9c2716 --- /dev/null +++ b/bin/update @@ -0,0 +1,90 @@ +#! /bin/sh + +set -e +. ./dyndns.conf + +## Check that the environment is set up properly. +for i in DYNDNS_ZONE DYNDNS_HOST DYNDNS_SERVER DYNDNS_KEY SSH_CLIENT; do + eval havep=\${$i+t}\${$i-nil} + case $havep in nil) echo >&2 "$0: variable $i unset"; exit 2 ;; esac +done + +## Find the client address. This may be useful. +set -- $SSH_CLIENT; client=$1 + +## Parse the commad line. +set -- $SSH_ORIGINAL_COMMAND + +fail_usage () { + cat >&2 <&2 "$0: hostname not permitted"; exit 2 ;; esac +} + +doupdate () { + cmd=$1 + +nsupdate -k "$DYNDNS_KEY" <&2 "$0: incorrect address (wanted = $2; found = $addr)" + exit 3 + ;; + esac + eval $doneargs + checkhost "$host" + case $addr in + *:*) rrtype=AAAA ;; + *.*) rrtype=A ;; + *) echo >&2 "$0: failed to parse new address"; exit 2 ;; + esac + name=$host.$DYNDNS_ZONE + doupdate " + update delete $name IN $rrtype + update add $name ${DYNDNS_TTL-14400} IN $rrtype $addr" + ;; + unset) + eval $getarg; host=$arg + eval $doneargs + checkhost "$host" + name=$host.$DYNDNS_ZONE + doupdate "update delete $name IN" + ;; + *) + fail_usage + ;; +esac