6 ## Check that the environment is set up properly.
7 for i in DYNDNS_ZONE DYNDNS_HOST DYNDNS_SERVER DYNDNS_KEY SSH_CLIENT; do
8 eval havep=\${$i+t}\${$i-nil}
9 case $havep in nil) echo >&2 "$0: variable $i unset"; exit 2 ;; esac
12 ## Find the client address. This may be useful.
13 set -- $SSH_CLIENT; client=$1
15 ## Parse the commad line.
16 set -- $SSH_ORIGINAL_COMMAND
20 usage: $0 COMMAND ARGS...
23 set [-force] HOST [ADDR]
28 getarg='case $# in 0) fail_usage ;; esac; arg=$1; shift'
29 doneargs='case $# in 0) ;; *) fail_usage ;; esac'
35 for pat in $DYNDNS_HOST; do
36 case "$host" in $pat) matchp=t ;; esac
38 case $matchp in nil) echo >&2 "$0: hostname not permitted"; exit 2 ;; esac
44 nsupdate -k "$DYNDNS_KEY" <<EOF
52 eval $getarg; cmd=$arg
57 case "$arg" in -force) forcep=t; eval $getarg ;; esac
59 case "$#,$forcep,$1" in
60 0,nil,*) addr=$client ;;
62 *,nil,"$client" | *,t,*) addr=$1; shift ;;
64 echo >&2 "$0: incorrect address (wanted = $2; found = $addr)"
73 *) echo >&2 "$0: failed to parse new address"; exit 2 ;;
75 name=$host.$DYNDNS_ZONE
77 update delete $name IN $rrtype
78 update add $name ${DYNDNS_TTL-14400} IN $rrtype $addr"
81 eval $getarg; host=$arg
84 name=$host.$DYNDNS_ZONE
85 doupdate "update delete $name IN"