Author: bago
Date: Wed May 10 09:28:20 2006
New Revision: 405790

URL: http://svn.apache.org/viewcvs?rev=405790&view=rev
Log:
Readded "lost" STAT command to the default POP3HandlerChain, Added more error 
handling + logging to the PassCmdHandler (check the user inbox is valid), Fixed 
POP3ServerTest to always provide an inbox to the mock mailserver (fix a 
regression introduced in JAMES-487)

Modified:
    
james/server/trunk/src/java/org/apache/james/pop3server/POP3HandlerChain.java
    james/server/trunk/src/java/org/apache/james/pop3server/PassCmdHandler.java
    james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java

Modified: 
james/server/trunk/src/java/org/apache/james/pop3server/POP3HandlerChain.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/pop3server/POP3HandlerChain.java?rev=405790&r1=405789&r2=405790&view=diff
==============================================================================
--- 
james/server/trunk/src/java/org/apache/james/pop3server/POP3HandlerChain.java 
(original)
+++ 
james/server/trunk/src/java/org/apache/james/pop3server/POP3HandlerChain.java 
Wed May 10 09:28:20 2006
@@ -72,6 +72,7 @@
             cmds.setProperty("NOOP",NoopCmdHandler.class.getName());
             cmds.setProperty("RETR",RetrCmdHandler.class.getName());
             cmds.setProperty("TOP" ,TopCmdHandler.class.getName());
+            cmds.setProperty("STAT",StatCmdHandler.class.getName());
             cmds.setProperty("QUIT",QuitCmdHandler.class.getName());
             Enumeration e = cmds.keys();
             while (e.hasMoreElements()) {

Modified: 
james/server/trunk/src/java/org/apache/james/pop3server/PassCmdHandler.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/pop3server/PassCmdHandler.java?rev=405790&r1=405789&r2=405790&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/pop3server/PassCmdHandler.java 
(original)
+++ james/server/trunk/src/java/org/apache/james/pop3server/PassCmdHandler.java 
Wed May 10 09:28:20 2006
@@ -17,10 +17,13 @@
 
 package org.apache.james.pop3server;
 
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.james.services.MailRepository;
+
 /**
   * Handles PASS command
   */
-public class PassCmdHandler implements CommandHandler {
+public class PassCmdHandler extends AbstractLogEnabled implements 
CommandHandler {
 
     /**
      * @see org.apache.james.pop3server.CommandHandler#onCommand(POP3Session)
@@ -41,16 +44,27 @@
         if (session.getHandlerState() == POP3Handler.AUTHENTICATION_USERSET && 
argument != null) {
             String passArg = argument;
             if 
(session.getConfigurationData().getUsersRepository().test(session.getUser(), 
passArg)) {
-                StringBuffer responseBuffer =
-                    new StringBuffer(64)
-                            .append(POP3Handler.OK_RESPONSE)
-                            .append(" Welcome ")
-                            .append(session.getUser());
-                responseString = responseBuffer.toString();
-                session.setHandlerState(POP3Handler.TRANSACTION);
-                session.writeResponse(responseString);
-                
session.setUserInbox(session.getConfigurationData().getMailServer().getUserInbox(session.getUser()));
-                session.stat();
+                try {
+                    MailRepository inbox = 
session.getConfigurationData().getMailServer().getUserInbox(session.getUser());
+                    if (inbox == null) {
+                        throw new IllegalStateException("MailServer returned a 
null inbox for "+session.getUser());
+                    }
+                    session.setUserInbox(inbox);
+                    session.stat();
+                    StringBuffer responseBuffer =
+                        new StringBuffer(64)
+                                .append(POP3Handler.OK_RESPONSE)
+                                .append(" Welcome ")
+                                .append(session.getUser());
+                    responseString = responseBuffer.toString();
+                    session.setHandlerState(POP3Handler.TRANSACTION);
+                    session.writeResponse(responseString);
+                } catch (RuntimeException e) {
+                    getLogger().error("Unexpected error accessing mailbox for 
"+session.getUser(),e);
+                    responseString = POP3Handler.ERR_RESPONSE + " Unexpected 
error accessing mailbox";
+                    session.setHandlerState(POP3Handler.AUTHENTICATION_READY);
+                    session.writeResponse(responseString);
+                }
             } else {
                 responseString = POP3Handler.ERR_RESPONSE + " Authentication 
failed.";
                 session.setHandlerState(POP3Handler.AUTHENTICATION_READY);

Modified: 
james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java?rev=405790&r1=405789&r2=405790&view=diff
==============================================================================
--- james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java 
(original)
+++ james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java 
Wed May 10 09:28:20 2006
@@ -41,9 +41,9 @@
 import org.columba.ristretto.pop3.POP3Response;
 import org.columba.ristretto.pop3.ScanListEntry;
 
+import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 import javax.mail.util.SharedByteArrayInputStream;
-import javax.mail.MessagingException;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -152,12 +152,15 @@
         pop3Protocol.openPort();
 
         m_usersRepository.addUser("foo", "bar");
+        m_mailServer.setUserInbox("foo", new MockMailRepository());
 
         int res = 0;
+        
         try {
             pop3Protocol.userPass("foo", "bar".toCharArray());
         } catch (POP3Exception e) {
             res = e.getResponse().getType();
+            fail("pass failed");
         }
 
         assertEquals(0, res);
@@ -186,6 +189,7 @@
 
         String pass = "bar" + (new String(new char[] { 200, 210 })) + "foo";
         m_usersRepository.addUser("foo", pass);
+        m_mailServer.setUserInbox("foo", new MockMailRepository());
 
         int res = 0;
         try {
@@ -281,6 +285,16 @@
 
         res = 0;
         entries = null;
+        
+        try {
+            int[] stats = pop3Protocol.stat();
+            assertEquals(2, stats.length);
+            assertEquals(1, stats[0]);
+            assertEquals(92, stats[1]);
+        } catch (POP3Exception e) {
+            fail("stat failed");
+        }
+        
         try {
             entries = pop3Protocol.list();
         } catch (POP3Exception e) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to