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);
+    }
+
 }

Reply via email to