X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=dyndns%2Fupdate;fp=dyndns%2Fupdate;h=7a72503f0eb7f7673c54e3b8b98450d6e86cc4f2;hb=3988a733004005983b60aba74306368c122180f2;hp=0000000000000000000000000000000000000000;hpb=415964ddbc92d16b1fbd199b252b6ae6569411c6;p=userv-utils.git diff --git a/dyndns/update b/dyndns/update new file mode 100755 index 0000000..7a72503 --- /dev/null +++ b/dyndns/update @@ -0,0 +1,51 @@ +#!/bin/bash +set -e + +zone="$1" +subdomain="$2" +interval_min="$3" +interval_avg="$4" +interval_mem="$5" + +now=`date +%s` +charge=0 + +case $subdomain in +'@') files=_ ;; +*) files=$subdomain ;; +esac + +if test -f $files,timings && read lastup charge <$files,timings +then + if [ $now -lt $[ $lastup + $interval_min ] ]; then + echo "wait $[ $lastup + $interval_min - $now ]" + echo >&2 "must wait at least $interval_min between updates" + exit 75 + fi + charge=$[ $charge + $interval_avg - ($now - $lastup) ] + if [ $charge -gt $interval_mem ]; then + echo "wait $[ $charge - $interval_mem ]" + echo >&2 "must wait on average $interval_avg between updates" + exit 75 + fi + if [ $charge -lt 0 ]; then charge=0; fi +fi + +sort >$files,new + +if test -f $files,data +then + set +e + diff >/dev/null $files,data $files,new + diff=$? + set -e + + if [ $diff = 0 ]; then echo 'unchanged'; exit 0; fi + if [ $diff != 1 ]; then exit 1; fi +fi + +echo $now $charge >$files,timings.new +mv -f $files,timings.new $files,timings +mv $files,new $files,data + +exec /usr/local/lib/userv/dyndns/install $zone