Updated Branches: refs/heads/master 0bc4246a4 -> 7faddc9b8
[SSHD-230] Provide a few fixes for sftp and log a warning if subsystem / command is not found Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/7faddc9b Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/7faddc9b Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/7faddc9b Branch: refs/heads/master Commit: 7faddc9b89b5e9dbcf36d2fc98e50d132c130af4 Parents: 0bc4246 Author: Guillaume Nodet <[email protected]> Authored: Wed Jul 17 19:34:16 2013 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Wed Jul 17 19:34:16 2013 +0200 ---------------------------------------------------------------------- pom.xml | 5 +++++ .../org/apache/sshd/server/channel/ChannelSession.java | 10 ++++++++-- sshd-core/src/test/java/org/apache/sshd/ServerTest.java | 5 +++++ .../java/org/apache/sshd/sftp/subsystem/Serializer.java | 10 +++++++++- .../src/test/java/org/apache/sshd/sftp/SftpTest.java | 12 ++++++++++++ 5 files changed, 39 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7faddc9b/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 098bfed..cfe03b9 100644 --- a/pom.xml +++ b/pom.xml @@ -121,6 +121,11 @@ </dependency> <dependency> <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>1.6.4</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</version> </dependency> http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7faddc9b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java index 8505862..dd21656 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java @@ -205,8 +205,11 @@ public class ChannelSession extends AbstractServerChannel { } protected void doWriteData(byte[] data, int off, int len) throws IOException { - int r = receiver.data(this, data, off, len); - if (r>0) + int r = len; + if (receiver != null) { + r = receiver.data(this, data, off, len); + } + if (r > 0) localWindow.consumeAndCheck(r); } @@ -371,6 +374,7 @@ public class ChannelSession extends AbstractServerChannel { boolean wantReply = buffer.getBoolean(); String commandLine = buffer.getString(); if (((ServerSession) session).getServerFactoryManager().getCommandFactory() == null) { + log.warn("Unsupported command: {}", commandLine); return false; } if (log.isInfoEnabled()) { @@ -398,10 +402,12 @@ public class ChannelSession extends AbstractServerChannel { String subsystem = buffer.getString(); List<NamedFactory<Command>> factories = ((ServerSession) session).getServerFactoryManager().getSubsystemFactories(); if (factories == null) { + log.warn("Unsupported subsystem: {}", subsystem); return false; } command = NamedFactory.Utils.create(factories, subsystem); if (command == null) { + log.warn("Unsupported subsystem: {}", subsystem); return false; } prepareCommand(); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7faddc9b/sshd-core/src/test/java/org/apache/sshd/ServerTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/ServerTest.java b/sshd-core/src/test/java/org/apache/sshd/ServerTest.java index d469b72..ebdb569 100644 --- a/sshd-core/src/test/java/org/apache/sshd/ServerTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/ServerTest.java @@ -19,14 +19,18 @@ package org.apache.sshd; import java.net.ServerSocket; +import java.util.Arrays; import java.util.concurrent.TimeoutException; import org.apache.mina.core.session.IoSession; import org.apache.sshd.client.SessionFactory; import org.apache.sshd.client.session.ClientSessionImpl; +import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.session.AbstractSession; +import org.apache.sshd.server.Command; import org.apache.sshd.server.command.ScpCommandFactory; +import org.apache.sshd.server.sftp.SftpSubsystem; import org.apache.sshd.util.BogusPasswordAuthenticator; import org.apache.sshd.util.EchoShellFactory; import org.apache.sshd.util.Utils; @@ -131,6 +135,7 @@ public class ServerTest { SshServer sshd = SshServer.setUpDefaultServer(); sshd.setPort(8001); sshd.setKeyPairProvider(Utils.createTestHostKeyProvider()); + sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory())); sshd.setShellFactory(new EchoShellFactory()); sshd.setCommandFactory(new ScpCommandFactory()); sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator()); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7faddc9b/sshd-sftp/src/main/java/org/apache/sshd/sftp/subsystem/Serializer.java ---------------------------------------------------------------------- diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/subsystem/Serializer.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/subsystem/Serializer.java index 8bbff53..4b49cfc 100644 --- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/subsystem/Serializer.java +++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/subsystem/Serializer.java @@ -448,7 +448,15 @@ public class Serializer { buffer.putString(attrs.getGroup()); } if ((flags & SSH_FILEXFER_ATTR_PERMISSIONS) != 0) { - buffer.putInt(attrs.getPermissions()); + int perms = attrs.getPermissions(); + if (session.getVersion() < 4) { + if (attrs.getType() == SSH_FILEXFER_TYPE_REGULAR) { + perms |= 0100000; + } else if (attrs.getType() == SSH_FILEXFER_TYPE_DIRECTORY) { + perms |= 0040000; + } + } + buffer.putInt(perms); } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7faddc9b/sshd-sftp/src/test/java/org/apache/sshd/sftp/SftpTest.java ---------------------------------------------------------------------- diff --git a/sshd-sftp/src/test/java/org/apache/sshd/sftp/SftpTest.java b/sshd-sftp/src/test/java/org/apache/sshd/sftp/SftpTest.java index 2d350f9..4de7c59 100644 --- a/sshd-sftp/src/test/java/org/apache/sshd/sftp/SftpTest.java +++ b/sshd-sftp/src/test/java/org/apache/sshd/sftp/SftpTest.java @@ -223,4 +223,16 @@ public class SftpTest { c.disconnect(); } + public static void main(String[] args) throws Exception { + SshServer sshd = SshServer.setUpDefaultServer(); + sshd.setPort(8001); + sshd.setKeyPairProvider(Utils.createTestHostKeyProvider()); + sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory())); + sshd.setShellFactory(new EchoShellFactory()); + sshd.setCommandFactory(new ScpCommandFactory()); + sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator()); + sshd.start(); + Thread.sleep(100000); + } + }
