[ https://issues.apache.org/jira/browse/SSHD-733?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15941023#comment-15941023 ]
Piotr Praszmo commented on SSHD-733: ------------------------------------ I'm having similar (probably the same) issue: {code} import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collections; import org.apache.sshd.client.SshClient; import org.apache.sshd.client.session.ClientSession; import org.apache.sshd.client.subsystem.sftp.SftpClient; import org.apache.sshd.client.subsystem.sftp.SftpClient.CloseableHandle; import org.apache.sshd.client.subsystem.sftp.SftpClient.DirEntry; import org.apache.sshd.common.file.virtualfs.VirtualFileSystemFactory; import org.apache.sshd.server.SshServer; import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider; import org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory; public class Main { private static final String USERNAME = "my username"; private static final String PASSWORD = "my password"; public static void main(final String[] args) throws Exception { Files.delete(Paths.get("my_link")); final Path link = Files.createSymbolicLink(Paths.get("my_link"), Paths.get("/")).toAbsolutePath(); final SshServer server = SshServer.setUpDefaultServer(); server.setHost("localhost"); server.setPort(0); server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider()); server.setPasswordAuthenticator( (username, password, session) -> USERNAME.equals(username) && PASSWORD.equals(password)); server.setSubsystemFactories(Collections.singletonList(new SftpSubsystemFactory())); server.setFileSystemFactory(new VirtualFileSystemFactory(Paths.get("/"))); server.start(); System.out.println("openssh:"); test(22, link); System.out.println("mina:"); test(server.getPort(), link); } private static void test(final int port, final Path path) throws IOException { try (final SshClient client = SshClient.setUpDefaultClient()) { client.setHostConfigEntryResolver((h, p, u) -> null); client.start(); try (ClientSession session = client.connect(USERNAME, "localhost", port).verify().getSession()) { session.addPasswordIdentity(PASSWORD); session.auth().verify(); final SftpClient sftp = session.createSftpClient(); try { try (CloseableHandle dir = sftp.openDir(path.toString())) { for (final DirEntry entry : sftp.listDir(dir)) { System.out.print(entry.getFilename() + " "); } System.out.println(); } } catch (final Exception e) { e.printStackTrace(); } } } } } {code} Produces following output: {code} openssh: vmlinuz libx32 usr srv sbin tmp lost+found dev initrd.img.old var etc home media . opt initrd.img sys run proc lib root lib64 boot bin vmlinuz.old mnt lib32 .. mina: SFTP error (SSH_FX_NOT_A_DIRECTORY): Internal NotDirectoryException: /tmp/workspace/test/my_link at org.apache.sshd.client.subsystem.sftp.AbstractSftpClient.throwStatusException(AbstractSftpClient.java:169) at org.apache.sshd.client.subsystem.sftp.AbstractSftpClient.checkHandleResponse(AbstractSftpClient.java:204) at org.apache.sshd.client.subsystem.sftp.AbstractSftpClient.checkHandle(AbstractSftpClient.java:184) at org.apache.sshd.client.subsystem.sftp.AbstractSftpClient.openDir(AbstractSftpClient.java:853) at test.Main.test(Main.java:57) at test.Main.main(Main.java:44) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:282) at java.lang.Thread.run(Thread.java:745) {code} `/tmp/workspace/test/my_link` is a symlink to directory (created at the start of main). On port 22 I'm running: {code} SSH-2.0-OpenSSH_7.4p1 Debian-6 {code} OpenSSH lists the contents of symlinked directory while mina returns SSH_FX_NOT_A_DIRECTORY. The same behavior can be observer using different client (sftp). I'm not sure which behavior is the correct one though. > SSHD server displays file symlinks instead of dir symlinks > ---------------------------------------------------------- > > Key: SSHD-733 > URL: https://issues.apache.org/jira/browse/SSHD-733 > Project: MINA SSHD > Issue Type: Wish > Affects Versions: 1.2.0 > Environment: Windows/Linux > Reporter: Marcin Kozakiewicz > Priority: Minor > > We use sshd for junit testing of sftp file transfers. > Scenario: > 1.create filesystem: > {code} > ├── mem0 > │ └── mem0.txt > ├── run -> mem0 > └── run2 -> mem0 > {code} > 2. Start SSh server with given file system. > code snippet from out project: > {code} > _server = SshServer.setUpDefaultServer(); > _server.setHost("localhost"); > _server.setPort(PORT); > _server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider()); > _server.setPasswordAuthenticator(new PasswordAuthenticator() { > @Override > public boolean authenticate(final String username, final String > password, final ServerSession session) { > return USERNAME.equals(username) && PASSWORD.equals(password); > } > }); > _server.setSubsystemFactories(singletonList(new > SftpSubsystemFactory())); > _server.setFileSystemFactory(new > VirtualFileSystemFactory(fileSystemPath)); > _server.start(); > {code} > 3. Connect to server with sftp client. > Result: > run and run2 symlinks are presented as file symlinks instead of directory > symlinks. > Expected result: > run and run2 are presented as directory symlinks. -- This message was sent by Atlassian JIRA (v6.3.15#6346)