X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FScript.java;h=3a829c688b6221096435054bbd6443c2c17b2fee;hb=9132708e0c39819b2ad5e97268c0f326a9d51325;hp=f3a189cfe5513d3f430c1ab0e2d4f2bc7ebd03d8;hpb=c173ef6beb59eca7da43b01632381a5dcf3235be;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Script.java b/src/org/ibex/mail/Script.java index f3a189c..3a829c6 100644 --- a/src/org/ibex/mail/Script.java +++ b/src/org/ibex/mail/Script.java @@ -13,6 +13,8 @@ import java.io.*; import java.util.*; import java.text.*; +// FIXME: check for binaries (razor, clamassassin, etc) and complain if not present + // // - better matching syntax: // - src-ip @@ -133,6 +135,8 @@ public class Script extends JS.Obj implements Target { 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"); @@ -147,8 +151,8 @@ public class Script extends JS.Obj implements Target { } catch (IOException e) { throw new JSExn(e.toString()); } case "mail.whitelist": return JSReflection.wrap(org.ibex.mail.SMTP.whitelist); case "mail.my.mailbox": - Mailbox root = FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT, true); - return root.slash("user", true).slash("megacz", true); + MailTree root = FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT, true); + return (JS)root.slash("user", true).slash("megacz", true); case "mail.list": return METHOD; //#end return super.get(name); @@ -237,13 +241,54 @@ public class Script extends JS.Obj implements Target { ((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); StringBuffer ret = new StringBuffer(); new Stream(p.getInputStream()).transcribe(ret); p.waitFor(); - return JSU.S(ret.toString()); + String result = ret.toString(); + Log.warn("dcc", ((Message)args[0]).summary() + ":\n " + result); + int body = 0; + int fuz1 = 0; + int fuz2 = 0; + int i_body = result.indexOf("Body="); + int i_fuz1 = result.indexOf("Fuz1="); + int i_fuz2 = result.indexOf("Fuz2="); + if (i_body != -1) try { + String s = result.substring(i_body+5); + if (s.indexOf(' ') != -1) s = s.substring(0, s.indexOf(' ')); + if (s.indexOf('\n') != -1) s = s.substring(0, s.indexOf('\n')); + body = s.trim().equals("many") ? 999 : Integer.parseInt(s.trim()); + } catch (Exception e) { Log.error("", e); } + if (i_fuz1 != -1) try { + String s = result.substring(i_fuz1+5); + if (s.indexOf(' ') != -1) s = s.substring(0, s.indexOf(' ')); + if (s.indexOf('\n') != -1) s = s.substring(0, s.indexOf('\n')); + fuz1 = s.trim().equals("many") ? 999 : Integer.parseInt(s.trim()); + } catch (Exception e) { Log.error("", e); } + if (i_fuz2 != -1) try { + String s = result.substring(i_fuz2+5); + if (s.indexOf(' ') != -1) s = s.substring(0, s.indexOf(' ')); + if (s.indexOf('\n') != -1) s = s.substring(0, s.indexOf('\n')); + fuz2 = s.trim().equals("many") ? 999 : Integer.parseInt(s.trim()); + } catch (Exception e) { Log.error("", e); } + JSArray jsa = new JSArray(); + jsa.put(JSU.N(0), JSU.N(body)); + jsa.put(JSU.N(1), JSU.N(fuz1)); + jsa.put(JSU.N(2), JSU.N(fuz2)); + return jsa; } if (name.equals("mail.drop")) { return args.length==0 ? new Drop() : new Drop(JSU.toString(args[0]));