Linux Training

Linux training for private, public & voluntary sector.

0793 572 8612

City LinUX sample scripts - procmailpf


#!/bin/bash
# $Id: procmailpf,v 1.51 2015/05/11 09:19:45 fulford Exp $
# $Source: /src/merlin/usr/local/etc/RCS/procmailpf,v $
# $Revision: 1.51 $
# Author C W Fulford.
# Copyright 2015 (c) C W Fulford.
# Licensed for public use under the LGPL, .
# For assistance contact fulford@fulford.net 0709 229 5385
########################################################################
cmd=`basename $0`
ver=`echo "$Id: procmailpf,v 1.51 2015/05/11 09:19:45 fulford Exp $"|awk '{print $3,$4,$5}'`
syntax="$cmd [[-c <client_id>] [-d] [-v] [[-m <maildomain>]|[-a <hostname>]]] |[-V]"
while [ $# -gt 0 ] ;do
	case $1 in 
		-a) all=:;srvr=$2;shift 2;; 
		-c) clientid=$2;shift 2;;
		-d) set -x;debug=0;shift;;
		-l) log=:;shift;;
		-v) verbose=:;shift;;
		-V) echo "$cmd $Revision: 1.51 $ $Date: 2015/05/11 09:19:45 $"|awk '{print $1,$3,$6}';exit;;  
		-m)  maildomain=$2;shift 2 ;;
		 *) echo "$syntax" >&2;exit 1;;
	esac
done

[ "$clientid" ]|| { echo $syntax >&2; exit 1;}

# Only $srvr or $maildomain should be set at this stage 
[ "$srvr" -a "$maildomain" ] &&{ echo "$syntax" >&2; exit 1 ;}

[ "$maildomain" ] &&{ 
	getent hosts $maildomain >/dev/null||{
		echo "$cmd: Can't find $maildomain" >&2;exit 1
	}
}
[ "srvr" ] &&{ 
	getent hosts $srvr >/dev/null||{
		echo "$cmd: Can't find $srvr" >&2;exit 1
	}
}


mdir=/var/qmail/mailnames

qmail=/src/$clientid${mdir}/common/.qmail
[ -r $qmail ] ||{ echo "$cmd: Can't find $qmail" >&2;exit 1 ;}

procmailrc=/src/$clientid${mdir}/common/.procmailrc
[ -r $procmailrc ] ||{ echo "$cmd: Can't find $procmailrc" >&2;exit 1 ;}

if [ "$all" ];then 
	vdomains=`ssh $srvr "cd $mdir;ls"`
fi
for maildomain in $vdomains $maildomain ;do
	ssh $maildomain "sudo find $mdir/$maildomain -mindepth 1 -maxdepth 1 -type d"|
	while read d ;do
	 	cat $qmail | ssh  $maildomain "sudo dd of=\"$d\"/.qmail 2>/dev/null"
		[ "$verbose" ] && echo "$d/.qmail updated"
		[ "$log" ] && logger -t $cmd "$d/.qmail updated"
		mailuser=`basename $d`
 		cat $procmailrc |sed -e 's/<mail domain>/'$maildomain'/;s/<mail user>/'$mailuser'/'|
			ssh $maildomain "sudo dd of=\"$d\"/.procmailrc 2>/dev/null
				sudo chown popuser.popuser \"$d\"/.procmailrc
				sudo chmod 644 \"$d\"/.procmailrc"
		[ "$verbose" ] && echo "$d/.procmailrc updated"
		[ "$log" ] && logger -t $cmd "$d/.procmailrc updated"
	done
done

# Tell postfix to recheck configuration
[ -n "$srvr" ] || srvr=$maildomain 
ssh $srvr "sudo service postfix reload"|
if grep OK >/dev/null;then
	[ "$verbose" ] && echo "$cmd: postfix on $srvr notified"
else
	echo "$cmd: postfix reload failed">&2
	exit 1
fi
######################################################################
# This program is free software: you can redistribute it and or      #
# modify it under the terms of the Lesser GNU General Public License #
# as published by the Free Software Foundation, either version 3 of  #
# the License, or (at your option) any later version.                #
#                                                                    #
# This program is distributed in the hope that it will be useful,    #
# but WITHOUT ANY WARRANTY; without even the implied warranty of     #    
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      #
# GNU General Public License for more details.                       #
#                                                                    # 
# A copy of the Lesser GNU General Public License and the GNU        #
# General Public License is available at                             #
# <http://www.gnu.org/licenses/>.                                    #
######################################################################

The layout and associated style sheets for this page are taken from the World Wide Web Consortium and used here under the W3C software licence.