gail@shell:~$ cat process.rules # RULES FOR GAIL THE SMAIL # A tab-delimited handler for passing mail between gail and exim # # Format of file: inboundoutboundheaderkeyword(s) # For example: # mbx ssh Subject SECURITY # # Definitions: mbx ssh rss sms web # Local Mail Gail Transport Specialty Functions # # Comments MUST have the symbol as the first character in each line ssh mbx ALL UNMATCHED # Temporary setup mbx mbx ALL UNMATCHED ================ gail@shell:/home/joel$ incrontab -l /var/mail/gail IN_CLOSE_WRITE ~/trig-mbx.sh $@/$# >/dev/null /var/spool/gail/inbox IN_CLOSE_WRITE ~/trig-ssh.sh $@/$# >/dev/null ================ gail@shell:~$ cat trig-ssh.sh #!/bin/sh NOW=$(date -u +%F-%H%M.%N) sleep 2s cp $1 ~/current/ssh-$NOW.txt rm $1 ~/process.sh ssh $NOW ================ gail@shell:~$ cat trig-mbx.sh #!/bin/sh NOW=$(date -u +%F-%H%M.%N) sleep 2s cp $1 ~/current/mbx-$NOW.txt rm $1 ~/process.sh mbx $NOW ================ gail@shell:~$ cat process.sh #!/bin/bash INCOM=$1 FILE="current/$1-$2.txt" arrOUTs=() # Check if any special rules exist if [ $(grep -e "^$INCOM" process.rules | grep -v UNMATCHED | wc -l) -gt 0 ]; then # Create array for defined headings arrHeads=($(grep -e "^$INCOM" process.rules | grep -v UNMATCHED | cut -f 3 | sort | uniq)) for idxHeads in ${!arrHeads[*]}; do arrValue=($(grep -e "^$INCOM" process.rules | grep -v UNMATCHED | grep "${arrHeads[$idxHeads]}" | cut -f 4 | sort | uniq)) if [ ${#arrValue[*]} -eq 0 ]; then for idxValue in ${!arrValue[*]}; do if [ "${arrHeads[$idxHeads]}" == "ALL" ]; then TEST=$(grep "${arrHeads[$idxVaue]}" $FILE | wc -l) else TEST=$(grep "${arrHeads[$idxHeads]}:" $FILE | grep "${arrHeads[$idxHeads]}" | wc -l) fi if [ $TEST -ne 0 ]; then arrOUTs+=($(grep -e "^$INCOM" process.rules | grep "${arrHeads[$idxHeads]}" | grep "${arrValue[$idxValue]}" | cut -f 2 | sort | uniq)) fi done fi done fi # Indiscriminately add any UNMATCHED rules arrOUTs+=($(grep -e "^$INCOM" process.rules | grep UNMATCHED | cut -f 2 | sort | uniq)) # Handle outbounds individually #mbx if [ $(echo "${arrOUTs[@]}" | grep "mbx" | wc -l) -gt 0 ]; then SENDADDR="joel@shell.node" HEADFROM=$(grep -e '^From:' $FILE | head -1) HEADSUBJ=$(grep -e '^Subject:' $FILE | head -1 | sed 's/[\*\?]//g') GAILSUBJ=$(echo "$HEADSUBJ"|sed 's/^Subject:/Relay:/') HEADDATE=$(grep -e '^Date:' $FILE | head -1) printf "%s\\n" "$HEADFROM" "$HEADSUBJ" "$HEADDATE" "" "$(cat $FILE | sed '0,/^$/d')" | mail -s "$GAILSUBJ" -- $SENDADDR fi # Cleanup mv $FILE outbox/ find outbox/ *.txt -mtime +7 -type f -prune -exec rm {} \;