--- /dev/null
+#!/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