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 <[email protected]>
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>