You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2018/01/04 10:10:20 UTC

[1/2] mina-sshd git commit: [SSHD-790] Added name index value to SFTP client encode/decode hooks for referenced names

Repository: mina-sshd
Updated Branches:
  refs/heads/master ec901de77 -> 8a570b2a5


[SSHD-790] Added name index value to SFTP client encode/decode hooks for referenced names


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/1bddd2a1
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/1bddd2a1
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/1bddd2a1

Branch: refs/heads/master
Commit: 1bddd2a156bfe43895957952c359cd0ea661d231
Parents: ec901de
Author: Goldstein Lyor <ly...@c-b4.com>
Authored: Thu Jan 4 11:59:56 2018 +0200
Committer: Goldstein Lyor <ly...@c-b4.com>
Committed: Thu Jan 4 11:59:56 2018 +0200

----------------------------------------------------------------------
 .../subsystem/sftp/impl/AbstractSftpClient.java | 76 +++++++++++++-------
 1 file changed, 49 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/1bddd2a1/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/impl/AbstractSftpClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/impl/AbstractSftpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/impl/AbstractSftpClient.java
index 45173e2..681c07d 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/impl/AbstractSftpClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/impl/AbstractSftpClient.java
@@ -28,6 +28,7 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.sshd.client.channel.ClientChannel;
@@ -111,9 +112,20 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
     /**
      * @param cmd The command that was sent whose response contains the name to be decoded
      * @param buf The {@link Buffer} containing the encoded name
+     * @param nameIndex The zero-based order of the requested names for the command - e.g.,
+     * <UL>
+     *      <LI>
+     *      When listing a directory's contents each successive name will have an increasing index.
+     *      </LI>
+     *
+     *      <LI>
+     *      For SFTP version 3, when retrieving a single name, short name will have index=0
+     *      and the long one index=1.
+     *      </LI>
+     * </UL>
      * @return The decoded referenced name
      */
-    protected String getReferencedName(int cmd, Buffer buf) {
+    protected String getReferencedName(int cmd, Buffer buf, int nameIndex) {
         Charset cs = getNameDecodingCharset();
         return buf.getString(cs);
     }
@@ -123,9 +135,11 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
      * @param cmd The command for which this name is being added
      * @param buf The buffer instance to update
      * @param name The name to place in the buffer
+     * @param nameIndex The zero-based order of the name for the specific command
+     * if more than one name required - e.g., rename, link/symbolic link
      * @return The updated buffer
      */
-    protected <B extends Buffer> B putReferencedName(int cmd, B buf, String name) {
+    protected <B extends Buffer> B putReferencedName(int cmd, B buf, String name, int nameIndex) {
         Charset cs = getNameDecodingCharset();
         buf.putString(name, cs);
         return buf;
@@ -260,7 +274,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         int type = buffer.getUByte();
         int id = buffer.getInt();
         if (type == SftpConstants.SSH_FXP_ATTRS) {
-            return readAttributes(cmd, buffer);
+            return readAttributes(cmd, buffer, new AtomicInteger(0));
         }
 
         if (type == SftpConstants.SSH_FXP_STATUS) {
@@ -311,14 +325,17 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
             if (len != 1) {
                 throw new SshException("SFTP error: received " + len + " names instead of 1");
             }
-            String name = getReferencedName(cmd, buffer);
+
+            AtomicInteger nameIndex = new AtomicInteger(0);
+            String name = getReferencedName(cmd, buffer, nameIndex.getAndIncrement());
+
             String longName = null;
             int version = getVersion();
             if (version == SftpConstants.SFTP_V3) {
-                longName = getReferencedName(cmd, buffer);
+                longName = getReferencedName(cmd, buffer, nameIndex.getAndIncrement());
             }
 
-            Attributes attrs = readAttributes(cmd, buffer);
+            Attributes attrs = readAttributes(cmd, buffer, nameIndex);
             Boolean indicator = SftpHelper.getEndOfListIndicatorValue(buffer, version);
             // TODO decide what to do if not-null and not TRUE
             if (log.isTraceEnabled()) {
@@ -354,7 +371,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         return null;
     }
 
-    protected Attributes readAttributes(int cmd, Buffer buffer) throws IOException {
+    protected Attributes readAttributes(int cmd, Buffer buffer, AtomicInteger nameIndex) throws IOException {
         Attributes attrs = new Attributes();
         int flags = buffer.getInt();
         int version = getVersion();
@@ -443,7 +460,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
                 }
                 if ((flags & SftpConstants.SSH_FILEXFER_ATTR_UNTRANSLATED_NAME) != 0) {
                     @SuppressWarnings("unused")
-                    String untranslated = getReferencedName(cmd, buffer); // TODO: handle untranslated-name
+                    String untranslated = getReferencedName(cmd, buffer, nameIndex.getAndIncrement()); // TODO: handle untranslated-name
                 }
             }
         } else {
@@ -589,7 +606,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE /* some extra fields */, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_OPEN, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_OPEN, buffer, path, 0);
 
         int version = getVersion();
         int mode = 0;
@@ -679,7 +696,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE /* some extra fields */, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_REMOVE, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_REMOVE, buffer, path, 0);
         checkCommandStatus(SftpConstants.SSH_FXP_REMOVE, buffer);
     }
 
@@ -694,8 +711,8 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(oldPath.length() + newPath.length() + Long.SIZE /* some extra fields */, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_RENAME, buffer, oldPath);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_RENAME, buffer, newPath);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_RENAME, buffer, oldPath, 0);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_RENAME, buffer, newPath, 1);
 
         int numOptions = GenericUtils.size(options);
         int version = getVersion();
