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