Author: ngn
Date: Wed Mar 12 01:46:53 2008
New Revision: 636253

URL: http://svn.apache.org/viewvc?rev=636253&view=rev
Log:
Serializing commands in a session to fix race conditions in command execution
Fixing broken message

Modified:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java
    
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java
    
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
    
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties

Modified: 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java?rev=636253&r1=636252&r2=636253&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java 
(original)
+++ 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java 
Wed Mar 12 01:46:53 2008
@@ -76,7 +76,9 @@
             
             
             if(command != null) {
-                command.execute(ftpSession, context, request);
+               synchronized (session) {
+                       command.execute(ftpSession, context, request);
+                               }
             }
             else {
                 session.write(FtpReplyUtil.translate(ftpSession, request, 
context, FtpReply.REPLY_502_COMMAND_NOT_IMPLEMENTED, "not.implemented", null));

Modified: 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java?rev=636253&r1=636252&r2=636253&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java 
(original)
+++ 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java 
Wed Mar 12 01:46:53 2008
@@ -134,7 +134,7 @@
                 authenticatedUser = userManager.authenticate(auth);
             } catch(AuthenticationFailedException e) { 
                 authenticatedUser = null;
-                LOG.warn("User failed to log in", e);                
+                LOG.warn("User failed to log in");                
             }
             catch(Exception e) {
                 authenticatedUser = null;

Modified: 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java?rev=636253&r1=636252&r2=636253&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
 (original)
+++ 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
 Wed Mar 12 01:46:53 2008
@@ -21,6 +21,9 @@
 
 import java.io.IOException;
 import java.net.InetSocketAddress;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.ftpserver.FtpHandler;
 import org.apache.ftpserver.interfaces.FtpServerContext;
@@ -30,6 +33,7 @@
 import org.apache.ftpserver.ssl.SslConfiguration;
 import org.apache.mina.common.IdleStatus;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.executor.ExecutorFilter;
 import org.apache.mina.filter.logging.LoggingFilter;
 import org.apache.mina.filter.logging.MdcInjectionFilter;
 import org.apache.mina.filter.ssl.SslFilter;
@@ -53,6 +57,8 @@
     
     boolean suspended = false;
 
+    private ExecutorService filterExecutor = Executors.newCachedThreadPool();
+
     /**
      * @see Listener#start(FtpServerContext)
      */
@@ -75,11 +81,12 @@
         MdcInjectionFilter mdcFilter = new MdcInjectionFilter();
         
         acceptor.getFilterChain().addLast("mdcFilter", mdcFilter);
+        acceptor.getFilterChain().addLast("threadPool", new 
ExecutorFilter(filterExecutor));
         acceptor.getFilterChain().addLast(
-                "codec",
-                new ProtocolCodecFilter( new FtpServerProtocolCodecFactory() ) 
);
-        
+                       "codec",
+                       new ProtocolCodecFilter( new 
FtpServerProtocolCodecFactory() ) );
         acceptor.getFilterChain().addLast("logger", new LoggingFilter() );
+        
         acceptor.getFilterChain().addLast("mdcFilter2", mdcFilter);
 
         
@@ -115,6 +122,16 @@
             acceptor.dispose();
             acceptor = null;
         }
+        
+        if(filterExecutor != null) {
+            filterExecutor.shutdown();
+            try {
+                filterExecutor.awaitTermination(5000, TimeUnit.MILLISECONDS);
+            } catch (InterruptedException e) {
+            } finally {
+//              TODO: how to handle?
+            }
+        }
     }
 
     /**
@@ -153,4 +170,22 @@
             acceptor.unbind(address);
         }
     }
+
+    /**
+     * Get the [EMAIL PROTECTED] ExecutorService} used for processing 
requests. The default
+     * value is a cached thread pool.
+     * @return The [EMAIL PROTECTED] ExecutorService}
+     */
+    public ExecutorService getFilterExecutor() {
+        return filterExecutor;
+    }
+
+    /**
+     * Set the [EMAIL PROTECTED] ExecutorService} used for processing requests
+     * @param filterExecutor The [EMAIL PROTECTED] ExecutorService}
+     */
+    public void setFilterExecutor(ExecutorService filterExecutor) {
+        this.filterExecutor = filterExecutor;
+    }
+
 }

Modified: 
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties?rev=636253&r1=636252&r2=636253&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties
 (original)
+++ 
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties
 Wed Mar 12 01:46:53 2008
@@ -267,7 +267,7 @@
 421.USER.anonymous=Maximum anonymous login limit has been reached.
 421.USER.login=Maximum login limit has been reached.
 331.USER.anonymous=Guest login okay, send your complete e-mail address as 
password.
-331.USER=User name okay, need password for {client.login.name}.
+331.USER=User name okay, need password for {output.msg}.
 
 251.MD5={output.msg}
 252.MMD5={output.msg}


Reply via email to