Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: [Original edit by BretMiller]

...

Script will call SpamAssassin spamc from CommuniGate. Since SA modifies the actual message, it must be re-delivered via the Submitted directory. Sneaky Header Tagging is used to prevent the message from being scanned again, and/or being caught in a loop is spamd fails.

Source code

...

No Format

#!/bin/sh

...



################################################################################

...

#  Script to call Spam Assassin from 

...

CommuniGate

...

 Pro Rules  v1.1  Ed Fang 
#     If you have any improvements, drop me a line at edfang@visi.net 
#         Thanks for Stefan Seiz for the original template 
# 
# Script will call 

...

SpamAssassin

...

 spamc from 

...

CommuniGate

...

.  Since SA modifies 
# the actual message, it must be re-delivered via the Submitted directory.

...


# Sneaky Header Tagging is used to prevent the message from being scanned 
# again, and/or being caught in a loop is spamd fails. 
# 
# DATA

...


# Communigate Pro Rules 
# Any Recipient in     

...

*@domain.com 
# Message Size  less than   32768 
# Header Field   is not     X-Spam-Status

...

* 
# 
# ACTION 
# Execute       

...

[STDERR

...

] 

...

[FILE

...

] 

...

[RETPATH

...

] 

...

[RCPT

...

] /var/CommuniGate/scanspam.sh 
# Discard 
# 
#  You must discard the message as the script will re-submit the marked message through the 
#  Submitted directory of 

...

CommuniGate

...

.  If you don't, you'll get every message 
#  twice - once scanned, once clear through.  (which is a good way to test 
#  before actually discarding the message.  Stalker has asked that messages 
#  not be modified in the Queue directory, so it's just safer to play by their 
#  rules. 
# 
#  1.1 - Changed to run using gawk.  Highly advised as awk will occasionally 
#        crap out with trememdously long html lines. 
# 
#  Note: The global variables aren't used all over the place, so I'll clean that 
#  up in a later version.  I think there might be a more efficient awk script 
#  so any other awk gurus out there might be able to give me a better awk 
#  than the one I have (which skips everything until it matches Received 
#  and then to the end of the file. 
#

...



################################################################################

...


#### START user configurable variables

...


# CGate base directory myCgate="/var/CommuniGate" myLogFile="/var/CommuniGate/spam-result.out"

...



#### END user configurable variables

...


#Comment out following two lines if you don't want to echo the passed variable info to 
#the spam-result.out file. 
myDate=

...

`date +%Y-%m-%d\ %H:%M:

...

%S` 
echo "Date $myDate " $@ >> $myLogFile

...



#Get the fileid of the message file 
QueuePath=$2 
NewFile=

...

`basename $QueuePath`'.tmp' 
FinalFile=$NewFile'.sub'

...



# Formulate return-path and Envelope-To addresses from command line args. 
# shift out the first 3 arguments, make sure one > to create a new file shift 3

...



# If you are using Spamprep, the following line should be commented out 
echo "Return-Path:" $1 > /var/CommuniGate/Submitted/$NewFile

...



# If you are using Spamprep, the following line should be uncommented 
# ReturnPath=$1

...



# shift out 5 command arguments.  and start appending shift 2 
Envelope=$1 
shift 
while 

...

[ $# -gt 0 

...

] do

...



 . Envelope=$Envelope','$1 shift

...



done

...



# Formulate the envelope Header file.

...



# If you are using Spamprep, the following line should be commented out 
echo "Envelope-To: " $Envelope >> $myCgate/Submitted/$NewFile

...



# Append an X-Spam header in there.  This is very important.  Without this 
# tag, if spamc fails to call spamd, it will send the message back without 
# a tag and your message will fall into an UGLY loop.  This alleviates that.

...



# If you are using Spamprep, the following line should be commented out 
echo "X-Spam-Status: Scanner Called" >> $myCgate/Submitted/$NewFile

...



# strip out CommuniGate stuff for SpamAssassin first 
# using awk, and then send to spamc.

...



# If you are using Spamprep, the following line should be commented out 
gawk '/Received/, /\n/' $myCgate/$QueuePath | /usr/local/bin/spamc -d 127.0.0.1 -f >> /var/CommuniGate/Submitted/$NewFile

...



# If you are using Spamprep, the following line should be uncommented 
#/var/CommuniGate/spam/spamprep "$myCgate/$QueuePath" "$ReturnPath" "$Envelope" | /usr/bin/spamc -d 127.0.0.1 -f >> "$myCgate/Submitted/$NewFile"

...



#Now submit the file by renameing it to .sub 
mv /var/CommuniGate/Submitted/$NewFile /var/CommuniGate/Submitted/$FinalFile

...



# done. 
exit 0;

...