summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
dff15e4)
Seems like this might reduce the work done by nameservers if they're not
very bright.
getarg='case $# in 0) fail_usage ;; esac; arg=$1; shift'
doneargs='case $# in 0) ;; *) fail_usage ;; esac'
getarg='case $# in 0) fail_usage ;; esac; arg=$1; shift'
doneargs='case $# in 0) ;; *) fail_usage ;; esac'
+check_current_state () {
+ ck_rrty=$1 ck_name=$2
+ set -- $(adnshost --config "nameserver $DYNDNS_SERVER" \
+ -Fi -Tt -t$ck_rrty "$ck_name")
+ case $1,$2,$3,$5 in
+ ";,failed,permfail,nxdomain" | ";,failed,permfail,nodata")
+ err=$5
+ ;;
+ ";,failed,"*)
+ shift 8
+ echo >&2 "$0: lookup $ck_name ($ck_rrty) failed: $*"
+ exit 4
+ ;;
+ *)
+ err=nil cur_ttl=$2 cur_addr=$4
+ ;;
+ esac
+}
+
-
-nsupdate -k "$DYNDNS_KEY" <<EOF
+ case ${DYNDNS_TESTONLY_P-nil} in
+ nil)
+ nsupdate -k "$DYNDNS_KEY" <<EOF
server $DYNDNS_SERVER
zone $DYNDNS_ZONE
$cmd
send
EOF
server $DYNDNS_SERVER
zone $DYNDNS_ZONE
$cmd
send
EOF
+ ;;
+ *)
+ cat <<EOF
+$cmd
+EOF
+ ;;
+ esac
*) echo >&2 "$0: failed to parse new address"; exit 2 ;;
esac
name=$host.$DYNDNS_ZONE
*) echo >&2 "$0: failed to parse new address"; exit 2 ;;
esac
name=$host.$DYNDNS_ZONE
+ check_current_state $(echo $rrtype | tr A-Z a-z) "$name"
+ ttl=${DYNDNS_TTL-14400}
+ case $err,$cur_ttl,$cur_addr in
+ nil,$ttl,$addr) echo >&2 "$0: nothing to do"; exit 0 ;;
+ esac
doupdate "
update delete $name IN $rrtype
doupdate "
update delete $name IN $rrtype
- update add $name ${DYNDNS_TTL-14400} IN $rrtype $addr"
+ update add $name $ttl IN $rrtype $addr"
;;
unset)
eval $getarg; host=$arg
eval $doneargs
checkhost "$host"
name=$host.$DYNDNS_ZONE
;;
unset)
eval $getarg; host=$arg
eval $doneargs
checkhost "$host"
name=$host.$DYNDNS_ZONE
+ check_current_state a "$name"
+ case $err in
+ nxdomain) echo >&2 "$0: nothing to do"; exit 0 ;;
+ esac
doupdate "update delete $name IN"
;;
*)
doupdate "update delete $name IN"
;;
*)