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>