@@ -843,7 +860,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE /* some extra fields */, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_MKDIR, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_MKDIR, buffer, path, 0);
         buffer.putInt(0);
 
         int version = getVersion();
@@ -865,7 +882,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE /* some extra fields */, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_RMDIR, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_RMDIR, buffer, path, 0);
         checkCommandStatus(SftpConstants.SSH_FXP_RMDIR, buffer);
     }
 
@@ -876,7 +893,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE /* some extra fields */, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_OPENDIR, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_OPENDIR, buffer, path, 0);
 
         CloseableHandle handle = new DefaultCloseableHandle(this, path, checkHandle(SftpConstants.SSH_FXP_OPENDIR, buffer));
         if (log.isTraceEnabled()) {
@@ -921,10 +938,15 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
             }
 
             List<DirEntry> entries = new ArrayList<>(len);
+            AtomicInteger nameIndex = new AtomicInteger(0);
             for (int i = 0; i < len; i++) {
-                String name = getReferencedName(cmd, buffer);
-                String longName = (version == SftpConstants.SFTP_V3) ? getReferencedName(cmd, buffer) : null;
-                Attributes attrs = readAttributes(cmd, buffer);
+                String name = getReferencedName(cmd, buffer, nameIndex.getAndIncrement());
+                String longName = null;
+                if (version == SftpConstants.SFTP_V3) {
+                    longName = getReferencedName(cmd, buffer, nameIndex.getAndIncrement());
+                }
+
+                Attributes attrs = readAttributes(cmd, buffer, nameIndex);
                 if (log.isTraceEnabled()) {
                     log.trace("checkDirResponse({})[id={}][{}] ({})[{}]: {}",
                               channel, id, i, name, longName, attrs);
@@ -984,7 +1006,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_REALPATH, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_REALPATH, buffer, path, 0);
         return checkOneName(SftpConstants.SSH_FXP_REALPATH, buffer);
     }
 
@@ -995,7 +1017,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_STAT, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_STAT, buffer, path, 0);
 
         int version = getVersion();
         if (version >= SftpConstants.SFTP_V4) {
@@ -1012,7 +1034,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_LSTAT, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_LSTAT, buffer, path, 0);
 
         int version = getVersion();
         if (version >= SftpConstants.SFTP_V4) {
@@ -1051,7 +1073,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer();
-        buffer = putReferencedName(SftpConstants.SSH_FXP_SETSTAT, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_SETSTAT, buffer, path, 0);
         buffer = writeAttributes(SftpConstants.SSH_FXP_SETSTAT, buffer, attributes);
         checkCommandStatus(SftpConstants.SSH_FXP_SETSTAT, buffer);
     }
