1#!/bin/sh 2# 3# Example script for "wins hook". This attempts to update the DNS with 4# new A records for the NETBIOS name that Samba passes us. We do this 5# the simple way, by deleting all DNS records for the name and then 6# readding all the expected 'A' records. 7# 8# Written by Stephen Rothwell <sfr@linuxcare.com> 9# 10 11# 12# Configurable things 13# 14# The domain in which to create names 15# YOU MUST CHANGE THIS 16# N.B. include the trailing dot 17# 18# It is a good idea to use a subdomain of your primary domain to ensure 19# that rogue machines can't take over (or delete) important names on 20# your network. 21DOMAIN=wins.example.com. 22 23# 24# The DNS TTL to give the records (in seconds) 25# 26TTL=3600 27# 28# NETBIOS name types that we want to create DNS records for: 29# 20 is server 30# 00 is workstation 31# 03 is user 32# 33USEFUL_TYPES="20 00 03" 34# 35# The name of a cache file to use to avoid continual updates 36# of the same name and IP addresses. If you comment this out 37# then the cache is not kept at all. 38# 39#CACHE_FILE=/usr/local/samba/var/wins_update.cache 40 41if [ $# -lt 4 ]; then 42 echo "Usage: $0 op name type ttl [ip_addr ...]" 1>&2 43 echo " op is one of add, refresh, delete" 1>&2 44 echo " name is the NETBIOS name" 1>&2 45 echo " type is the NETBIOS name type" 1>&2 46 echo " ttl is the NETBIOS time to live" 1>&2 47 echo " ip_addr's are the remaining IP addresses for this name" 1>&2 48 exit 1 49fi 50 51NSUPDATE=`which nsupdate` 52[ -x "$NSUPDATE" ] || NSUPDATE=/usr/bin/nsupdate 53[ -x "$NSUPDATE" ] || NSUPDATE=/sbin/nsupdate 54[ -x "$NSUPDATE" ] || NSUPDATE=/usr/sbin/nsupdate 55[ -x "$NSUPDATE" ] || { 56 echo "Cannot find nsupdate." 1>&2 57 exit 1 58} 59 60OP=$1 61NAME=$2 62TYPE=$3 63WINS_TTL=$4 64shift 4 65IP_ADDRS="$@" 66 67do_update=0 68for i in $USEFUL_TYPES 69do 70 [ "$TYPE" = "$i" ] && do_update=1 71done 72[ $do_update = 1 ] || exit 0 73 74if [ -n "$CACHE_FILE" ]; then 75 if [ -r "$CACHE_FILE" ]; then 76 fgrep -q -x -i "$NAME $IP_ADDRS" "$CACHE_FILE" && 77 exit 0 78 grep -v -i "^$NAME " "$CACHE_FILE" >"$CACHE_FILE".$$ 79 fi 80 echo "$NAME $IP_ADDRS" >>"$CACHE_FILE".$$ 81 mv "$CACHE_FILE" "$CACHE_FILE".old 2>/dev/null 82 mv "$CACHE_FILE".$$ "$CACHE_FILE" 83fi 84 85{ 86 echo update delete $NAME.$DOMAIN 87 for i in $IP_ADDRS 88 do 89 echo update add $NAME.$DOMAIN $TTL A $i 90 done 91 echo 92} 2>/dev/null | $NSUPDATE >/dev/null 2>&1 & 93 94exit 0 95