X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/5f74969d316ccc0916c8e3a779b59af7dc410d12..34a2520c8cd16d1d0446959b62e28d2fe3cbd1c9:/gen/mailhub.sh diff --git a/gen/mailhub.sh b/gen/mailhub.sh index 242cdcad..db980351 100644 --- a/gen/mailhub.sh +++ b/gen/mailhub.sh @@ -1,23 +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 -cat /usr/lib/local-aliases >> /usr/lib/aliases.new -/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