You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/02/23 21:27:49 UTC

svn commit: r915502 - in /james/server/trunk: core-library/src/main/java/org/apache/james/ mailets/src/main/java/org/apache/james/transport/mailets/ spoolmanager/src/main/java/org/apache/james/ spoolmanager/src/main/java/org/apache/james/transport/mail...

Author: norman
Date: Tue Feb 23 20:27:49 2010
New Revision: 915502

URL: http://svn.apache.org/viewvc?rev=915502&view=rev
Log:
Fix NPE in DNSBounce. (JAMES-975)
Also make sure we inject services to other mailets and not use the mailetContext to lookup stuff

Modified:
    james/server/trunk/core-library/src/main/java/org/apache/james/Constants.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRedirect.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
    james/server/trunk/spoolmanager/src/main/java/org/apache/james/JamesMailetContext.java
    james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTableMailet.java

Modified: james/server/trunk/core-library/src/main/java/org/apache/james/Constants.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/Constants.java?rev=915502&r1=915501&r2=915502&view=diff
==============================================================================
--- james/server/trunk/core-library/src/main/java/org/apache/james/Constants.java (original)
+++ james/server/trunk/core-library/src/main/java/org/apache/james/Constants.java Tue Feb 23 20:27:49 2010
@@ -40,26 +40,4 @@
      */
     public static final String SOFTWARE_NAME = "@@NAME@@";
 
-    /**
-     * Context key used to store the default domain name
-     * serviced by this James instance in the context.
-     */
-    public static final String DEFAULT_DOMAIN = "DEFAULT_DOMAIN";
-
-    /**
-     * Context key used to store the Mailet/SMTP "hello name" for this
-     * James instance in the context.
-     */
-    public static final String HELLO_NAME = "HELLO_NAME";
-
-    /**
-     * Key used to store the hostaddress of the localhost
-     */
-    public static final String HOSTADDRESS = "LOCAL_HOSTADDRESS";
-    
-    /**
-     * Key used to store the hostname of localhost
-     */
-    public static final String HOSTNAME = "LOCAL_HOSTNAME";
-
 }

Modified: james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRedirect.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRedirect.java?rev=915502&r1=915501&r2=915502&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRedirect.java (original)
+++ james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRedirect.java Tue Feb 23 20:27:49 2010
@@ -23,6 +23,7 @@
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.net.UnknownHostException;
 
 import java.util.Collection;
 import java.util.Date;
@@ -33,6 +34,7 @@
 import java.util.ArrayList;
 
 
+import javax.annotation.Resource;
 import javax.mail.Message;
 import javax.mail.MessagingException;
 import javax.mail.internet.ParseException;
@@ -44,9 +46,10 @@
 
 import org.apache.mailet.base.RFC2822Headers;
 import org.apache.mailet.base.RFC822DateFormat;
-import org.apache.james.Constants;
+import org.apache.james.api.dnsservice.DNSService;
 import org.apache.james.core.MailImpl;
 import org.apache.james.core.MimeMessageUtil;
+import org.apache.james.services.MailServer;
 
 import org.apache.mailet.base.GenericMailet;
 import org.apache.mailet.Mail;
