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 2006/10/13 08:20:47 UTC

svn commit: r463571 - in /james/server/trunk/src: conf/ java/org/apache/james/smtpserver/ java/org/apache/james/smtpserver/core/filter/ test/org/apache/james/smtpserver/

Author: norman
Date: Thu Oct 12 23:20:46 2006
New Revision: 463571

URL: http://svn.apache.org/viewvc?view=rev&rev=463571
Log:
Allow disabling if bracketsEnforcement. See JAMES-642

Modified:
    james/server/trunk/src/conf/james-config.xml
    james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandlerConfigurationData.java
    james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.java
    james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/MailFilterCmdHandler.java
    james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/RcptFilterCmdHandler.java
    james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java
    james/server/trunk/src/test/org/apache/james/smtpserver/SMTPTestConfiguration.java
    james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java

Modified: james/server/trunk/src/conf/james-config.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/src/conf/james-config.xml?view=diff&rev=463571&r1=463570&r2=463571
==============================================================================
--- james/server/trunk/src/conf/james-config.xml (original)
+++ james/server/trunk/src/conf/james-config.xml Thu Oct 12 23:20:46 2006
@@ -918,6 +918,11 @@
          <heloEhloEnforcement>true</heloEhloEnforcement>
          -->
          
+         <!-- WARNING: This is Non-RFC compliant (default value: true) -->
+         <!-- See: http://wiki.apache.org/james/StandardsComplianceStatement -->
+         <!-- TODO: CHANGE TO OFFICIAL URL LATER -->
+         <addressBracketsEnforcement>true</addressBracketsEnforcement>
+         
          <!-- This sets the SMTPGreeting which will be used when connect to the smtpserver -->
          <!-- If none is specified a default is generated -->
          <!--

Modified: james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandlerConfigurationData.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandlerConfigurationData.java?view=diff&rev=463571&r1=463570&r2=463571
==============================================================================
--- james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandlerConfigurationData.java (original)
+++ james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandlerConfigurationData.java Thu Oct 12 23:20:46 2006
@@ -113,5 +113,12 @@
      * @return the local users repository
      */
     UsersRepository getUsersRepository();
+    
+    /**
+     * Return wheter the mailserver will accept addresses without brackets enclosed.
+     * 
+     * @return true or false
+     */
+    boolean useAddressBracketsEnforcement();
 
 }

Modified: james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.java?view=diff&rev=463571&r1=463570&r2=463571
==============================================================================
--- james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.java (original)
+++ james/server/trunk/src/java/org/apache/james/smtpserver/SMTPServer.java Thu Oct 12 23:20:46 2006
@@ -129,6 +129,7 @@
 
     private ServiceManager serviceManager;
 
+    private boolean addressBracketsEnforcement = true;
 
     /**
      * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
@@ -221,6 +222,8 @@
             
             // get the smtpGreeting
             smtpGreeting = handlerConfiguration.getChild("smtpGreeting").getValue(null);
+            
+            addressBracketsEnforcement = handlerConfiguration.getChild("addressBracketsEnforcement").getValueAsBoolean(true);
 
             //set the logger
             ContainerUtil.enableLogging(handlerChain,getLogger());
@@ -376,6 +379,14 @@
         public String getSMTPGreeting() {
             return SMTPServer.this.smtpGreeting;
         }
+
+        /**
+         * @see org.apache.james.smtpserver.SMTPHandlerConfigurationData#useAddressBracketsEnforcement()
+         */
+    public boolean useAddressBracketsEnforcement() {
+        // TODO Auto-generated method stub
+        return SMTPServer.this.addressBracketsEnforcement;
+    }
         
         //TODO: IF we create here an interface to get DNSServer
         //      we should access it from the SMTPHandlers

Modified: james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/MailFilterCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/MailFilterCmdHandler.java?view=diff&rev=463571&r1=463570&r2=463571
==============================================================================
--- james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/MailFilterCmdHandler.java (original)
+++ james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/MailFilterCmdHandler.java Thu Oct 12 23:20:46 2006
@@ -131,7 +131,7 @@
                     }
                 }
             }
