#!/bin/csh -f
# This script performs updates of hesiod files on hesiod servers.
+# $Header$
+
+set path=(/etc /bin /usr/bin /usr/etc /usr/athena/etc)
# The following exit codes are defined and MUST BE CONSISTENT with the
-# SMS error codes the library uses:
-set SMS_HESFILE = 47836472
-set SMS_MISSINGFILE = 47836473
-set SMS_NAMED = 47836475
-set SMS_TARERR = 47836476
+# MR error codes the library uses:
+set MR_HESFILE = 47836472
+set MR_MISSINGFILE = 47836473
+set MR_NAMED = 47836475
+set MR_TARERR = 47836476
+
+umask 22
# File that will contain the necessary information to be updated
set TARFILE=/tmp/hesiod.out
# Create the destination directory if it doesn't exist
if (! -d $DEST_DIR) then
- /bin/rm -f $DEST_DIR
- /bin/mkdir $DEST_DIR
- /bin/chmod 755 $DEST_DIR
+ rm -f $DEST_DIR
+ mkdir $DEST_DIR
+ chmod 755 $DEST_DIR
endif
-# There is reason for $SRC_DIR and $DEST_DIR to be on the same disk
-# parition, so find out where $DEST_DIR is and put $SRC_DIR there too.
-set old = $cwd
-chdir $DEST_DIR
-# Don't use $cwd; it won't follow the link
-set CUR_DIR = `pwd`
-set SRC_DIR_TMP = $CUR_DIR:h/_nameserver
-if (! -d $SRC_DIR_TMP) then
- /bin/rm -f $SRC_DIR_TMP
- /bin/mkdir $SRC_DIR_TMP
- /bin/chmod 755 $SRC_DIR_TMP
+# If $SRC_DIR does not already exist, make sure that it gets created
+# on the same parition as $DEST_DIR.
+if (! -d $SRC_DIR) then
+ chdir $DEST_DIR
+ mkdir ../_nameserver
+ chdir ../_nameserver
+ if ($SRC_DIR != `pwd`) then
+ ln -s `pwd` $SRC_DIR
+ endif
endif
-if ($SRC_DIR_TMP != $SRC_DIR) ln -s $SRC_DIR_TMP $SRC_DIR
-cd $old
-unset old SRC_DIR_TMP
# Alert if tarfile doesn't exist
-if (! -r $TARFILE) exit $SMS_MISSINGFILE
+if (! -r $TARFILE) exit $MR_MISSINGFILE
# Empty the tar file one file at a time and move each file to the
# appropriate place only if it is not zero length.
cd $SRC_DIR
-foreach file (`/bin/tar tf $TARFILE | awk '{print $1}' | sed 's;/$;;'`)
+foreach file (`tar tf $TARFILE | awk '{print $1}' | sed 's;/$;;'`)
if (. == $file) continue
rm -rf $file
echo extracting $file
- /bin/tar xf $TARFILE $file
+ tar xf $TARFILE $file
# Don't put up with errors extracting the information
- if ($status) exit $SMS_TARERR
+ if ($status) exit $MR_TARERR
# Make sure the file is not zero-length
if (! -z $file) then
- /bin/mv -f $file $DEST_DIR
- if ($status != 0) exit $SMS_HESFILE
+ mv -f $file $DEST_DIR
+ if ($status != 0) exit $MR_HESFILE
else
- /bin/rm -f $file
- exit $SMS_MISSINGFILE
+ rm -f $file
+ exit $MR_MISSINGFILE
endif
end
# important that this file be removed since the script uses its
# existance as evidence that named as has been successfully restarted.
+# First, get statistics
+ln -s /site/named.stats /usr/tmp/named.stats
+kill -IOT `cat /etc/named.pid`
+sleep 1
# Use /bin/kill because, due to a bug in some versions of csh, failure
# of a builtin will cause the script to abort
-/bin/kill -KILL `/bin/cat /etc/named.pid`
+kill -KILL `cat /etc/named.pid`
rm -f /etc/named.pid
# Restart named.
-(unlimit; /etc/named)
+(unlimit; /etc/named&)
+sleep 5
+mv /etc/named.pid /etc/named.pid.restart
-# Before trying to reimpliment this timeout mechanism using interrupts,
-# be sure to check and make sure that it will work on both types of
-# machines. As of 6.0B, RT csh didn't respond correctly to onintr.
-#
# This timeout is implemented by having the shell check TIMEOUT times
# for the existance of /etc/named.pid and to sleep INTERVAL seconds
# between each check.
end
# Did it time out?
-if ($i == $TIMEOUT) exit $SMS_NAMED
+if ($i == $TIMEOUT) exit $MR_NAMED
# Clean up!
-/bin/rm -f $TARFILE
-/bin/rm -f $0
+rm -f $TARFILE
+rm -f $0
exit 0
-
-#
-# $Source$
-# $Header$
-#