@@ -135,6 +138,7 @@
 
 public abstract class AbstractRedirect extends GenericMailet {
     
+    
     /**
      * Gets the expected init parameters.
      *
@@ -230,6 +234,23 @@
 
     private RFC822DateFormat rfc822DateFormat = new RFC822DateFormat();
 
+    protected MailServer mailServer;
+
+    protected DNSService dns;
+
+    
+    @Resource(name="James")
+    public void setMailServer(MailServer mailServer) {
+        this.mailServer = mailServer;
+    }
+    
+
+    @Resource(name="dnsserver")
+    public void setDNSService(DNSService dns) {
+        this.dns = dns;
+    }
+
+    
     /* ******************************************************************** */
     /* ****************** Begin of getX and setX methods ****************** */
     /* ******************************************************************** */
@@ -983,8 +1004,17 @@
             // We don't need to use the original Remote Address and Host,
             // and doing so would likely cause a loop with spam detecting
             // matchers.
-            newMail.setRemoteAddr(getMailetContext().getAttribute(Constants.HOSTADDRESS).toString());
-            newMail.setRemoteHost(getMailetContext().getAttribute(Constants.HOSTNAME).toString());
+            try {
+                newMail.setRemoteAddr(dns.getLocalHost().getHostAddress());
+            } catch (UnknownHostException e) {
+                newMail.setRemoteAddr("127.0.0.1");
+
+            }
+            try {
+                newMail.setRemoteHost(dns.getLocalHost().getHostName());
+            } catch (UnknownHostException e) {
+                newMail.setRemoteHost("localhost");
+            }
             
             if (isDebug) {
                 log("New mail - sender: " + newMail.getSender()

Modified: james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java?rev=915502&r1=915501&r2=915502&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java (original)
+++ james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java Tue Feb 23 20:27:49 2010
@@ -21,17 +21,7 @@
 
 package org.apache.james.transport.mailets;
 
-import org.apache.james.Constants;
-import org.apache.james.core.MailImpl;
-import org.apache.james.impl.vut.VirtualUserTableUtil;
-import org.apache.mailet.base.GenericMailet;
-import org.apache.mailet.Mail;
-import org.apache.mailet.MailAddress;
-import org.apache.oro.text.regex.MalformedPatternException;
-
-import javax.mail.MessagingException;
-import javax.mail.internet.ParseException;
-
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -40,6 +30,19 @@
 import java.util.Map;
 import java.util.StringTokenizer;
 
+import javax.annotation.Resource;
+import javax.mail.MessagingException;
+import javax.mail.internet.ParseException;
+
+import org.apache.james.api.dnsservice.DNSService;
+import org.apache.james.core.MailImpl;
+import org.apache.james.impl.vut.VirtualUserTableUtil;
+import org.apache.james.services.MailServer;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+import org.apache.mailet.base.GenericMailet;
+import org.apache.oro.text.regex.MalformedPatternException;
+
 /**
  * Provides an abstraction of common functionality needed for implementing
  * a Virtual User Table. Override the <code>mapRecipients</code> method to
@@ -48,7 +51,19 @@
 public abstract class AbstractVirtualUserTable extends GenericMailet
 {
     static private final String MARKER = "org.apache.james.transport.mailets.AbstractVirtualUserTable.mapped";
+    private MailServer mailServer;
+    private DNSService dns;
 
+    @Resource(name="James")
+    public void setMailServer(MailServer mailServer) {
+        this.mailServer = mailServer;
+    }
+    
+    @Resource(name="dnsserver")
+    public void setDNSService(DNSService dns) {
+        this.dns = dns;
+    }
+    
     /**
      * Checks the recipient list of the email for user mappings.  Maps recipients as
      * appropriate, modifying the recipient list of the mail and sends mail to any new
@@ -107,7 +122,7 @@
                         }
 
                         try {
-                            MailAddress target = (targetAddress.indexOf('@') < 0) ? new MailAddress(targetAddress, (String) getMailetContext().getAttribute(Constants.DEFAULT_DOMAIN))
+                            MailAddress target = (targetAddress.indexOf('@') < 0) ? new MailAddress(targetAddress, mailServer.getDefaultDomain())
                                 : new MailAddress(targetAddress);
 
                             //Mark this source address as an address to remove from the recipient list
@@ -165,8 +180,16 @@
             // duplicates the Mail object, to be able to modify the new mail keeping the original untouched
             MailImpl newMail = new MailImpl(mail);
             try {
-            newMail.setRemoteAddr(getMailetContext().getAttribute(Constants.HOSTADDRESS).toString());
-                newMail.setRemoteHost(getMailetContext().getAttribute(Constants.HOSTNAME).toString());
+                try {
+                    newMail.setRemoteAddr(dns.getLocalHost().getHostAddress());
+                } catch (UnknownHostException e) {
+                    newMail.setRemoteAddr("127.0.0.1");
+                }
+                try {
+                    newMail.setRemoteHost(dns.getLocalHost().getHostName());
+                } catch (UnknownHostException e) {
+                    newMail.setRemoteHost("localhost");
+                }
                 
                 newMail.setRecipients(recipientsToAddForward);
                 newMail.setAttribute(MARKER, Boolean.TRUE);

Modified: james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java?rev=915502&r1=915501&r2=915502&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java (original)
+++ james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java Tue Feb 23 20:27:49 2010
@@ -21,38 +21,37 @@
 
 package org.apache.james.transport.mailets;
 
-import org.apache.james.Constants;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.ConnectException;
+import java.net.InetAddress;
+import java.net.SocketException;
+import java.net.UnknownHostException;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import javax.mail.MessagingException;
+import javax.mail.SendFailedException;
+import javax.mail.Session;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+
 import org.apache.james.core.MailImpl;
 import org.apache.james.protocols.smtp.dsn.DSNStatus;
-import org.apache.mailet.base.mail.MimeMultipartReport;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
 import org.apache.mailet.base.RFC2822Headers;
 import org.apache.mailet.base.RFC822DateFormat;
+import org.apache.mailet.base.mail.MimeMultipartReport;
 import org.apache.oro.text.regex.MalformedPatternException;
 import org.apache.oro.text.regex.MatchResult;
 import org.apache.oro.text.regex.Pattern;
 import org.apache.oro.text.regex.Perl5Compiler;
 import org.apache.oro.text.regex.Perl5Matcher;
 
-import javax.mail.MessagingException;
-import javax.mail.SendFailedException;
-import javax.mail.Session;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.ConnectException;
-import java.net.InetAddress;
-import java.net.SocketException;
-import java.net.UnknownHostException;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-
 
 
 
@@ -90,7 +89,7 @@
 
 public class DSNBounce extends AbstractNotify {
 
-
+    
     private static final RFC822DateFormat rfc822DateFormat = new RFC822DateFormat();
 
     // regexp pattern for scaning status code from exception message
@@ -152,8 +151,18 @@
             // We don't need to use the original Remote Address and Host,
             // and doing so would likely cause a loop with spam detecting
             // matchers.
-            newMail.setRemoteAddr(getMailetContext().getAttribute(Constants.HOSTADDRESS).toString());
-            newMail.setRemoteHost(getMailetContext().getAttribute(Constants.HOSTNAME).toString());
+            try {
+                newMail.setRemoteAddr(dns.getLocalHost().getHostName());
+            } catch (UnknownHostException e) {
+                newMail.setRemoteHost("localhost");
+            }
+           
+            try {
+                newMail.setRemoteHost(dns.getLocalHost().getHostAddress());
+            } catch (UnknownHostException e) {
+                newMail.setRemoteAddr("127.0.0.1");
+            }
+
             
             if (originalMail.getSender() == null) {
                 if (isDebug)
@@ -311,8 +320,7 @@
         // failure reports into DSNs
         nameType = "dns";
         try {
-            String myAddress =
-                (String)getMailetContext().getAttribute(Constants.HELLO_NAME);
+            String myAddress = mailServer.getHelloName();
             /*
             String myAddress = InetAddress.getLocalHost().getCanonicalHostName();
             */

Modified: james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java?rev=915502&r1=915501&r2=915502&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java (original)
+++ james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java Tue Feb 23 20:27:49 2010
@@ -22,7 +22,6 @@
 package org.apache.james.transport.mailets;
 
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.james.Constants;
 import org.apache.james.api.dnsservice.DNSService;
 import org.apache.james.api.dnsservice.TemporaryResolutionException;
 import org.apache.james.lifecycle.LifecycleUtil;
@@ -1482,7 +1481,7 @@
         PrintWriter out = new PrintWriter(sout, true);
         String machine = "[unknown]";
         try {
-            machine = getMailetContext().getAttribute(Constants.HOSTNAME).toString();
+            machine = dnsServer.getLocalHost().getHostName();
             
         } catch(Exception e){
             machine = "[address unknown]";

Modified: james/server/trunk/spoolmanager/src/main/java/org/apache/james/JamesMailetContext.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager/src/main/java/org/apache/james/JamesMailetContext.java?rev=915502&r1=915501&r2=915502&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/src/main/java/org/apache/james/JamesMailetContext.java (original)
+++ james/server/trunk/spoolmanager/src/main/java/org/apache/james/JamesMailetContext.java Tue Feb 23 20:27:49 2010
@@ -107,9 +107,6 @@
     @PostConstruct
     public void init() throws Exception {
 
-        // used by RemoteDelivery for HELO
-        attributes.put(Constants.DEFAULT_DOMAIN, mailServer.getDefaultDomain());
-
         initializeLocalDeliveryMailet();
 
         initPostmaster();

Modified: james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTableMailet.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTableMailet.java?rev=915502&r1=915501&r2=915502&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTableMailet.java (original)
+++ james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTableMailet.java Tue Feb 23 20:27:49 2010
@@ -25,10 +25,11 @@
 import java.util.LinkedList;
 import java.util.Vector;
 
+import javax.annotation.Resource;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
-import org.apache.james.Constants;
+import org.apache.james.services.MailServer;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
 import org.apache.mailet.base.GenericMailet;
@@ -42,6 +43,13 @@
  */
 public abstract class AbstractVirtualUserTableMailet extends GenericMailet {
     
+    private MailServer mailServer;
+
+    @Resource(name="James")
+    public void setMailServer(MailServer mailServer) {
+        this.mailServer = mailServer;
+    }
+    
     /*
      * (non-Javadoc)
      * @see org.apache.mailet.base.GenericMailet#service(org.apache.mailet.Mail)
@@ -128,7 +136,7 @@
 
             if (rcpt.indexOf("@") < 0) {
                 // the mapping contains no domain name, use the default domain
-                rcpt = rcpt + "@" + getMailetContext().getAttribute(Constants.DEFAULT_DOMAIN);
+                rcpt = rcpt + "@" + mailServer.getDefaultDomain();
             }
 
             MailAddress nextMap = new MailAddress(rcpt);



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org