-            if (!sender.startsWith("<") || !sender.endsWith(">")) {
+            if ( session.getConfigurationData().useAddressBracketsEnforcement() && (!sender.startsWith("<") || !sender.endsWith(">"))) {
                 responseString = "501 "+DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.ADDRESS_SYNTAX_SENDER)+" Syntax error in MAIL command";
                 session.writeResponse(responseString);
                 if (getLogger().isErrorEnabled()) {
@@ -148,8 +148,12 @@
                 return;
             }
             MailAddress senderAddress = null;
-            //Remove < and >
-            sender = sender.substring(1, sender.length() - 1);
+            
+            if (session.getConfigurationData().useAddressBracketsEnforcement() || (sender.startsWith("<") && sender.endsWith(">"))) {
+                //Remove < and >
+                sender = sender.substring(1, sender.length() - 1);
+            }
+            
             if (sender.length() == 0) {
                 //This is the <> case.  Let senderAddress == null
             } else {

Modified: james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/RcptFilterCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/RcptFilterCmdHandler.java?view=diff&rev=463571&r1=463570&r2=463571
==============================================================================
--- james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/RcptFilterCmdHandler.java (original)
+++ james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/RcptFilterCmdHandler.java Thu Oct 12 23:20:46 2006
@@ -94,7 +94,7 @@
                 // Remove the options from the recipient
                 recipient = recipient.substring(0, lastChar + 1);
             }
-            if (!recipient.startsWith("<") || !recipient.endsWith(">")) {
+            if (session.getConfigurationData().useAddressBracketsEnforcement() && (!recipient.startsWith("<") || !recipient.endsWith(">"))) {
                 responseString = "501 "+DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_SYNTAX)+" Syntax error in parameters or arguments";
                 session.writeResponse(responseString);
                 if (getLogger().isErrorEnabled()) {
@@ -113,7 +113,10 @@
             }
             MailAddress recipientAddress = null;
             //Remove < and >
-            recipient = recipient.substring(1, recipient.length() - 1);
+            if (session.getConfigurationData().useAddressBracketsEnforcement() || (recipient.startsWith("<") && recipient.endsWith(">"))) {
+                recipient = recipient.substring(1, recipient.length() - 1);
+            }
+            
             if (recipient.indexOf("@") < 0) {
                 recipient = recipient + "@localhost";
             }

Modified: james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java?view=diff&rev=463571&r1=463570&r2=463571
==============================================================================
--- james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java Thu Oct 12 23:20:46 2006
@@ -1399,4 +1399,54 @@
         assertNull("mail reject by mail server", m_mailServer
                 .getLastMail());
     }
+    
+    
+    public void testAddressBracketsEnforcementDisabled() throws Exception {
+        m_testConfiguration.setAddressBracketsEnforcement(false);
+        finishSetUp(m_testConfiguration);
+        SMTPClient smtpProtocol = new SMTPClient();
+        smtpProtocol.connect("127.0.0.1", m_smtpListenerPort);
+
+        smtpProtocol.sendCommand("ehlo", InetAddress.getLocalHost().toString());
+        
+        smtpProtocol.sendCommand("mail from:", "test@localhost");
+        assertEquals("accept", 250,smtpProtocol.getReplyCode());
+        
+        smtpProtocol.sendCommand("rcpt to:", "mail@sample.com");
+        assertEquals("accept", 250,smtpProtocol.getReplyCode());
+
+        smtpProtocol.quit();
+        
+        smtpProtocol.connect("127.0.0.1", m_smtpListenerPort);
+
+        smtpProtocol.sendCommand("ehlo", InetAddress.getLocalHost().toString());
+        
+        smtpProtocol.sendCommand("mail from:", "<te...@localhost>");
+        assertEquals("accept", 250,smtpProtocol.getReplyCode());
+        
+        smtpProtocol.sendCommand("rcpt to:", "<ma...@sample.com>");
+        assertEquals("accept", 250,smtpProtocol.getReplyCode());
+
+        smtpProtocol.quit();
+    }
+    
+    public void testAddressBracketsEnforcementEnabled() throws Exception {
+        finishSetUp(m_testConfiguration);
+        SMTPClient smtpProtocol = new SMTPClient();
+        smtpProtocol.connect("127.0.0.1", m_smtpListenerPort);
+
+        smtpProtocol.sendCommand("ehlo", InetAddress.getLocalHost().toString());
+        
+        smtpProtocol.sendCommand("mail from:", "test@localhost");
+        assertEquals("reject", 501,smtpProtocol.getReplyCode());
+        smtpProtocol.sendCommand("mail from:", "<te...@localhost>");
+        assertEquals("accept", 250,smtpProtocol.getReplyCode());
+        
+        smtpProtocol.sendCommand("rcpt to:", "mail@sample.com");
+        assertEquals("reject", 501,smtpProtocol.getReplyCode());
+        smtpProtocol.sendCommand("rcpt to:", "<ma...@sample.com>");
+        assertEquals("accept", 250,smtpProtocol.getReplyCode());
+
+        smtpProtocol.quit();
+    }
 }

Modified: james/server/trunk/src/test/org/apache/james/smtpserver/SMTPTestConfiguration.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/smtpserver/SMTPTestConfiguration.java?view=diff&rev=463571&r1=463570&r2=463571
==============================================================================
--- james/server/trunk/src/test/org/apache/james/smtpserver/SMTPTestConfiguration.java (original)
+++ james/server/trunk/src/test/org/apache/james/smtpserver/SMTPTestConfiguration.java Thu Oct 12 23:20:46 2006
@@ -50,6 +50,7 @@
     private boolean m_reverseEqualsEhlo = false;
     private int m_maxRcpt = 0;
     private boolean m_useRBL = false;
+    private boolean m_addressBracketsEnforcement = true;
 
     
     public SMTPTestConfiguration(int smtpListenerPort) {
@@ -134,6 +135,10 @@
     public void useRBL(boolean useRBL) {
         m_useRBL = useRBL; 
     }
+    
+    public void setAddressBracketsEnforcement(boolean addressBracketsEnforcement) {
+        this.m_addressBracketsEnforcement = addressBracketsEnforcement;
+    }
 
     public void init() throws ConfigurationException {
 
@@ -149,6 +154,7 @@
         handlerConfig.addChild(Util.getValuedConfiguration("maxmessagesize", "" + m_maxMessageSizeKB));
         handlerConfig.addChild(Util.getValuedConfiguration("authRequired", m_authorizingMode));
         handlerConfig.addChild(Util.getValuedConfiguration("heloEhloEnforcement", m_heloEhloEnforcement+""));
+        handlerConfig.addChild(Util.getValuedConfiguration("addressBracketsEnforcement", m_addressBracketsEnforcement+""));
         if (m_verifyIdentity) handlerConfig.addChild(Util.getValuedConfiguration("verifyIdentity", "" + m_verifyIdentity));
  
         DefaultConfiguration config = new DefaultConfiguration("handlerchain");

Modified: james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java?view=diff&rev=463571&r1=463570&r2=463571
==============================================================================
--- james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/smtpserver/ValidRcptHandlerTest.java Thu Oct 12 23:20:46 2006
@@ -140,6 +140,10 @@
             public boolean useHeloEhloEnforcement() {
                 throw new UnsupportedOperationException("Unimplemented Stub Method");
             }
+
+            public boolean useAddressBracketsEnforcement() {
+                return  true;
+            }
         
         };
     



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