]> andersk Git - moira.git/blob - gen/hesiod.sh
don't check nameserver status after it restarts-this fails on
[moira.git] / gen / hesiod.sh
1 #!/bin/csh -f -x
2 # This script performs updates of hesiod files on hesiod servers.  
3 #       $Source$
4 echo    '$Header$'
5
6 # The following exit codes are defined and MUST BE CONSISTENT with the
7 # SMS error codes the library uses:
8 set SMS_HESFILE =       47836472
9 set SMS_MISSINGFILE =   47836473
10 set SMS_NAMED =         47836475
11 set SMS_TARERR =        47836476
12
13 umask 22
14
15 # File that will contain the necessary information to be updated
16 set TARFILE=/tmp/hesiod.out
17 # Directory into which we will empty the tarfile
18 set SRC_DIR=/etc/athena/_nameserver
19 # Directory into which we will put the final product
20 set DEST_DIR=/etc/athena/nameserver
21 # Files to verify nameserver loaded-if empty, no check is done
22 set CHECKFILES=""
23
24 # Create the destination directory if it doesn't exist
25 if (! -d $DEST_DIR) then
26    /bin/rm -f $DEST_DIR
27    /bin/mkdir $DEST_DIR
28    /bin/chmod 755 $DEST_DIR
29 endif
30
31 # If $SRC_DIR does not already exist, make sure that it gets created
32 # on the same parition as $DEST_DIR.
33 if (! -d $SRC_DIR) then
34         chdir $DEST_DIR
35         mkdir ../_nameserver
36         chdir ../_nameserver
37         if ($SRC_DIR != `pwd`) ln -s `pwd` $SRC_DIR
38 endif
39
40 # Alert if tarfile doesn't exist
41 if (! -r $TARFILE) exit $SMS_MISSINGFILE
42
43 # Empty the tar file one file at a time and move each file to the
44 # appropriate place only if it is not zero length. 
45 cd $SRC_DIR
46 foreach  file (`/bin/tar tf $TARFILE | awk '{print $1}' | sed 's;/$;;'`)
47    if (. == $file) continue
48
49    rm -rf $file
50    echo extracting $file
51    /bin/tar xf $TARFILE $file
52    # Don't put up with errors extracting the information
53    if ($status) exit $SMS_TARERR
54    # Make sure the file is not zero-length
55    if (! -z $file) then
56       /bin/mv -f $file $DEST_DIR
57       if ($status != 0) exit $SMS_HESFILE
58    else
59       /bin/rm -f $file
60       exit $SMS_MISSINGFILE
61    endif
62 end
63
64 # Kill off the current named and remove the named.pid file.  It is
65 # important that this file be removed since the script uses its
66 # existance as evidence that named as has been successfully restarted.
67
68 # Use /bin/kill because, due to a bug in some versions of csh, failure
69 # of a builtin will cause the script to abort
70 /bin/kill -KILL `/bin/cat /etc/named.pid`
71 rm -f /etc/named.pid
72
73 # Restart named.
74 (unlimit; /etc/named)
75
76 # This timeout is implemented by having the shell check TIMEOUT times
77 # for the existance of /etc/named.pid and to sleep INTERVAL seconds
78 # between each check.
79
80 set TIMEOUT=60                  # number of INTERVALS until timeout
81 set INTERVAL=60                 # number of seconds between checks
82 set i = 0
83 while ($i < $TIMEOUT)
84    sleep $INTERVAL
85    if (-f /etc/named.pid) break
86    @ i++
87 end
88
89 # Did it time out?
90 if ($i == $TIMEOUT) exit $SMS_NAMED
91
92 # Verify that the nameserver is answering queries for the new data
93 cd $DEST_DIR
94 foreach f ( $CHECKFILES )
95         set temp=`tac $f | egrep -v '^;' | head -1`
96         set hes=`/bin/echo $temp | awk '{print $1}'`
97         set ent=`echo $hes | rev | sed 's/\(.*\)\.\(.*\)/\2/' | rev`
98         set type=`echo $hes | rev | sed 's/\(.*\)\.\(.*\)/\1/' | rev`
99         hesinfo $ent $type > /dev/null
100         if ($status == 1) then
101                 exit $SMS_HESFILE
102         endif
103 end
104
105 # Clean up!
106 /bin/rm -f $TARFILE
107 /bin/rm -f $0
108
109 exit 0
This page took 0.059226 seconds and 5 git commands to generate.