Initial import
[samba] / examples / scripts / wins_hook / dns_update
diff --git a/examples/scripts/wins_hook/dns_update b/examples/scripts/wins_hook/dns_update
new file mode 100644 (file)
index 0000000..a4c1a79
--- /dev/null
@@ -0,0 +1,94 @@
+#!/bin/sh
+#
+# Example script for "wins hook".  This attempts to update the DNS with
+# new A records for the NETBIOS name that Samba passes us. We do this
+# the simple way, by deleting all DNS records for the name and then
+# readding all the expected 'A' records.
+#
+# Written by Stephen Rothwell <sfr@linuxcare.com>
+#
+
+#
+# Configurable things
+#
+# The domain in which to create names
+#   YOU MUST CHANGE THIS
+# N.B. include the trailing dot
+#
+# It is a good idea to use a subdomain of your primary domain to ensure
+# that rogue machines can't take over (or delete) important names on
+# your network.
+DOMAIN=wins.example.com.
+
+#
+# The DNS TTL to give the records (in seconds)
+#
+TTL=3600
+#
+# NETBIOS name types that we want to create DNS records for:
+#      20 is server
+#      00 is workstation
+#      03 is user
+#
+USEFUL_TYPES="20 00 03"
+#
+# The name of a cache file to use to avoid continual updates
+# of the same name and IP addresses.  If you comment this out
+# then the cache is not kept at all.
+#
+#CACHE_FILE=/usr/local/samba/var/wins_update.cache
+
+if [ $# -lt 4 ]; then
+       echo "Usage: $0 op name type ttl [ip_addr ...]" 1>&2
+       echo "       op is one of add, refresh, delete" 1>&2
+       echo "       name is the NETBIOS name" 1>&2
+       echo "       type is the NETBIOS name type" 1>&2
+       echo "       ttl is the NETBIOS time to live" 1>&2
+       echo "       ip_addr's are the remaining IP addresses for this name" 1>&2
+       exit 1
+fi
+
+NSUPDATE=`which nsupdate`
+[ -x "$NSUPDATE" ] || NSUPDATE=/usr/bin/nsupdate
+[ -x "$NSUPDATE" ] || NSUPDATE=/sbin/nsupdate
+[ -x "$NSUPDATE" ] || NSUPDATE=/usr/sbin/nsupdate
+[ -x "$NSUPDATE" ] || {
+       echo "Cannot find nsupdate." 1>&2
+       exit 1
+}
+
+OP=$1
+NAME=$2
+TYPE=$3
+WINS_TTL=$4
+shift 4
+IP_ADDRS="$@"
+
+do_update=0
+for i in $USEFUL_TYPES
+do
+       [ "$TYPE" = "$i" ] && do_update=1
+done
+[ $do_update = 1 ] || exit 0
+
+if [ -n "$CACHE_FILE" ]; then
+       if [ -r "$CACHE_FILE" ]; then
+               fgrep -q -x -i "$NAME $IP_ADDRS" "$CACHE_FILE" &&
+                       exit 0
+               grep -v -i "^$NAME " "$CACHE_FILE" >"$CACHE_FILE".$$
+       fi
+       echo "$NAME $IP_ADDRS" >>"$CACHE_FILE".$$
+       mv "$CACHE_FILE" "$CACHE_FILE".old 2>/dev/null
+       mv "$CACHE_FILE".$$ "$CACHE_FILE"
+fi
+
+{
+       echo update delete $NAME.$DOMAIN
+       for i in $IP_ADDRS
+       do
+               echo update add $NAME.$DOMAIN $TTL A $i
+       done
+       echo
+} 2>/dev/null | $NSUPDATE >/dev/null 2>&1 &
+
+exit 0