import java.util.*;
import java.text.*;
+// FIXME: check for binaries (razor, clamassassin, etc) and complain if not present
+
//
// - better matching syntax:
// - src-ip
case "mail.drop": return METHOD;
case "mail.razor": return getSub("mail.razor");
case "mail.razor.check": return METHOD;
+ case "mail.clamav": return getSub("mail.clamav");
+ case "mail.clamav.check": return METHOD;
case "mail.procmail": /* FEATURE */ return null;
case "mail.vacation": /* FEATURE */ return null;
case "mail.dcc": return getSub("mail.dcc");
((Message)args[0]).getStream().transcribe(new Stream(p.getOutputStream()), true);
return JSU.N(p.waitFor());
}
+ if (name.equals("mail.clamav.check")) {
+ // FIXME: this is returning "is-virus-laden" when clamdscan is unhappy -- BAD!
+ // should use error code: 0=clean, 1=virus, 2=malfunction
+ Process p = Runtime.getRuntime().exec("clamdscan - --stdout --quiet");
+ ((Message)args[0]).getStream().transcribe(new Stream(p.getOutputStream()), true);
+ int result = p.waitFor();
+ if (result==0) return JSU.N(0);
+ StringBuffer ret = new StringBuffer();
+ new Stream(p.getInputStream()).transcribe(ret);
+ return JSU.S(ret.toString());
+ }
if (name.equals("mail.dcc.check")) {
Process p = Runtime.getRuntime().exec(new String[] { "dccproc", "-H" });
((Message)args[0]).getStream().transcribe(new Stream(p.getOutputStream()), true);