diff --git a/exec/load/salib.js b/exec/load/salib.js index 5fefa2373fd8a5c28ebab162427b700d6a8ec8bb..ac9378c2521b3d30e121a25323056f7bfc30ea49 100644 --- a/exec/load/salib.js +++ b/exec/load/salib.js @@ -8,7 +8,7 @@ load("sockdefs.js") function SPAMC_Message(messagefile, addr, port, user) { if(!file_exists(messagefile)) - return(false); + this.error="Message file '"+messagefile+"' does not exist"; this.addr=addr; if(this.addr==undefined) this.addr='127.0.0.1'; @@ -30,13 +30,13 @@ function Message_DoCommand(command) var rcvd=new Array(); var tmp; var sock=new Socket(SOCK_STREAM, "spamc"); - var ret=new Object(); - ret.message=''; + var ret={message:'', isSpam:false, score:'unknown', threshold:'unknown', symbols:[]}; if(!sock.connect(this.addr, this.port)) { - log("ERROR: spamc.js failed to connect!"); - return(false); + ret.error='Failed to connect to spamd'; + return(ret); } + sock.write(command.toUpperCase()+" SPAMC/1.2\r\n"); sock.write("Content-length: "+file_size(this.messagefile)+"\r\n"); if(this.user) // Optional @@ -44,6 +44,7 @@ function Message_DoCommand(command) sock.write("\r\n"); sock.sendfile(this.messagefile); sock.is_writeable=false; + while(1) { tmp=sock.recvline(); if(tmp==undefined || tmp=='') @@ -61,18 +62,20 @@ function Message_DoCommand(command) ret.message += tmp; } } + if(rcvd.length < 1) { - log("ERROR: No lines read from spamd"); - return(false) + ret.error='No lines read from spamd'); + return(ret) } - var tmp=rcvd[0].split(/\s+/,3); + + tmp=rcvd[0].split(/\s+/,3); if(tmp.length < 3) { - log("ERROR: Unable to parse line '"+rcvd[0]); - return(false) + ret.error="Unable to parse line '"+rcvd[0]; + return(ret) } - if(tmp[1] != 0) { - log("ERROR: spamd returned error "+tmp[2]+" ("+tmp[1]+")"); - return(false) + if(tmp[1] != '0') { + ret.error="spamd returned error "+tmp[2]+" ("+tmp[1]+")"; + return(ret) } /* Parse headers */ @@ -94,11 +97,9 @@ function Message_DoCommand(command) } if(command == 'SYMBOLS') { - if(ret!==false) { - ret.message=ret.message.replace(/[\r\n]/g,''); - ret.symbols=ret.message.split(/,/); - ret.message=''; - } + ret.message=ret.message.replace(/[\r\n]/g,''); + ret.symbols=ret.message.split(/,/); + ret.message=''; } return(ret); diff --git a/exec/spamc.js b/exec/spamc.js index 729ccc142519dcc28a429ca5a4a97de555109437..f00a5b9ab027e314bda4e6d3787f93f8cac051d7 100644 --- a/exec/spamc.js +++ b/exec/spamc.js @@ -41,14 +41,18 @@ function main() } var msg=new SPAMC_Message(message_text_filename, address, tcp_port, user); - if(msg === false) + if(msg.error != undefined) { + log(LOG_ERR,"spamc: !ERROR "+msg.error); return; + } msg.debug=true; log(LOG_INFO, "spamc: Executing command: " + cmd); var ret=msg.DoCommand(cmd); - if(ret === false) + if(ret.error != undefined) { + log(LOG_ERR,"spamc: !ERROR "+ret.error); return; - if(ret.score!=undefined) { + } + if(!isNaN(ret.score)) { log(LOG_INFO, "spamc: Score: " + ret.score + ' / ' + ret.threshold); if(threshold && ret.score < threshold) var ret=msg.DoCommand(cmd='PROCESS');