X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/d0ff16432e508e111170617693a3a11e725bb0d0..df963ba5bc43c7621fe17c6075ec64dab65c4a62:/gen/mailhub.sh diff --git a/gen/mailhub.sh b/gen/mailhub.sh index d4ef6ebf..db980351 100644 --- a/gen/mailhub.sh +++ b/gen/mailhub.sh @@ -1,22 +1,75 @@ #!/bin/sh +# +# $Header$ + +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/etc:/usr/etc:/usr/athena/bin:/usr/local/bin +export PATH + +if [ -d /var/athena ] && [ -w /var/athena ]; then + exec >/var/athena/moira_update.log 2>&1 +else + exec >/tmp/moira_update.log 2>&1 +fi + +# The following exit codes are defined and MUST BE CONSISTENT with +# error codes the library uses: MR_MKCRED=47836474 -/bin/cp /dev/null /u1/usr/lib/aliases.new.dir -/bin/cp /dev/null /u1/usr/lib/aliases.new.pag -/usr/lib/sendmail -bi -oA/u1/usr/lib/aliases.new +MR_MISSINGFILE=47836473 +MR_NOCRED=47836470 + +root=/usr/local/sendmail + +if [ -r $root/etc/aliases.new ]; then + chmod 644 $root/etc/aliases.new +else + exit $MR_MISSINGFILE +fi + +if [ ! -r $root/etc/aliases ]; then + logger -p mail.error -t mailhub.sh "No current aliases file, aborting." + exit $MR_NOCRED +fi + +# Play it safe and be sure we have reasonable data +olines=`wc -l $root/etc/aliases | awk '{print $1}'` +nlines=`wc -l $root/etc/aliases.new | awk '{print $1}'` +diff=`expr $nlines - $olines` +thresh=`expr $olines / 10` + +# Catch the zero case +if [ $nlines -eq 0 ]; then + logger -p mail.error -t mailhub.sh "Recieved empty aliases file, aborting." + exit $MR_MISSINGFILE +fi + +# If its a greater than 10% shift bomb out to be safe +if [ $diff -gt $thresh ]; then + logger -p mail.error -t mailhub.sh "Alias changes threshold exceeded, aborting." + exit $MR_NOCRED +fi + +cp /dev/null $root/etc/aliases.new.db + +$root/sbin/sendmail -bi -oA$root/etc/aliases.new if [ $? != 0 ]; then - exit $MR_MKCRED - fi - -kill `/bin/ps ax | /bin/grep "accepting connections" | /bin/grep -v grep | /bin/awk '{print $1}'` -/bin/mv /u1/usr/lib/aliases /u1/usr/lib/aliases.old -/bin/mv /u1/usr/lib/aliases.dir /u1/usr/lib/aliases.old.dir -/bin/mv /u1/usr/lib/aliases.pag /u1/usr/lib/aliases.old.pag -/bin/mv /u1/usr/lib/aliases.new /u1/usr/lib/aliases -/bin/mv /u1/usr/lib/aliases.new.dir /u1/usr/lib/aliases.dir -/bin/mv /u1/usr/lib/aliases.new.pag /u1/usr/lib/aliases.pag -/usr/lib/sendmail -bd -q30m - -/bin/rm -f $0 -exit 0 + exit $MR_MKCRED +fi -# $Header$ +sh /etc/init.d/sendmail stop + +mv $root/etc/aliases $root/etc/aliases.old +mv $root/etc/aliases.db $root/etc/aliases.old.db +mv $root/etc/aliases.new $root/etc/aliases +mv $root/etc/aliases.new.db $root/etc/aliases.db + +sh /etc/init.d/sendmail start + +# Make sure the sendmail daemons are indeed running +ps -ef | grep sendmail | grep -v grep > /dev/null 2>&1 +if [ $? -ne 0 ]; then + logger -p mail.error -t mailhub.sh "Sendmail failed to restart." + exit $MR_MKCRED +fi + +rm -f $0 +exit 0