From 1c836f069860c91599adb6e535e879bc732e89d0 Mon Sep 17 00:00:00 2001 From: abilan Date: Mon, 12 Dec 2022 10:27:05 -0500 Subject: [PATCH] GH-3969: SFTP: Bring back support for empty path Fixes https://github.com/spring-projects/spring-integration/issues/3969 In previous version for SFTP client (Jsch), the empty path for `LS` command has meant a `user home`. Turns out the MINA `SftpClient` does not support automatic user home resolution from the empty path. * Fix `SftpSession` to resolve an empty path into a user home via `canicalPath()` operation --- .../integration/sftp/session/SftpSession.java | 1 + .../sftp/session/SftpRemoteFileTemplateTests.java | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java index ee91eab20f..53a1a8dc5d 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java @@ -96,6 +96,7 @@ public class SftpSession implements Session { remoteDir = remotePath; } } + remoteDir = remoteDir.length() == 0 ? this.sftpClient.canonicalPath("") : remoteDir; return StreamSupport.stream(this.sftpClient.readDir(remoteDir).spliterator(), false) .filter((entry) -> !isPattern || PatternMatchUtils.simpleMatch(remoteFile, entry.getFilename())); } diff --git a/spring-integration-sftp/src/test/java/org/springframework/integration/sftp/session/SftpRemoteFileTemplateTests.java b/spring-integration-sftp/src/test/java/org/springframework/integration/sftp/session/SftpRemoteFileTemplateTests.java index 2770e22182..a515ef891e 100644 --- a/spring-integration-sftp/src/test/java/org/springframework/integration/sftp/session/SftpRemoteFileTemplateTests.java +++ b/spring-integration-sftp/src/test/java/org/springframework/integration/sftp/session/SftpRemoteFileTemplateTests.java @@ -32,6 +32,7 @@ import org.springframework.integration.file.DefaultFileNameGenerator; import org.springframework.integration.file.remote.ClientCallbackWithoutResult; import org.springframework.integration.file.remote.SessionCallbackWithoutResult; import org.springframework.integration.file.remote.session.CachingSessionFactory; +import org.springframework.integration.file.remote.session.Session; import org.springframework.integration.file.remote.session.SessionFactory; import org.springframework.integration.file.support.FileExistsMode; import org.springframework.integration.sftp.SftpTestSupport; @@ -124,6 +125,14 @@ public class SftpRemoteFileTemplateTests extends SftpTestSupport { sessionFactory.destroy(); } + @Test + public void lsUserHome() throws IOException { + try (Session session = this.sessionFactory.getSession()) { + String[] entries = session.listNames(""); + assertThat(entries).contains(".", "sftpSource", "sftpTarget"); + } + } + @Configuration public static class Config {