This is an automated email from the ASF dual-hosted git repository.

elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-ftpserver.git


The following commit(s) were added to refs/heads/master by this push:
     new e6de8b61 Applied patch from Mike Rocke with an update to MINA 2.2.4
e6de8b61 is described below

commit e6de8b615c190ed81114ec6a0ac09178ef6efe2b
Author: emmanuel lecharny <elecha...@apache.org>
AuthorDate: Thu Dec 26 02:18:15 2024 +0100

    Applied patch from Mike Rocke with an update to MINA 2.2.4
---
 .../org/apache/ftpserver/command/impl/AUTH.java    | 23 ++++++++++++++++------
 .../org/apache/ftpserver/impl/FtpIoSession.java    |  8 +++++++-
 pom.xml                                            |  2 +-
 3 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/core/src/main/java/org/apache/ftpserver/command/impl/AUTH.java 
b/core/src/main/java/org/apache/ftpserver/command/impl/AUTH.java
index 3e7fa1af..21acc82e 100644
--- a/core/src/main/java/org/apache/ftpserver/command/impl/AUTH.java
+++ b/core/src/main/java/org/apache/ftpserver/command/impl/AUTH.java
@@ -33,6 +33,8 @@ import org.apache.ftpserver.impl.FtpServerContext;
 import org.apache.ftpserver.impl.LocalizedFtpReply;
 import org.apache.ftpserver.ssl.ClientAuth;
 import org.apache.ftpserver.ssl.SslConfiguration;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.core.write.WriteRequest;
 import org.apache.mina.filter.ssl.SslFilter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -103,8 +105,10 @@ public class AUTH extends AbstractCommand {
         }
 
         try {
-        secureSession(session, authType);
-        session.write(LocalizedFtpReply.translate(session, request, context, 
234, "AUTH." + authType, null));
+                LocalizedFtpReply reply = LocalizedFtpReply.translate(session, 
request, context, 234, "AUTH." + authType, null);
+                secureSession(session, authType, reply);
+
+                session.write(reply);
         } catch (FtpException ex) {
         throw ex;
         } catch (Exception ex) {
@@ -117,14 +121,21 @@ public class AUTH extends AbstractCommand {
     }
     }
 
-    private void secureSession(final FtpIoSession session, final String type)
+    private void secureSession(final FtpIoSession session, final String type, 
LocalizedFtpReply reply)
         throws GeneralSecurityException, FtpException {
         SslConfiguration ssl = session.getListener().getSslConfiguration();
     
         if (ssl != null) {
-            session.setAttribute(SslFilter.DISABLE_ENCRYPTION_ONCE);
-    
-            SslFilter sslFilter = new SslFilter(ssl.getSSLContext());
+            SslFilter sslFilter = new SslFilter(ssl.getSSLContext()) {
+                @Override
+                public void filterWrite(NextFilter next, IoSession session, 
WriteRequest request) throws Exception {
+                    if (request.getOriginalMessage() == reply) {
+                       next.filterWrite(session, request);
+                    } else {
+                        super.filterWrite(next, session, request);
+                    }
+                }
+            };
             if (ssl.getClientAuth() == ClientAuth.NEED) {
             sslFilter.setNeedClientAuth(true);
             } else if (ssl.getClientAuth() == ClientAuth.WANT) {
diff --git a/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java 
b/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java
index c09bf576..7fa6bf81 100644
--- a/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java
+++ b/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java
@@ -40,6 +40,7 @@ import org.apache.mina.core.filterchain.IoFilterChain;
 import org.apache.mina.core.future.CloseFuture;
 import org.apache.mina.core.future.ReadFuture;
 import org.apache.mina.core.future.WriteFuture;
+import org.apache.mina.core.service.IoAcceptor;
 import org.apache.mina.core.service.IoHandler;
 import org.apache.mina.core.service.IoService;
 import org.apache.mina.core.service.TransportMetadata;
@@ -729,7 +730,7 @@ public class FtpIoSession implements IoSession {
             SslFilter sslFilter = (SslFilter) getFilterChain().get(
                     SslFilter.class);
 
-            SSLSession sslSession = sslFilter.getSslSession(this);
+            SSLSession sslSession = 
SSLSession.class.cast(getAttribute(SslFilter.SSL_SECURED));
 
             if (sslSession != null) {
                 try {
@@ -865,4 +866,9 @@ public class FtpIoSession implements IoSession {
     public boolean isSecured() {
         return getFilterChain().contains(SslFilter.class);
     }
+
+    @Override
+    public boolean isServer() {
+        return (getService() instanceof IoAcceptor);
+    }
 }
diff --git a/pom.xml b/pom.xml
index 3fb11a15..66958591 100644
--- a/pom.xml
+++ b/pom.xml
@@ -166,7 +166,7 @@
     <jcl.over.slf4j.version>1.7.36</jcl.over.slf4j.version>
     <junit.version>4.13.2</junit.version>
     <log4j.version>2.20.0</log4j.version>
-    <mina.core.version>2.1.6</mina.core.version>
+    <mina.core.version>2.2.4</mina.core.version>
     <slf4j.api.version>1.7.36</slf4j.api.version>
     <slf4j.log4j12.version>1.7.36</slf4j.log4j12.version>
     <spring.context.version>2.5.5</spring.context.version>

Reply via email to