From f328b974e2776411a39af508ae6ffbed0d5d81ce Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 9 Jan 2009 02:15:07 +0000 Subject: [PATCH] Support all the different spamc/spamd commands, plus an extra "process if below threshold" optional feature (with '-T'). --- exec/spamc.js | 58 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/exec/spamc.js b/exec/spamc.js index a0812cfef2..729ccc1425 100644 --- a/exec/spamc.js +++ b/exec/spamc.js @@ -1,32 +1,69 @@ // spamc.js // SpamAssasin client for Synchronet -// For use as mailproc.ini script to check messages with spamd +// For use as mailproc.ini script to check messages against a running/listening spamd + +// Example mailproc.ini entries: + +// [spamc.js -c] // $Id$ load('sockdefs.js'); load('salib.js'); -var spamd_address = '127.0.0.1'; -var spamd_tcp_port = 783; - function main() { + var address = '127.0.0.1'; + var tcp_port = 783; + var user; + var cmd = 'PROCESS'; // Default: process + var threshold; + // Process arguments: for(i in argv) { - if(argv[i]=='-d' || argv[i]=='--dest') - spamd_address = argv[++i]; + if(argv[i]=='-d' || argv[i]=='--dest') + address = argv[++i]; // Note: only one address supported (unlike spamc) else if(argv[i]=='-p' || argv[i]=='--port') - spamd_tcp_port = Number(argv[++i]); + tcp_port = Number(argv[++i]); + else if(argv[i]=='-u' || argv[i]=='--username') + user = argv[++i]; + else if(argv[i]=='-T' || argv[i]=='--threshold') + threshold = parseFloat(argv[++i]); + else if(argv[i]=='-c' || argv[i]=='--check') + cmd = 'CHECK'; + else if(argv[i]=='-y' || argv[i]=='--tests') + cmd = 'SYMBOLS'; + else if(argv[i]=='-R' || argv[i]=='--full') + cmd = 'REPORT'; + else if(argv[i]=='-r' || argv[i]=='--fullspam') + cmd = 'REPORT_IFSPAM'; } - var msg=new SPAMC_Message(message_text_filename, spamd_address, spamd_tcp_port); + var msg=new SPAMC_Message(message_text_filename, address, tcp_port, user); if(msg === false) return; - var ret=msg.check(); + msg.debug=true; + log(LOG_INFO, "spamc: Executing command: " + cmd); + var ret=msg.DoCommand(cmd); if(ret === false) return; + if(ret.score!=undefined) { + log(LOG_INFO, "spamc: Score: " + ret.score + ' / ' + ret.threshold); + if(threshold && ret.score < threshold) + var ret=msg.DoCommand(cmd='PROCESS'); + } + if(cmd == 'PROCESS') { + var msg_file = new File(message_text_filename); + if(!msg_file.open("w")) { + log(LOG_ERR,format("spamc: !ERROR %d opening message text file: %s" + ,msg_file.error, message_text_filename)); + return; + } + msg_file.write(ret.message); + msg_file.close(); + return; + } if(!ret.isSpam) return; var error_file = new File(processing_error_filename); @@ -35,7 +72,8 @@ function main() ,error_file.error, processing_error_filename)); return; } - error_file.writeln("SpamAssassin rejected your mail: " + ret.score + ' / ' + ret.threshold); + error_file.writeln("SpamAssassin rejected your mail: " + ret.score + ' / ' + ret.threshold + + ' ' + ret.symbols); error_file.close(); } -- GitLab