head 1.1; access; symbols; locks alexis:1.1; strict; comment @# @; 1.1 date 98.08.07.11.33.43; author alexis; state Exp; branches; next ; desc @script to get mail via POP3 with fetchmail @ 1.1 log @Initial revision @ text @#!SCRIPTSHELLCMD_MARKER PATH=/bin:/usr/bin PROGNAME=`basename $0` VERSION="PATCHLEVEL_MARKER" LOCKFILE=LOCKDIR_MARKER/$PROGNAME.pid # $Id: getmail-sendmail.in,v 1.5 1998/02/05 12:27:22 alexis Exp $ usage() { { echo "Usage: $PROGNAME [ -d | -v ] { ... | all }" echo " $PROGNAME -V" } >&2 exit 2 } main() { # Process options - author to add extra options! while [ "X$1" != X ]; do case "$1" in -V) if expr "$VERSION" : 'P.*R$' > /dev/null; then warning "this is a development version; use 'ident' for version information" exit 1 else echo "$PROGNAME version $VERSION" exit 0 fi ;; -d) [ "X$2" = X ] && usage VERBOSE_LEVEL=$2 shift ;; -v) VERBOSE_LEVEL=3 ;; -*) usage ;; *) break ;; esac shift done [ "X$1" = X ] && usage # Lock out other calls to this program since is can take a while to run lock for ID in $*; do [ $ID = all ] && { error -f "'all' is not supported yet"; break; } info "retrieving mail for $ID" if [ $VERBOSE_LEVEL -ge 3 ]; then su - $ID -c "fetchmail -v" else su - $ID -c fetchmail fi done unlock debug 5 "all done" } internal() { echo "$PROGNAME: \ INTERNAL ERROR: $*" exit 2 } VERBOSE_LEVEL=${VERBOSE_LEVEL:-2} error() { FATAL=false while :; do case "$1" in -f) FATAL=true ;; -*) internal "invalid option to error() '$1'" ;; *) break ;; esac shift done if [ $VERBOSE_LEVEL -ge 1 ]; then if [ $FATAL = true ]; then echo "$PROGNAME: \ FATAL ERROR: $*" >&2 else echo "$PROGNAME: \ ERROR: $*" >&2 fi fi [ $FATAL = true ] && exit 1 return 1 } VERBOSE_LEVEL=${VERBOSE_LEVEL:-2} warning() { [ $VERBOSE_LEVEL -ge 2 ] && { echo "$PROGNAME: \ WARNING: $*" >&2; } return 0 } VERBOSE_LEVEL=${VERBOSE_LEVEL:-2} debug() { if [ $VERBOSE_LEVEL -ge $1 ]; then shift if [ "X$MSG_HANDLE" = Xstderr ]; then echo "$PROGNAME: \ DEBUG: $*" >&2 else echo "$PROGNAME: \ DEBUG: $*" fi fi return 0 } VERBOSE_LEVEL=${VERBOSE_LEVEL:-2} info() { [ $VERBOSE_LEVEL -lt 3 ] && return while :; do case "$1" in -*) internal "invalid option to info() '$1'" ;; *) break ;; esac shift done if [ "X$MSG_HANDLE" = Xstderr ]; then echo "$PROGNAME: \ INFO: $*" >&2 else echo "$PROGNAME: \ INFO: $*" fi return 0 } lock() { { echo $$ > $LOCKFILE.$$; } 2>/dev/null || error -f "can't create lock" ln $LOCKFILE.$$ $LOCKFILE 2>/dev/null && { rm $LOCKFILE.$$; return 0; } HOLDING_PID=`cat $LOCKFILE` [ "X$HOLDING_PID" = X ] && { rm $LOCKFILE.$$; error -f "empty lockfile: $LOCKFILE"; } [ -d /proc/$HOLDING_PID ] && { rm $LOCKFILE.$$; error -f "program running already! (pid=$HOLDING_PID)"; } info "removing stale lock (pid=$HOLDING_PID)" rm -f $LOCKFILE ln $LOCKFILE.$$ $LOCKFILE 2>/dev/null && { rm $LOCKFILE.$$; return 0; } rm $LOCKFILE.$$ error -f "couldn't lock after removing stale lockfile" } unlock() { rm -f $LOCKFILE } umask 022 main "$@@" exit $? @