#!/bin/sh # # Linux kernel info mailer # # (P) & (C) 1997-2002 by Peter Bieringer # # # Changes to # 1.00: inital release # 1.10: fix empty mail sending # 1.11: avoid "alpha" messages # 20000707/PB: adapt for titan # 20011009/PB: enhance anti noise feature # 20020221/PB: minor redesign, use diff now # 20020525/PB: anonymizing #set -x INFOPATH=/home/kernelinfo/tmp INFONEW=kernelinfo.new INFOOLD=kernelinfo.old # Host to query with finger QUERYHOST="ftp.kernel.org" # Mail receipient MAIL_RCPT="kernelinfo@localhost" # 'finger' binary (for getting info) FINGERBIN=/usr/bin/finger # 'mail' binary (for sending mails) MAILBIN=/usr/bin/Mail # Keyword for detecting the 'alpha' line KEY_ALPHADETECT="alpha|-ac" #set -x # Primary tests if [ ! -d $INFOPATH ]; then echo -e "\a Info directory doesn't exit" exit 2 fi if [ ! -x $FINGERBIN ]; then echo -e "\a Needed binary '$FINGERBIN' doesn't exit" exit 2 fi if [ ! -x $MAILBIN ]; then echo -e "\a Needed binary '$MAILBIN' doesn't exit" exit 2 fi # functions help() { echo " -nm send no mail" echo " -lh query 'localhost' instead of '$QUERYHOST'" echo " -nam no updated 'alpha' version triggers a mail" echo } getoptions() { while [ ! "$1" = "" ]; do if [ "$1" = "-?" ]; then return 1 elif [ "$1" = "-nm" ]; then echo " Option 'no mail' set" FLAG_NOMAIL=1 shift elif [ "$1" = "-lh" ]; then echo " Option 'localhost' set" QUERYHOST="localhost" shift elif [ "$1" = "-nam" ]; then echo " Option 'no 'alpha' triggered mail' set" FLAG_NOALPHATRIGGER=1 shift else echo " Option '$1' isn't understood!" fi done } ## start getoptions $* || { help; exit 1; } echo "Get new information" if [ "$FLAG_NOALPHATRIGGER" != 1 ]; then # normal finger $FINGERBIN @$QUERYHOST 2>/dev/null >$INFOPATH/$INFONEW || exit 1 else # also normal finger, but filtering lines with $KEY... $FINGERBIN @$QUERYHOST 2>/dev/null | egrep -i -v "$KEY_ALPHADETECT" 2>/dev/null >$INFOPATH/$INFONEW || exit 1 fi # Test if answer is valid LINES=`cat $INFOPATH/$INFONEW | wc -l` if [ $LINES -le 2 ]; then echo " Answer isn't valid" exit 1 fi # Compare with last answers if [ -f $INFOPATH/$INFOOLD ]; then echo "Compare with old information" if diff -u $INFOPATH/$INFOOLD $INFOPATH/$INFONEW >/dev/null; then echo "Equal - nothing to do!" exit 0 else echo "Not equal!" fi else true fi if [ "$FLAG_NOMAIL" = 1 ]; then echo "Send no mail" diff -u $INFOPATH/$INFOOLD $INFOPATH/$INFONEW | grep -v "^---" | grep -v "^+++" | grep -v "^@@" else diff -u $INFOPATH/$INFOOLD $INFOPATH/$INFONEW | grep -v "^---" | grep -v "^+++" | grep -v "^@@" | $MAILBIN -s'New Linux kernel is out!' $MAIL_RCPT cp $INFOPATH/$INFONEW $INFOPATH/$INFOOLD fi