This is an automated email from the ASF dual-hosted git repository.
elecharny pushed a commit to branch 1.2.X
in repository https://gitbox.apache.org/repos/asf/mina-ftpserver.git
The following commit(s) were added to refs/heads/1.2.X by this push:
new 0ab659cd Removed the '+' in logs; Added some empty lines to clarify
the code; Declared a constant for anonymous
0ab659cd is described below
commit 0ab659cd79027baf17970219af8cf4e9287d650d
Author: emmanuel lecharny <[email protected]>
AuthorDate: Sun Jan 5 07:19:50 2025 +0100
Removed the '+' in logs; Added some empty lines to clarify the code;
Declared a constant for anonymous
---
.../org/apache/ftpserver/command/impl/DELE.java | 2 +-
.../org/apache/ftpserver/command/impl/EPRT.java | 6 ++--
.../org/apache/ftpserver/command/impl/MD5.java | 2 +-
.../org/apache/ftpserver/command/impl/MFMT.java | 2 +-
.../org/apache/ftpserver/command/impl/PASS.java | 3 +-
.../org/apache/ftpserver/command/impl/PORT.java | 2 +-
.../org/apache/ftpserver/command/impl/REST.java | 2 +-
.../org/apache/ftpserver/command/impl/TYPE.java | 2 +-
.../filesystem/nativefs/impl/NativeFtpFile.java | 4 +--
.../apache/ftpserver/impl/DefaultFtpServer.java | 5 ++++
.../ftpserver/impl/DefaultFtpServerContext.java | 34 +++++++++++++++-------
.../apache/ftpserver/impl/FtpServerContext.java | 16 ++++++++++
.../apache/ftpserver/listener/ListenerFactory.java | 30 +++++++++----------
.../apache/ftpserver/listener/nio/NioListener.java | 1 +
.../usermanager/impl/PropertiesUserManager.java | 6 ++--
.../org/apache/ftpserver/ftplet/UserManager.java | 2 ++
16 files changed, 76 insertions(+), 43 deletions(-)
diff --git a/core/src/main/java/org/apache/ftpserver/command/impl/DELE.java
b/core/src/main/java/org/apache/ftpserver/command/impl/DELE.java
index d3d39c40..a4588e11 100644
--- a/core/src/main/java/org/apache/ftpserver/command/impl/DELE.java
+++ b/core/src/main/java/org/apache/ftpserver/command/impl/DELE.java
@@ -74,7 +74,7 @@ public class DELE extends AbstractCommand {
try {
file = session.getFileSystemView().getFile(fileName);
} catch (Exception ex) {
- LOG.debug("Could not get file " + fileName, ex);
+ LOG.debug("Could not get file {}", fileName, ex);
}
if (file == null) {
session.write(LocalizedFileActionFtpReply.translate(session,
request, context,
diff --git a/core/src/main/java/org/apache/ftpserver/command/impl/EPRT.java
b/core/src/main/java/org/apache/ftpserver/command/impl/EPRT.java
index c49cf3a7..60f1adb4 100644
--- a/core/src/main/java/org/apache/ftpserver/command/impl/EPRT.java
+++ b/core/src/main/java/org/apache/ftpserver/command/impl/EPRT.java
@@ -88,7 +88,7 @@ public class EPRT extends AbstractCommand {
host = arg.substring(3, lastDelimIdx);
port = arg.substring(lastDelimIdx + 1, arg.length() - 1);
} catch (Exception ex) {
- LOG.debug("Exception parsing host and port: " + arg, ex);
+ LOG.debug("Exception parsing host and port: {}", arg, ex);
session.write(LocalizedFtpReply.translate(session, request,
context,
FtpReply.REPLY_501_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS, "EPRT", null));
return;
@@ -99,7 +99,7 @@ public class EPRT extends AbstractCommand {
try {
dataAddr = InetAddress.getByName(host);
} catch (UnknownHostException ex) {
- LOG.debug("Unknown host: " + host, ex);
+ LOG.debug("Unknown host: {}", host, ex);
session
.write(LocalizedFtpReply
.translate(
@@ -129,7 +129,7 @@ public class EPRT extends AbstractCommand {
try {
dataPort = Integer.parseInt(port);
} catch (NumberFormatException ex) {
- LOG.debug("Invalid port: " + port, ex);
+ LOG.debug("Invalid port: {}", port, ex);
session
.write(LocalizedFtpReply
.translate(
diff --git a/core/src/main/java/org/apache/ftpserver/command/impl/MD5.java
b/core/src/main/java/org/apache/ftpserver/command/impl/MD5.java
index 87114df6..e775e5ad 100644
--- a/core/src/main/java/org/apache/ftpserver/command/impl/MD5.java
+++ b/core/src/main/java/org/apache/ftpserver/command/impl/MD5.java
@@ -102,7 +102,7 @@ public class MD5 extends AbstractCommand {
try {
file = session.getFileSystemView().getFile(fileName);
} catch (Exception ex) {
- LOG.debug("Exception getting the file object: " + fileName,
ex);
+ LOG.debug("Exception getting the file object: {}", fileName,
ex);
}
if (file == null) {
diff --git a/core/src/main/java/org/apache/ftpserver/command/impl/MFMT.java
b/core/src/main/java/org/apache/ftpserver/command/impl/MFMT.java
index 4fac83ad..d90c7a9e 100644
--- a/core/src/main/java/org/apache/ftpserver/command/impl/MFMT.java
+++ b/core/src/main/java/org/apache/ftpserver/command/impl/MFMT.java
@@ -101,7 +101,7 @@ public class MFMT extends AbstractCommand {
try {
file = session.getFileSystemView().getFile(fileName);
} catch (Exception ex) {
- LOG.debug("Exception getting the file object: " + fileName,
ex);
+ LOG.debug("Exception getting the file object: {}", fileName,
ex);
}
if (file == null || !file.doesExist()) {
diff --git a/core/src/main/java/org/apache/ftpserver/command/impl/PASS.java
b/core/src/main/java/org/apache/ftpserver/command/impl/PASS.java
index 8851537c..a2ca32fd 100644
--- a/core/src/main/java/org/apache/ftpserver/command/impl/PASS.java
+++ b/core/src/main/java/org/apache/ftpserver/command/impl/PASS.java
@@ -258,8 +258,7 @@ public class PASS extends AbstractCommand {
private void delayAfterLoginFailure(final int loginFailureDelay) {
if (loginFailureDelay > 0) {
- LOG.debug("Waiting for " + loginFailureDelay
- + " milliseconds due to login failure");
+ LOG.debug("Waiting for {} milliseconds due to login failure",
loginFailureDelay);
try {
Thread.sleep(loginFailureDelay);
diff --git a/core/src/main/java/org/apache/ftpserver/command/impl/PORT.java
b/core/src/main/java/org/apache/ftpserver/command/impl/PORT.java
index 4818ded8..fb05c1be 100644
--- a/core/src/main/java/org/apache/ftpserver/command/impl/PORT.java
+++ b/core/src/main/java/org/apache/ftpserver/command/impl/PORT.java
@@ -103,7 +103,7 @@ public class PORT extends AbstractCommand {
FtpReply.REPLY_501_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS, "PORT", null));
return;
} catch (IllegalPortException e) {
- LOG.debug("Invalid data port: " + request.getArgument(), e);
+ LOG.debug("Invalid data port: {}", request.getArgument(), e);
session
.write(LocalizedFtpReply
.translate(
diff --git a/core/src/main/java/org/apache/ftpserver/command/impl/REST.java
b/core/src/main/java/org/apache/ftpserver/command/impl/REST.java
index c82ac9bc..fd458490 100644
--- a/core/src/main/java/org/apache/ftpserver/command/impl/REST.java
+++ b/core/src/main/java/org/apache/ftpserver/command/impl/REST.java
@@ -93,7 +93,7 @@ public class REST extends AbstractCommand {
"REST", null));
}
} catch (NumberFormatException ex) {
- LOG.debug("Invalid restart position: " + argument, ex);
+ LOG.debug("Invalid restart position: {}", argument, ex);
session.write(LocalizedFtpReply.translate(session, request,
context,
FtpReply.REPLY_501_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS,
"REST.invalid", null));
diff --git a/core/src/main/java/org/apache/ftpserver/command/impl/TYPE.java
b/core/src/main/java/org/apache/ftpserver/command/impl/TYPE.java
index 8513ae39..f5b936d5 100644
--- a/core/src/main/java/org/apache/ftpserver/command/impl/TYPE.java
+++ b/core/src/main/java/org/apache/ftpserver/command/impl/TYPE.java
@@ -79,7 +79,7 @@ public class TYPE extends AbstractCommand {
session.write(LocalizedFtpReply.translate(session, request,
context,
FtpReply.REPLY_200_COMMAND_OKAY, "TYPE", null));
} catch (IllegalArgumentException e) {
- LOG.debug("Illegal type argument: " + request.getArgument(), e);
+ LOG.debug("Illegal type argument: {}", request.getArgument(), e);
session
.write(LocalizedFtpReply
.translate(
diff --git
a/core/src/main/java/org/apache/ftpserver/filesystem/nativefs/impl/NativeFtpFile.java
b/core/src/main/java/org/apache/ftpserver/filesystem/nativefs/impl/NativeFtpFile.java
index 9ef41c7d..2237ab52 100644
---
a/core/src/main/java/org/apache/ftpserver/filesystem/nativefs/impl/NativeFtpFile.java
+++
b/core/src/main/java/org/apache/ftpserver/filesystem/nativefs/impl/NativeFtpFile.java
@@ -203,7 +203,7 @@ public class NativeFtpFile implements FtpFile {
* {@inheritDoc}
*/
public boolean isWritable() {
- LOG.debug("Checking authorization for " + getAbsolutePath());
+ LOG.debug("Checking authorization for {}", getAbsolutePath());
if (user.authorize(new WriteRequest(getAbsolutePath())) == null) {
LOG.debug("Not authorized");
return false;
@@ -211,7 +211,7 @@ public class NativeFtpFile implements FtpFile {
LOG.debug("Checking if file exists");
if (file.exists()) {
- LOG.debug("Checking can write: " + file.canWrite());
+ LOG.debug("Checking can write: {}", file.canWrite());
return file.canWrite();
}
diff --git a/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java
b/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java
index da7ba2da..0bbb6b55 100644
--- a/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java
+++ b/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java
@@ -117,6 +117,7 @@ public class DefaultFtpServer implements FtpServer {
// stop all listeners
Map<String, Listener> listeners = serverContext.getListeners();
+
for (Listener listener : listeners.values()) {
listener.stop();
}
@@ -151,8 +152,10 @@ public class DefaultFtpServer implements FtpServer {
}
LOG.debug("Suspending server");
+
// stop all listeners
Map<String, Listener> listeners = serverContext.getListeners();
+
for (Listener listener : listeners.values()) {
listener.suspend();
}
@@ -170,7 +173,9 @@ public class DefaultFtpServer implements FtpServer {
}
LOG.debug("Resuming server");
+
Map<String, Listener> listeners = serverContext.getListeners();
+
for (Listener listener : listeners.values()) {
listener.resume();
}
diff --git
a/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServerContext.java
b/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServerContext.java
index e75cb96f..38326c6c 100644
--- a/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServerContext.java
+++ b/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServerContext.java
@@ -59,9 +59,8 @@ import org.slf4j.LoggerFactory;
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public class DefaultFtpServerContext implements FtpServerContext {
-
- private final Logger LOG = LoggerFactory
- .getLogger(DefaultFtpServerContext.class);
+ /** Defines the logger for this class */
+ private final Logger LOG =
LoggerFactory.getLogger(DefaultFtpServerContext.class);
/** The FTP messages per language */
private MessageResource messageResource = new
MessageResourceFactory().createMessageResource();
@@ -76,8 +75,10 @@ public class DefaultFtpServerContext implements
FtpServerContext {
private CommandFactory commandFactory = new
CommandFactoryFactory().createCommandFactory();
+ /** The connection configuration */
private ConnectionConfig connectionConfig = new
ConnectionConfigFactory().createConnectionConfig();
+ /** The declared listeners for this context */
private Map<String, Listener> listeners = new HashMap<>();
private static final List<Authority> ADMIN_AUTHORITIES = new ArrayList<>();
@@ -90,7 +91,6 @@ public class DefaultFtpServerContext implements
FtpServerContext {
static {
ADMIN_AUTHORITIES.add(new WritePermission());
-
ANON_AUTHORITIES.add(new ConcurrentLoginPermission(20, 2));
ANON_AUTHORITIES.add(new TransferRatePermission(4800, 4800));
}
@@ -113,25 +113,24 @@ public class DefaultFtpServerContext implements
FtpServerContext {
// create admin user
String adminName = userManager.getAdminName();
+
if (!userManager.doesExist(adminName)) {
- LOG.info("Creating user : " + adminName);
+ LOG.info("Creating user : {}", adminName);
BaseUser adminUser = new BaseUser();
adminUser.setName(adminName);
adminUser.setPassword(adminName);
adminUser.setEnabled(true);
-
adminUser.setAuthorities(ADMIN_AUTHORITIES);
-
adminUser.setHomeDirectory("./res/home");
adminUser.setMaxIdleTime(0);
userManager.save(adminUser);
}
// create anonymous user
- if (!userManager.doesExist("anonymous")) {
- LOG.info("Creating user : anonymous");
+ if (!userManager.doesExist(UserManager.ANONYMOUS)) {
+ LOG.info("Creating user : {}", UserManager.ANONYMOUS);
BaseUser anonUser = new BaseUser();
- anonUser.setName("anonymous");
+ anonUser.setName(UserManager.ANONYMOUS);
anonUser.setPassword("");
anonUser.setAuthorities(ANON_AUTHORITIES);
@@ -211,9 +210,11 @@ public class DefaultFtpServerContext implements
FtpServerContext {
public void dispose() {
listeners.clear();
ftpletContainer.getFtplets().clear();
+
if (threadPoolExecutor != null) {
LOG.debug("Shutting down the thread pool executor");
threadPoolExecutor.shutdown();
+
try {
threadPoolExecutor.awaitTermination(5000,
TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
@@ -223,6 +224,9 @@ public class DefaultFtpServerContext implements
FtpServerContext {
}
}
+ /**
+ * {@inheritDoc}
+ */
public Listener getListener(String name) {
return listeners.get(name);
}
@@ -231,6 +235,9 @@ public class DefaultFtpServerContext implements
FtpServerContext {
listeners.put(name, listener);
}
+ /**
+ * {@inheritDoc}
+ */
public Map<String, Listener> getListeners() {
return listeners;
}
@@ -267,6 +274,9 @@ public class DefaultFtpServerContext implements
FtpServerContext {
this.userManager = userManager;
}
+ /**
+ * {@inheritDoc}
+ */
public ConnectionConfig getConnectionConfig() {
return connectionConfig;
}
@@ -278,17 +288,21 @@ public class DefaultFtpServerContext implements
FtpServerContext {
public synchronized ThreadPoolExecutor getThreadPoolExecutor() {
if (threadPoolExecutor == null) {
int maxThreads = connectionConfig.getMaxThreads();
+
if (maxThreads < 1) {
int maxLogins = connectionConfig.getMaxLogins();
+
if (maxLogins > 0) {
maxThreads = maxLogins;
} else {
maxThreads = 16;
}
}
+
LOG.debug("Intializing shared thread pool executor with max
threads of {}", maxThreads);
threadPoolExecutor = new OrderedThreadPoolExecutor(maxThreads);
}
+
return threadPoolExecutor;
}
}
diff --git a/core/src/main/java/org/apache/ftpserver/impl/FtpServerContext.java
b/core/src/main/java/org/apache/ftpserver/impl/FtpServerContext.java
index 83a5870a..0fa72d9e 100644
--- a/core/src/main/java/org/apache/ftpserver/impl/FtpServerContext.java
+++ b/core/src/main/java/org/apache/ftpserver/impl/FtpServerContext.java
@@ -39,6 +39,11 @@ import org.apache.ftpserver.message.MessageResource;
*/
public interface FtpServerContext extends FtpletContext {
+ /**
+ * Get the connection configuration
+ *
+ * @return the connection configuration
+ */
ConnectionConfig getConnectionConfig();
/**
@@ -55,8 +60,19 @@ public interface FtpServerContext extends FtpletContext {
*/
FtpletContainer getFtpletContainer();
+ /**
+ * Get a specific listener
+ *
+ * @param name The listener to fetch
+ * @return The found listener
+ */
Listener getListener(String name);
+ /**
+ * Get all the listeners
+ *
+ * @return The list of existing listeners
+ */
Map<String, Listener> getListeners();
/**
diff --git
a/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java
b/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java
index 7db9c382..1a292d30 100644
--- a/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java
+++ b/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java
@@ -38,9 +38,10 @@ import org.apache.mina.filter.firewall.Subnet;
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public class ListenerFactory {
-
+ /** The server address */
private String serverAddress;
+ /** The port. Default to 21 */
private int port = 21;
private SslConfiguration ssl;
@@ -96,6 +97,7 @@ public class ListenerFactory {
} catch (UnknownHostException e) {
throw new FtpServerConfigurationException("Unknown host", e);
}
+
// Deal with the old style black list and new session Filter here.
if (sessionFilter != null) {
if (blockedAddresses != null || blockedSubnets != null) {
@@ -103,6 +105,7 @@ public class ListenerFactory {
"Usage of SessionFilter in combination with
blockedAddesses/subnets is not supported. ");
}
}
+
if (blockedAddresses != null || blockedSubnets != null) {
return new NioListener(serverAddress, port, implicitSsl, ssl,
dataConnectionConfig, idleTimeout, blockedAddresses,
@@ -117,8 +120,7 @@ public class ListenerFactory {
* Is listeners created by this factory in SSL mode automatically or must
the client explicitly
* request to use SSL
*
- * @return true is listeners created by this factory is automatically in
SSL mode, false
- * otherwise
+ * @return true is listeners created by this factory is automatically in
SSL mode, false otherwise
*/
public boolean isImplicitSsl() {
return implicitSsl;
@@ -128,9 +130,8 @@ public class ListenerFactory {
* Should listeners created by this factory be in SSL mode automatically
or must the client
* explicitly request to use SSL
*
- * @param implicitSsl
- * true is listeners created by this factory should
automatically be in SSL mode,
- * false otherwise
+ * @param implicitSsl <code>true</code> is listeners created by this
factory should automatically be in SSL mode,
+ * <code>false</code> otherwise
*/
public void setImplicitSsl(boolean implicitSsl) {
this.implicitSsl = implicitSsl;
@@ -149,8 +150,7 @@ public class ListenerFactory {
* Set the port on which listeners created by this factory will accept
requests. Or set to 0
* (zero) is the port should be automatically assigned
*
- * @param port
- * The port to use.
+ * @param port The port to use.
*/
public void setPort(int port) {
this.port = port;
@@ -170,8 +170,7 @@ public class ListenerFactory {
* Set the {@link InetAddress} used for binding the local socket. Defaults
* to null, that is, the server binds to all available network interfaces
*
- * @param serverAddress
- * The local socket {@link InetAddress}
+ * @param serverAddress The local socket {@link InetAddress}
*/
public void setServerAddress(String serverAddress) {
this.serverAddress = serverAddress;
@@ -188,6 +187,7 @@ public class ListenerFactory {
/**
* Set the {@link SslConfiguration} to use by listeners created by this
factory
+ *
* @param ssl The {@link SslConfiguration}
*/
public void setSslConfiguration(SslConfiguration ssl) {
@@ -206,8 +206,7 @@ public class ListenerFactory {
/**
* Set configuration for data connections made within listeners created by
this factory
*
- * @param dataConnectionConfig
- * The data connection configuration
+ * @param dataConnectionConfig The data connection configuration
*/
public void setDataConnectionConfiguration(
DataConnectionConfiguration dataConnectionConfig) {
@@ -217,6 +216,7 @@ public class ListenerFactory {
/**
* Get the number of seconds during which no network activity
* is allowed before a session is closed due to inactivity.
+ *
* @return The idle time out
*/
public int getIdleTimeout() {
@@ -250,8 +250,7 @@ public class ListenerFactory {
* Sets the {@link InetAddress} that listeners created by this factory
will block from
* connecting
*
- * @param blockedAddresses
- * The list of {@link InetAddress}es
+ * @param blockedAddresses The list of {@link InetAddress}es
*/
@Deprecated
public void setBlockedAddresses(List<InetAddress> blockedAddresses) {
@@ -294,8 +293,7 @@ public class ListenerFactory {
/**
* Sets the session filter to the given filter.
*
- * @param sessionFilter
- * the session filter.
+ * @param sessionFilter the session filter.
*/
public void setSessionFilter(SessionFilter sessionFilter) {
this.sessionFilter = sessionFilter;
diff --git
a/core/src/main/java/org/apache/ftpserver/listener/nio/NioListener.java
b/core/src/main/java/org/apache/ftpserver/listener/nio/NioListener.java
index e4f387c4..63f5fd8e 100644
--- a/core/src/main/java/org/apache/ftpserver/listener/nio/NioListener.java
+++ b/core/src/main/java/org/apache/ftpserver/listener/nio/NioListener.java
@@ -136,6 +136,7 @@ public class NioListener extends AbstractListener {
acceptor.setReuseAddress(true);
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,
getIdleTimeout());
+
// Decrease the default receiver buffer size
acceptor.getSessionConfig().setReceiveBufferSize(512);
diff --git
a/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java
b/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java
index 6b31ce88..ef0cc8d8 100644
---
a/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java
+++
b/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java
@@ -215,14 +215,12 @@ public class PropertiesUserManager extends
AbstractUserManager {
public void refresh() {
synchronized (userDataProp) {
if (userDataFile != null) {
- LOG.debug("Refreshing user manager using file: "
- + userDataFile.getAbsolutePath());
+ LOG.debug("Refreshing user manager using file: {}",
userDataFile.getAbsolutePath());
loadFromFile(userDataFile);
} else {
//file is null, must have been created using URL
- LOG.debug("Refreshing user manager using URL: "
- + userUrl.toString());
+ LOG.debug("Refreshing user manager using URL: {}",
userUrl.toString());
loadFromUrl(userUrl);
}
}
diff --git
a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/UserManager.java
b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/UserManager.java
index 62b148f7..94d3e115 100644
--- a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/UserManager.java
+++ b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/UserManager.java
@@ -25,6 +25,8 @@ package org.apache.ftpserver.ftplet;
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public interface UserManager {
+ /** The anonymous user */
+ String ANONYMOUS = "anonymous";
/**
* Get user by name.