mirror of
https://github.com/samba-team/samba.git
synced 2025-01-06 13:18:07 +03:00
3d4235eb60
Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Martin Schwenke <mschwenke@ddn.com>
93 lines
2.2 KiB
Bash
93 lines
2.2 KiB
Bash
#!/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
|
|
# re-adding 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
|