aboutsummaryrefslogtreecommitdiff
path: root/contrib/sethostname.sh
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sethostname.sh')
-rw-r--r--contrib/sethostname.sh29
1 files changed, 29 insertions, 0 deletions
diff --git a/contrib/sethostname.sh b/contrib/sethostname.sh
new file mode 100644
index 0000000..7088c00
--- /dev/null
+++ b/contrib/sethostname.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# This script can be installed in /etc/dhclient-enter-hooks to set the client's
+# hostname based either on the hostname that the DHCP server supplied or the
+# hostname in whatever ptr record exists for the assigned IP address.
+
+if [ x$new_host_name = x ]; then
+ ptrname=`echo $new_ip_address \
+ |sed -e \
+ 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\4.\3.\2.\1.in-addr.arpa/'`
+ (echo "set type=ptr"; echo "$ptrname") |nslookup >/tmp/nslookup.$$
+ set `sed -n -e "s/$ptrname[ ]*\(canonical \)*name *= *\(.*\)/\2 \1/p" \
+ < /tmp/nslookup.$$` _
+ if [ x$1 = x_ ]; then
+ new_host_name=""
+ else
+ if [ $# -gt 1 ] && [ x$2 = xcanonical ]; then
+ new_host_name=`sed -n -e "s/$1[ ]*name *= *\(.*\)/\1/p" \
+ </tmp/nslookup.$$`
+ else
+ new_host_name=$1
+ fi
+ fi
+ rm /tmp/nslookup.$$
+fi
+if [ x$new_host_name != x ]; then
+ hostname $new_host_name
+fi
+