]> andersk Git - moira.git/blobdiff - gen/nfs.sh
Diane Delgado's changes for a fixed table-locking order
[moira.git] / gen / nfs.sh
index a869c0f1bd43f5d3c88d46e1dac7a55adb07da53..21c1899353f27940752833a6a91f29e0a0b39868 100644 (file)
@@ -1,24 +1,91 @@
-TARFILE=/tmp/nfs
-TMPDIR=/tmp/nfs.dir
-if [ ! -d $TMPDIR ]; then
-       /bin/rm -f $TMPDIR
-       /bin/mkdir $TMPDIR
-       /bin/chmod 755 $TMPDIR
-fi
-# cd $TMPDIR; tar xf $TARFILE
-for QFILE in $TMPDIR/\\*; do
-       while :; do
-               read login dir uid gid quota
-               if [ $? != 0 ]; then exit 0; fi
-               path=$dir/$login
-               echo mkdir $path
-               echo chown $uid $path
-               echo chgrp $gid $path
-               echo setquota `expr $QFILE : '[^\]*\(.*\)' \
-| sed 's,\\\\,/,g'` $uid $quota
-       done <$QFILE
-done
-#
-#      $Source$
-#      $Header$
+#!/bin/csh -f
+# This script performs nfs updates on servers.
 #
+# $Header$
+
+# The following exit codes are defined and MUST BE CONSISTENT with the
+# MR error codes the library uses:
+set MR_NOCRED = 47836470
+set MR_MKCRED = 47836474
+set MR_TARERR = 47836476
+
+set path=(/etc /bin /usr/bin /usr/etc /usr/athena/etc)
+set nonomatch
+
+# The file containg the information for the update
+set TARFILE=/tmp/nfs.out
+# The directory into which we will empty the tarfile
+set SRC_DIR=/tmp/nfs.dir
+
+# Alert if the tarfile does not exist
+if (! -r $TARFILE) then
+   exit $MR_TARERR
+endif
+
+# Create a fresh source directory
+rm -rf $SRC_DIR
+mkdir $SRC_DIR
+chmod 755 $SRC_DIR
+
+# Note that since MR is going to be exported, assuming .MIT.EDU is 
+# incorrect.  For now however, it is probably not worth the effort
+# to canonicalize the hostname, especially with the upcoming update
+# protocol redesign
+set uchost=`hostname | tr '[a-z]' '[A-Z]'`.MIT.EDU
+
+cd $SRC_DIR
+
+# Just extract everything since some of what we need exists as
+# hardlinks and tar doesn't deal well with extracting them in isolation.
+tar xf $TARFILE
+if ($status) exit $MR_TARERR
+
+foreach type (dirs quotas)
+   echo "Installing ${type}:"
+   foreach i ( ${uchost}*.${type} )
+     if (-e $i) then
+       # Convert the from the filename HOST.@dev@device.type to /dev/device
+       set dev=`echo $i |  sed "s,.${type},," | sed "s,${uchost}.,," | sed "s,@,/,g"`
+       echo ${uchost}:$dev
+       ./install_${type} $dev < $i
+       if ($status) exit $status
+       if ($type == quotas) ./zero_quotas $dev < $i
+       if ($status) exit $status
+       # save the files used here for later debugging
+       mv $i /tmp
+     endif
+   end
+end
+
+# build new credentials files.
+rm -f /usr/etc/credentials.new
+cp ${uchost}.cred /usr/etc/credentials.new
+if ($status) exit $MR_NOCRED
+
+# After this point, if /tmp gets cleared out by reactivate (which
+# happens on a combined server/workstation) we don't care.
+
+mkcred /usr/etc/credentials.new
+if ($status) exit $MR_MKCRED
+
+# Try to install the files
+foreach e ( "" .dir .pag)
+   mv -f /usr/etc/credentials.new$e /usr/etc/credentials$e
+end
+
+# If any of them didn't get installed, fail
+foreach e ( "" .dir .pag)
+   if (! -e /usr/etc/credentials$e) exit $MR_NOCRED
+end
+
+
+
+# cleanup
+if ( -f $TARFILE ) rm -f $TARFILE
+if ( -d $SRC_DIR ) then
+  cd $SRC_DIR/..
+  rm -rf $SRC_DIR
+endif
+if ( -f $0 ) rm -r $0
+
+exit 0
This page took 0.040621 seconds and 4 git commands to generate.