]> andersk Git - moira.git/blobdiff - gen/hesiod.sh
add mk_cmds
[moira.git] / gen / hesiod.sh
index a232acda15fc4288656d3cbfb5bb6f396c4179d0..b6c4ad9787552dd5f6286c43a6f1da6bc6413a01 100644 (file)
@@ -1,5 +1,7 @@
-#!/bin/csh -f
+#!/bin/csh -f -x
 # This script performs updates of hesiod files on hesiod servers.  
+#      $Source$
+echo   '$Header$'
 
 # The following exit codes are defined and MUST BE CONSISTENT with the
 # SMS error codes the library uses:
@@ -8,12 +10,16 @@ set SMS_MISSINGFILE =        47836473
 set SMS_NAMED =        47836475
 set SMS_TARERR =       47836476
 
+umask 22
+
 # File that will contain the necessary information to be updated
 set TARFILE=/tmp/hesiod.out
 # Directory into which we will empty the tarfile
 set SRC_DIR=/etc/athena/_nameserver
 # Directory into which we will put the final product
 set DEST_DIR=/etc/athena/nameserver
+# Files to verify nameserver loaded
+set CHECKFILES="passwd.db pobox.db cluster.db grplist.db group.db"
 
 # Create the destination directory if it doesn't exist
 if (! -d $DEST_DIR) then
@@ -22,41 +28,36 @@ if (! -d $DEST_DIR) then
    /bin/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
-set SRC_DIR_TMP = $cwd: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`) ln -s `pwd` $SRC_DIR
 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 $SMS_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}'`)
-   if (./ == $file) continue
+foreach  file (`/bin/tar tf $TARFILE | awk '{print $1}' | sed 's;/$;;'`)
+   if (. == $file) continue
 
    rm -rf $file
    echo extracting $file
    /bin/tar xf $TARFILE $file
    # Don't put up with errors extracting the information
-   if ($status) exit SMS_TARERR
+   if ($status) exit $SMS_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
+      if ($status != 0) exit $SMS_HESFILE
    else
       /bin/rm -f $file
-      exit SMS_MISSINGFILE
+      exit $SMS_MISSINGFILE
    endif
 end
 
@@ -72,10 +73,6 @@ rm -f /etc/named.pid
 # Restart named.
 (unlimit; /etc/named)
 
-# 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.
@@ -90,15 +87,23 @@ while ($i < $TIMEOUT)
 end
 
 # Did it time out?
-if ($i == $TIMEOUT) exit SMS_NAMED
+if ($i == $TIMEOUT) exit $SMS_NAMED
+
+# Verify that the nameserver is answering queries for the new data
+cd $DEST_DIR
+foreach f ( $CHECKFILES )
+        set temp=`tac $f | egrep -v '^;' | head -1`
+        set hes=`/bin/echo $temp | awk '{print $1}'`
+        set ent=`echo $hes | rev | sed 's/\(.*\)\.\(.*\)/\2/' | rev`
+        set type=`echo $hes | rev | sed 's/\(.*\)\.\(.*\)/\1/' | rev`
+        hesinfo $ent $type > /dev/null
+       if ($status == 1) then
+                exit $SMS_HESFILE
+        endif
+end
 
 # Clean up!
 /bin/rm -f $TARFILE
 /bin/rm -f $0
 
 exit 0
-
-#
-#      $Source$
-#      $Header$
-#
This page took 0.051864 seconds and 4 git commands to generate.