You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tw...@apache.org on 2024/11/08 19:23:34 UTC

(mina-sshd) branch master updated: Do not trim user names, passwords, and file paths or file names

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 0114a5fcc Do not trim user names, passwords, and file paths or file names
0114a5fcc is described below

commit 0114a5fcc579602ac18308698136c1edb143a079
Author: Thomas Wolf <tw...@apache.org>
AuthorDate: Thu Nov 7 22:25:18 2024 +0100

    Do not trim user names, passwords, and file paths or file names
    
    Use ValidateUtils.hasContent(String, ...) instead of the trimming
    ValidateUtils.checkNotNullAndNotEmpty(String, ...) for all strings
    that are user names, passwords, or file paths or file names. All of
    these might contain leading or trailing blanks that actually are
    significant.
---
 .../src/main/java/org/apache/sshd/cli/client/SftpCommandMain.java  | 6 +++---
 .../java/org/apache/sshd/client/config/hosts/HostConfigEntry.java  | 7 +++----
 .../org/apache/sshd/client/config/keys/ClientIdentityLoader.java   | 2 +-
 .../common/config/keys/loader/AbstractPrivateKeyObfuscator.java    | 2 +-
 .../apache/sshd/common/file/nativefs/NativeFileSystemFactory.java  | 2 +-
 .../sshd/common/file/virtualfs/VirtualFileSystemFactory.java       | 4 ++--
 .../sshd/common/keyprovider/AbstractResourceKeyPairProvider.java   | 4 ++--
 sshd-common/src/main/java/org/apache/sshd/common/util/OsUtils.java | 2 +-
 .../server/config/keys/DefaultAuthorizedKeysAuthenticator.java     | 2 +-
 .../src/main/java/org/apache/sshd/git/pack/GitPackCommand.java     | 2 +-
 .../java/org/apache/sshd/putty/PuttyKeyPairResourceParser.java     | 6 +++---
 .../main/java/org/apache/sshd/scp/client/AbstractScpClient.java    | 6 +++---
 .../src/main/java/org/apache/sshd/scp/client/DefaultScpClient.java | 6 +++---
 sshd-scp/src/main/java/org/apache/sshd/scp/client/ScpClient.java   | 2 +-
 .../src/main/java/org/apache/sshd/sftp/client/SftpClient.java      | 2 +-
 .../org/apache/sshd/sftp/client/fs/SftpClientDirectoryScanner.java | 2 +-
 .../org/apache/sshd/sftp/client/fs/SftpFileSystemProvider.java     | 2 +-
 .../org/apache/sshd/sftp/client/impl/SftpRemotePathChannel.java    | 2 +-
 .../sshd/sftp/spring/integration/ApacheSshdSftpSessionFactory.java | 4 ++--
 19 files changed, 32 insertions(+), 33 deletions(-)

diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SftpCommandMain.java b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SftpCommandMain.java
index fde0e8868..56b5d4586 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SftpCommandMain.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SftpCommandMain.java
@@ -641,7 +641,7 @@ public class SftpCommandMain extends SshClientCliSupport implements SftpClientHo
         public boolean executeCommand(
                 String args, BufferedReader stdin, PrintStream stdout, PrintStream stderr)
                 throws Exception {
-            ValidateUtils.checkNotNullAndNotEmpty(args, "No remote directory specified");
+            ValidateUtils.hasContent(args, "No remote directory specified");
 
             String newPath = resolveRemotePath(args);
             SftpClient sftp = getClient();
@@ -695,7 +695,7 @@ public class SftpCommandMain extends SshClientCliSupport implements SftpClientHo
         public boolean executeCommand(
                 String args, BufferedReader stdin, PrintStream stdout, PrintStream stderr)
                 throws Exception {
-            ValidateUtils.checkNotNullAndNotEmpty(args, "No remote directory specified");
+            ValidateUtils.hasContent(args, "No remote directory specified");
 
             String path = resolveRemotePath(args);
             SftpClient sftp = getClient();
@@ -908,7 +908,7 @@ public class SftpCommandMain extends SshClientCliSupport implements SftpClientHo
         public boolean executeCommand(
                 String args, BufferedReader stdin, PrintStream stdout, PrintStream stderr)
                 throws Exception {
-            ValidateUtils.checkNotNullAndNotEmpty(args, "No remote directory specified");
+            ValidateUtils.hasContent(args, "No remote directory specified");
 
             String path = resolveRemotePath(args);
             SftpClient sftp = getClient();
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java b/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
index 947c8e82f..6e3608b83 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
@@ -295,7 +295,7 @@ public class HostConfigEntry extends HostPatternsHolder implements MutableUserHo
      * @param id The identity path to add - never {@code null}
      */
     public void addIdentity(String id) {
-        String path = ValidateUtils.checkNotNullAndNotEmpty(id, "No identity provided");
+        String path = ValidateUtils.hasContent(id, "No identity provided");
         identities.add(path);
         appendPropertyValue(IDENTITY_FILE_CONFIG_PROP, id);
     }
@@ -890,8 +890,7 @@ public class HostConfigEntry extends HostPatternsHolder implements MutableUserHo
                             PathUtils.appendUserHome(sb);
                             break;
                         case LOCAL_USER_MACRO:
-                            sb.append(ValidateUtils.checkNotNullAndNotEmpty(OsUtils.getCurrentUser(),
-                                    "No local user name value"));
+                            sb.append(OsUtils.getCurrentUser());
                             break;
                         case LOCAL_HOST_MACRO: {
                             InetAddress address = Objects.requireNonNull(InetAddress.getLocalHost(), "No local address");
@@ -902,7 +901,7 @@ public class HostConfigEntry extends HostPatternsHolder implements MutableUserHo
                             sb.append(ValidateUtils.checkNotNullAndNotEmpty(host, "No remote host provided"));
                             break;
                         case REMOTE_USER_MACRO:
-                            sb.append(ValidateUtils.checkNotNullAndNotEmpty(username, "No remote user provided"));
+                            sb.append(ValidateUtils.hasContent(username, "No remote user provided"));
                             break;
                         case REMOTE_PORT_MACRO:
                             ValidateUtils.checkTrue(port > 0, "Bad remote port value: %d", port);
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityLoader.java b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityLoader.java
index 9dc218970..a3e54fdcd 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityLoader.java
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityLoader.java
@@ -80,7 +80,7 @@ public interface ClientIdentityLoader {
             Objects.requireNonNull(location, "No location provided");
 
             Path path = Paths
-                    .get(ValidateUtils.checkNotNullAndNotEmpty(location.getName(), "No location value for %s", location));
+                    .get(ValidateUtils.hasContent(location.getName(), "No location value for %s", location));
             path = path.toAbsolutePath();
             path = path.normalize();
             return path;
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/AbstractPrivateKeyObfuscator.java b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/AbstractPrivateKeyObfuscator.java
index 5f3ac93e1..82fc73dc4 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/AbstractPrivateKeyObfuscator.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/AbstractPrivateKeyObfuscator.java
@@ -102,7 +102,7 @@ public abstract class AbstractPrivateKeyObfuscator implements PrivateKeyObfuscat
         byte[] initVector = Objects.requireNonNull(encContext.getInitVector(), "No encryption init vector");
         ValidateUtils.checkTrue(initVector.length > 0, "Empty encryption init vector");
 
-        String password = ValidateUtils.checkNotNullAndNotEmpty(encContext.getPassword(), "No encryption password");
+        String password = ValidateUtils.hasContent(encContext.getPassword(), "No encryption password");
         byte[] passBytes = password.getBytes(StandardCharsets.UTF_8);
         byte[] prevHash = GenericUtils.EMPTY_BYTE_ARRAY;
         try {
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/file/nativefs/NativeFileSystemFactory.java b/sshd-common/src/main/java/org/apache/sshd/common/file/nativefs/NativeFileSystemFactory.java
index 6d6110534..053582cc9 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/file/nativefs/NativeFileSystemFactory.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/file/nativefs/NativeFileSystemFactory.java
@@ -70,7 +70,7 @@ public class NativeFileSystemFactory extends AbstractLoggingBean implements File
      * @see                #isCreateHome()
      */
     public void setUsersHomeDir(String usersHomeDir) {
-        this.usersHomeDir = ValidateUtils.checkNotNullAndNotEmpty(usersHomeDir, "No users home dir");
+        this.usersHomeDir = ValidateUtils.hasContent(usersHomeDir, "No users home dir");
     }
 
     /**
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/file/virtualfs/VirtualFileSystemFactory.java b/sshd-common/src/main/java/org/apache/sshd/common/file/virtualfs/VirtualFileSystemFactory.java
index 7ad53e532..5cb1ba1fd 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/file/virtualfs/VirtualFileSystemFactory.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/file/virtualfs/VirtualFileSystemFactory.java
@@ -57,12 +57,12 @@ public class VirtualFileSystemFactory implements FileSystemFactory {
     }
 
     public void setUserHomeDir(String userName, Path userHomeDir) {
-        homeDirs.put(ValidateUtils.checkNotNullAndNotEmpty(userName, "No username"),
+        homeDirs.put(ValidateUtils.hasContent(userName, "No username"),
                 Objects.requireNonNull(userHomeDir, "No home dir"));
     }
 
     public Path getUserHomeDir(String userName) {
-        return homeDirs.get(ValidateUtils.checkNotNullAndNotEmpty(userName, "No username"));
+        return homeDirs.get(ValidateUtils.hasContent(userName, "No username"));
     }
 
     @Override
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/AbstractResourceKeyPairProvider.java b/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/AbstractResourceKeyPairProvider.java
index 09c863b89..8e9e235a2 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/AbstractResourceKeyPairProvider.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/AbstractResourceKeyPairProvider.java
@@ -85,7 +85,7 @@ public abstract class AbstractResourceKeyPairProvider<R> extends AbstractKeyPair
             }
 
             for (Object r : resources) {
-                String resourceKey = ValidateUtils.checkNotNullAndNotEmpty(Objects.toString(r, null), "No resource key value");
+                String resourceKey = ValidateUtils.hasContent(Objects.toString(r, null), "No resource key value");
                 if (cacheMap.containsKey(resourceKey)) {
                     continue;
                 }
@@ -126,7 +126,7 @@ public abstract class AbstractResourceKeyPairProvider<R> extends AbstractKeyPair
         IoResource<?> ioResource
                 = ValidateUtils.checkNotNull(getIoResource(session, resource), "No I/O resource available for %s", resource);
         String resourceKey
-                = ValidateUtils.checkNotNullAndNotEmpty(ioResource.getName(), "No resource string value for %s", resource);
+                = ValidateUtils.hasContent(ioResource.getName(), "No resource string value for %s", resource);
         Iterable<KeyPair> ids;
         synchronized (cacheMap) {
             // check if lucky enough to have already loaded this file
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/OsUtils.java b/sshd-common/src/main/java/org/apache/sshd/common/util/OsUtils.java
index 166bb6ba7..8790e4bd7 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/OsUtils.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/OsUtils.java
@@ -327,7 +327,7 @@ public final class OsUtils {
             }
 
             username = getCanonicalUser(System.getProperty(CURRENT_USER_OVERRIDE_PROP, System.getProperty("user.name")));
-            ValidateUtils.checkNotNullAndNotEmpty(username, "No username available");
+            ValidateUtils.hasContent(username, "No username available");
             CURRENT_USER_HOLDER.set(username);
         }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/config/keys/DefaultAuthorizedKeysAuthenticator.java b/sshd-core/src/main/java/org/apache/sshd/server/config/keys/DefaultAuthorizedKeysAuthenticator.java
index 659703f48..a6821bcaa 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/config/keys/DefaultAuthorizedKeysAuthenticator.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/config/keys/DefaultAuthorizedKeysAuthenticator.java
@@ -72,7 +72,7 @@ public class DefaultAuthorizedKeysAuthenticator extends AuthorizedKeysAuthentica
 
     public DefaultAuthorizedKeysAuthenticator(String user, Path path, boolean strict, LinkOption... options) {
         super(path, options);
-        this.user = ValidateUtils.checkNotNullAndNotEmpty(user, "No username provided");
+        this.user = ValidateUtils.hasContent(user, "No username provided");
         this.strict = strict;
     }
 
diff --git a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java
index 0da77d7a7..4f1eac8a2 100644
--- a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java
+++ b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java
@@ -121,7 +121,7 @@ public class GitPackCommand extends AbstractGitCommand {
             pathArg = pathArg.substring(1);
         }
 
-        ValidateUtils.checkNotNullAndNotEmpty(pathArg, "No %s command sub-path specified", args[0]);
+        ValidateUtils.hasContent(pathArg, "No %s command sub-path specified", args[0]);
         return rootDir.resolve(pathArg);
     }
 
diff --git a/sshd-putty/src/main/java/org/apache/sshd/putty/PuttyKeyPairResourceParser.java b/sshd-putty/src/main/java/org/apache/sshd/putty/PuttyKeyPairResourceParser.java
index 82999be9c..5398940f6 100644
--- a/sshd-putty/src/main/java/org/apache/sshd/putty/PuttyKeyPairResourceParser.java
+++ b/sshd-putty/src/main/java/org/apache/sshd/putty/PuttyKeyPairResourceParser.java
@@ -143,10 +143,10 @@ public interface PuttyKeyPairResourceParser<PUB extends PublicKey, PRV extends P
             Map<String, String> headers)
             throws GeneralSecurityException {
         Objects.requireNonNull(prvBytes, "No encrypted key bytes");
-        ValidateUtils.checkNotNullAndNotEmpty(algName, "No encryption algorithm", GenericUtils.EMPTY_OBJECT_ARRAY);
+        ValidateUtils.checkNotNullAndNotEmpty(algName, "No encryption algorithm");
         ValidateUtils.checkTrue(numBits > 0, "Invalid encryption key size: %d", numBits);
-        ValidateUtils.checkNotNullAndNotEmpty(algMode, "No encryption mode", GenericUtils.EMPTY_OBJECT_ARRAY);
-        ValidateUtils.checkNotNullAndNotEmpty(password, "No encryption password", GenericUtils.EMPTY_OBJECT_ARRAY);
+        ValidateUtils.checkNotNullAndNotEmpty(algMode, "No encryption mode");
+        ValidateUtils.hasContent(password, "No encryption password");
 
         if (!"AES".equalsIgnoreCase(algName)) {
             throw new NoSuchAlgorithmException("decodePrivateKeyBytes(" + algName + "-" + numBits + "-" + algMode + ") N/A");
diff --git a/sshd-scp/src/main/java/org/apache/sshd/scp/client/AbstractScpClient.java b/sshd-scp/src/main/java/org/apache/sshd/scp/client/AbstractScpClient.java
index 1930ef8a4..5ca5f180f 100644
--- a/sshd-scp/src/main/java/org/apache/sshd/scp/client/AbstractScpClient.java
+++ b/sshd-scp/src/main/java/org/apache/sshd/scp/client/AbstractScpClient.java
@@ -59,7 +59,7 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S
 
     @Override
     public void download(String[] remote, String local, Collection<Option> options) throws IOException {
-        local = ValidateUtils.checkNotNullAndNotEmpty(local, "Invalid argument local: %s", local);
+        local = ValidateUtils.hasContent(local, "Invalid argument local: %s", local);
         remote = ValidateUtils.checkNotNullAndNotEmpty(remote, "Invalid argument remote: %s", (Object) remote);
 
         if (remote.length > 1) {
@@ -87,7 +87,7 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S
     @Override
     public void download(String remote, Path local, Collection<Option> options) throws IOException {
         local = ValidateUtils.checkNotNull(local, "Invalid argument local: %s", local);
-        remote = ValidateUtils.checkNotNullAndNotEmpty(remote, "Invalid argument remote: %s", remote);
+        remote = ValidateUtils.hasContent(remote, "Invalid argument remote: %s", remote);
 
         LinkOption[] opts = IoUtils.getLinkOptions(true);
         if (Files.isDirectory(local, opts)) {
@@ -114,7 +114,7 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S
 
     @Override
     public void download(String remote, String local, Collection<Option> options) throws IOException {
-        local = ValidateUtils.checkNotNullAndNotEmpty(local, "Invalid argument local: %s", local);
+        local = ValidateUtils.hasContent(local, "Invalid argument local: %s", local);
 
         ClientSession session = getClientSession();
         FactoryManager manager = session.getFactoryManager();
diff --git a/sshd-scp/src/main/java/org/apache/sshd/scp/client/DefaultScpClient.java b/sshd-scp/src/main/java/org/apache/sshd/scp/client/DefaultScpClient.java
index d9223d455..dd956b903 100644
--- a/sshd-scp/src/main/java/org/apache/sshd/scp/client/DefaultScpClient.java
+++ b/sshd-scp/src/main/java/org/apache/sshd/scp/client/DefaultScpClient.java
@@ -104,10 +104,10 @@ public class DefaultScpClient extends AbstractScpClient {
     public void upload(
             InputStream local, String remote, long size, Collection<PosixFilePermission> perms, ScpTimestampCommandDetails time)
             throws IOException {
-        int namePos = ValidateUtils.checkNotNullAndNotEmpty(remote, "No remote location specified").lastIndexOf('/');
+        int namePos = ValidateUtils.hasContent(remote, "No remote location specified").lastIndexOf('/');
         String name = (namePos < 0)
                 ? remote
-                : ValidateUtils.checkNotNullAndNotEmpty(remote.substring(namePos + 1), "No name value in remote=%s", remote);
+                : ValidateUtils.hasContent(remote.substring(namePos + 1), "No name value in remote=%s", remote);
         Collection<Option> options = (time != null) ? EnumSet.of(Option.PreserveAttributes) : Collections.emptySet();
         String cmd = ScpClient.createSendCommand(remote, options);
         ClientSession session = getClientSession();
@@ -134,7 +134,7 @@ public class DefaultScpClient extends AbstractScpClient {
             String remote, Collection<Option> options, Collection<T> local, AbstractScpClient.ScpOperationExecutor<T> executor)
             throws IOException {
         local = ValidateUtils.checkNotNullAndNotEmpty(local, "Invalid argument local: %s", local);
-        remote = ValidateUtils.checkNotNullAndNotEmpty(remote, "Invalid argument remote: %s", remote);
+        remote = ValidateUtils.hasContent(remote, "Invalid argument remote: %s", remote);
         if (local.size() > 1) {
             options = addTargetIsDirectory(options);
         }
diff --git a/sshd-scp/src/main/java/org/apache/sshd/scp/client/ScpClient.java b/sshd-scp/src/main/java/org/apache/sshd/scp/client/ScpClient.java
index c262ad65b..660f5ec25 100644
--- a/sshd-scp/src/main/java/org/apache/sshd/scp/client/ScpClient.java
+++ b/sshd-scp/src/main/java/org/apache/sshd/scp/client/ScpClient.java
@@ -103,7 +103,7 @@ public interface ScpClient extends SessionHolder<ClientSession>, ClientSessionHo
     }
 
     default void upload(String local, String remote, Collection<Option> options) throws IOException {
-        upload(new String[] { ValidateUtils.checkNotNullAndNotEmpty(local, "Invalid argument local: %s", local) }, remote,
+        upload(new String[] { ValidateUtils.hasContent(local, "Invalid argument local: %s", local) }, remote,
                 options);
     }
 
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/SftpClient.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/SftpClient.java
index 98f065782..0adf2e41b 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/SftpClient.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/SftpClient.java
@@ -148,7 +148,7 @@ public interface SftpClient extends SubsystemClient {
 
         Handle(String path, byte[] id) {
             // clone the original so the handle is immutable
-            this.path = ValidateUtils.checkNotNullAndNotEmpty(path, "No remote path");
+            this.path = ValidateUtils.hasContent(path, "No remote path");
             this.id = ValidateUtils.checkNotNullAndNotEmpty(id, "No handle ID").clone();
         }
 
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpClientDirectoryScanner.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpClientDirectoryScanner.java
index bb8997f85..a6c0dd08a 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpClientDirectoryScanner.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpClientDirectoryScanner.java
@@ -99,7 +99,7 @@ public class SftpClientDirectoryScanner extends PathScanningMatcher {
      *                form when scanning. May not be {@code null}/empty
      */
     public void setBasedir(String basedir) {
-        this.basedir = ValidateUtils.checkNotNullAndNotEmpty(basedir, "No base directory provided");
+        this.basedir = ValidateUtils.hasContent(basedir, "No base directory provided");
     }
 
     @Override
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpFileSystemProvider.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpFileSystemProvider.java
index 98c030c98..4157e2114 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpFileSystemProvider.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpFileSystemProvider.java
@@ -1568,7 +1568,7 @@ public class SftpFileSystemProvider extends FileSystemProvider {
     }
 
     public static String encodeCredentials(String username, String password) {
-        ValidateUtils.checkNotNullAndNotEmpty(username, "No username provided");
+        ValidateUtils.hasContent(username, "No username provided");
 
         /*
          * There is no way to properly encode/decode credentials that already contain colon. See also
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpRemotePathChannel.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpRemotePathChannel.java
index bf36154e6..e1a97a471 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpRemotePathChannel.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpRemotePathChannel.java
@@ -78,7 +78,7 @@ public class SftpRemotePathChannel extends FileChannel {
                                  Collection<OpenMode> modes)
             throws IOException {
         this.log = LoggerFactory.getLogger(getClass());
-        this.path = ValidateUtils.checkNotNullAndNotEmpty(path, "No remote file path specified");
+        this.path = ValidateUtils.hasContent(path, "No remote file path specified");
         this.modes = Collections.unmodifiableSet(EnumSet.copyOf(modes));
         if (this.modes.isEmpty()) {
             throw new IllegalArgumentException("At least one OpenMode is required for a SftpRemotePathChannel");
diff --git a/sshd-spring-sftp/src/main/java/org/apache/sshd/sftp/spring/integration/ApacheSshdSftpSessionFactory.java b/sshd-spring-sftp/src/main/java/org/apache/sshd/sftp/spring/integration/ApacheSshdSftpSessionFactory.java
index 76e1aa7ab..ac71b1b5d 100644
--- a/sshd-spring-sftp/src/main/java/org/apache/sshd/sftp/spring/integration/ApacheSshdSftpSessionFactory.java
+++ b/sshd-spring-sftp/src/main/java/org/apache/sshd/sftp/spring/integration/ApacheSshdSftpSessionFactory.java
@@ -135,7 +135,7 @@ public class ApacheSshdSftpSessionFactory
      */
     @Override
     public void setUsername(String user) {
-        this.userValue = ValidateUtils.checkNotNullAndNotEmpty(user, "No user specified: %s", user);
+        this.userValue = ValidateUtils.hasContent(user, "No user specified: %s", user);
     }
 
     @Override
@@ -447,7 +447,7 @@ public class ApacheSshdSftpSessionFactory
 
     protected ClientSession createClientSession() throws Exception {
         String hostname = ValidateUtils.checkNotNullAndNotEmpty(getHost(), "Host must not be empty");
-        String username = ValidateUtils.checkNotNullAndNotEmpty(getUsername(), "User must not be empty");
+        String username = ValidateUtils.hasContent(getUsername(), "User must not be empty");
         ClientSession session
                 = createClientSession(hostname, username, getPort(), getEffectiveTimeoutValue(getConnectTimeout()));
         try {