From 751afaff7ba5d4e52d436dd874d997821df21fff Mon Sep 17 00:00:00 2001 Message-Id: <751afaff7ba5d4e52d436dd874d997821df21fff.1714350743.git.mdw@distorted.org.uk> From: Mark Wooding Date: Mon, 4 Feb 2013 21:34:45 +0000 Subject: [PATCH] Initial import. Organization: Straylight/Edgeware From: Mark Wooding --- .gitignore | 2 ++ bin/update | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 .gitignore create mode 100755 bin/update 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 -- [mdw]