@@ -1079,7 +1101,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         }
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE /* some extra fields */, false);
-        buffer = putReferencedName(SftpConstants.SSH_FXP_READLINK, buffer, path);
+        buffer = putReferencedName(SftpConstants.SSH_FXP_READLINK, buffer, path, 0);
         return checkOneName(SftpConstants.SSH_FXP_READLINK, buffer);
     }
 
@@ -1099,13 +1121,13 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
             if (!symbolic) {
                 throw new UnsupportedOperationException("Hard links are not supported in sftp v" + version);
             }
-            buffer = putReferencedName(SftpConstants.SSH_FXP_SYMLINK, buffer, targetPath);
-            buffer = putReferencedName(SftpConstants.SSH_FXP_SYMLINK, buffer, linkPath);
+            buffer = putReferencedName(SftpConstants.SSH_FXP_SYMLINK, buffer, targetPath, 0);
+            buffer = putReferencedName(SftpConstants.SSH_FXP_SYMLINK, buffer, linkPath, 1);
 
             checkCommandStatus(SftpConstants.SSH_FXP_SYMLINK, buffer);
         } else {
-            buffer = putReferencedName(SftpConstants.SSH_FXP_SYMLINK, buffer, targetPath);
-            buffer = putReferencedName(SftpConstants.SSH_FXP_SYMLINK, buffer, linkPath);
+            buffer = putReferencedName(SftpConstants.SSH_FXP_SYMLINK, buffer, targetPath, 0);
+            buffer = putReferencedName(SftpConstants.SSH_FXP_SYMLINK, buffer, linkPath, 1);
             buffer.putBoolean(symbolic);
 
             checkCommandStatus(SftpConstants.SSH_FXP_LINK, buffer);


[2/2] mina-sshd git commit: Using Spring integration BOM instead of separate artifacts depedencies

Posted by lg...@apache.org.
Using Spring integration BOM instead of separate artifacts depedencies


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/8a570b2a
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/8a570b2a
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/8a570b2a

Branch: refs/heads/master
Commit: 8a570b2a599a0b5f6ad63056983bbce3a83e1a88
Parents: 1bddd2a
Author: Goldstein Lyor <ly...@c-b4.com>
Authored: Thu Jan 4 12:00:20 2018 +0200
Committer: Goldstein Lyor <ly...@c-b4.com>
Committed: Thu Jan 4 12:00:20 2018 +0200

----------------------------------------------------------------------
 sshd-spring-sftp/pom.xml | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/8a570b2a/sshd-spring-sftp/pom.xml
----------------------------------------------------------------------
diff --git a/sshd-spring-sftp/pom.xml b/sshd-spring-sftp/pom.xml
index 368307c..e883667 100644
--- a/sshd-spring-sftp/pom.xml
+++ b/sshd-spring-sftp/pom.xml
@@ -41,8 +41,10 @@
         <dependencies>
             <dependency>
                 <groupId>org.springframework.integration</groupId>
-                <artifactId>spring-integration-stream</artifactId>
+                <artifactId>spring-integration-bom</artifactId>
                 <version>${spring.integration.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
             </dependency>
         </dependencies>
     </dependencyManagement>
@@ -63,19 +65,16 @@
         <dependency>
             <groupId>org.springframework.integration</groupId>
             <artifactId>spring-integration-core</artifactId>
-            <version>${spring.integration.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.integration</groupId>
             <artifactId>spring-integration-file</artifactId>
-            <version>${spring.integration.version}</version>
         </dependency>
 
             <!-- Test dependencies -->
         <dependency>
             <groupId>org.springframework.integration</groupId>
             <artifactId>spring-integration-sftp</artifactId>
-            <version>${spring.integration.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>