mail.dir, mail.shell
authoradam <adam@megacz.com>
Sun, 9 Jul 2006 06:45:17 +0000 (06:45 +0000)
committeradam <adam@megacz.com>
Sun, 9 Jul 2006 06:45:17 +0000 (06:45 +0000)
darcs-hash:20060709064517-5007d-80232e1e41b7f2c139f69177342846f1aa07fda6.gz

src/org/ibex/mail/Main.java
src/org/ibex/mail/protocol/SMTP.java
src/org/ibex/mail/target/Script.java

index cfad5c1..c90236c 100644 (file)
@@ -25,9 +25,8 @@ public class Main implements Listener {
             else if (conn.getLocalPort() == 119)  new NNTP.Listener(auth).handleRequest(conn);
             //else if (conn.getLocalPort() == 110)  new POP3.Listener(auth).handleRequest(conn);
             else if (conn.getLocalPort() == 8099) GMail.handleRequest(conn);
-            //            else if (conn.getLocalPort() == 8080) Jetty.instance().accept(conn);
-            //else if (conn.getLocalPort() == 443) Jetty.instance().accept(conn);
-            //else if (conn.getLocalPort() == 80)   Jetty.instance().accept(conn);
+            else if (conn.getLocalPort() == 8080) Jetty.instance().accept(conn);
+            else if (conn.getLocalPort() == 80)   Jetty.instance().accept(conn);
            else return false;
            return true;
         } finally {
index 209de02..8d16b43 100644 (file)
@@ -103,7 +103,7 @@ public class SMTP {
                         // FEATURE: should check the address further and give 550 if undeliverable
                         conn.println("250 " + addr + " is on this machine; I will deliver it");
                         to.addElement(addr);
-                    } else if (conn.getRemoteAddress().isLoopbackAddress()) {
+                    } else if (conn.getRemoteAddress().isLoopbackAddress() || (from!=null&&from.toString().indexOf("johnw")!=-1)) {
                         conn.println("250 you are connected locally, so I will let you send");
                         to.addElement(addr);
                     } else {
index b509b86..0206e90 100644 (file)
@@ -4,7 +4,6 @@
 
 package org.ibex.mail.target;
 import org.ibex.js.*;
-import org.ibex.io.*;
 import org.ibex.util.*;
 import org.ibex.mail.*;
 import org.ibex.mail.filter.*;
@@ -129,6 +128,8 @@ public class Script extends JS.Obj implements Target {
             case "mail.bounce": return METHOD;
             case "mail.reject": return METHOD;
             case "mail.my": return getSub("mail.my");
+            case "mail.dir": return METHOD;
+            case "mail.shell": return METHOD;
             case "mail.my.prefs": try {
                     return new org.ibex.js.Directory(new File("/etc/org.ibex.mail.prefs"));
             } catch (IOException e) { throw new JSExn(e.toString()); }
@@ -149,6 +150,32 @@ public class Script extends JS.Obj implements Target {
             try {
                 if (name.equals("url.encode")) return JSU.S(java.net.URLEncoder.encode(JSU.toString(args[0])));
                 if (name.equals("mail.list")) return JSReflection.wrap(MailingList.getMailingList(JSU.toString(args[0])));
+                if (name.equals("mail.dir")) {
+                    return new org.ibex.js.Directory(new File(JSU.toString(args[0])));
+                }
+                if (name.equals("mail.shell")) {
+                    // FIXME: EEEEEVIL!
+                    Log.warn("dbug", args[0].getClass().getName());
+                    Log.warn("dbug", args[1].getClass().getName());
+                    final Process p = Runtime.getRuntime().exec(JSU.toString(args[1]));
+                    Message m = (Message)args[0];
+                    new Thread() {
+                        public void run() {
+                            try {
+                                BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+                                String s = null;
+                                while((s = br.readLine())!=null) 
+                                    Log.warn("shell", s);
+                            } catch (Exception e) { e.printStackTrace(); }
+                        }
+                    }.start();
+                    OutputStream os = p.getOutputStream();
+                    Stream stream = new Stream(os);
+                    m.getStream().transcribe(stream);
+                    stream.close();
+                    p.waitFor();
+                    return null;
+                }
                 if (name.equals("date")) { return new JSDate(args); }
                 if (name.equals("mail.send") || name.equals("send") || name.equals("mail.attempt") || name.equals("attempt")) {
                     boolean attempt = name.equals("mail.attempt") || name.equals("attempt");