You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by gn...@apache.org on 2014/12/01 18:43:15 UTC

[1/3] mina-sshd git commit: Display the nlink attribute correctly in sftp long file names

Repository: mina-sshd
Updated Branches:
  refs/heads/master e3e808cb1 -> 1a7b0ed00


Display the nlink attribute correctly in sftp long file 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/9355e69b
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/9355e69b
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/9355e69b

Branch: refs/heads/master
Commit: 9355e69b87dc5d06850fd1a36e4d0ee8d34bbbe9
Parents: e3e808c
Author: Guillaume Nodet <gn...@apache.org>
Authored: Wed Nov 19 23:12:26 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Wed Nov 19 23:12:26 2014 +0100

----------------------------------------------------------------------
 .../src/main/java/org/apache/sshd/common/file/SshFile.java      | 3 ++-
 .../org/apache/sshd/common/file/nativefs/NativeSshFileNio.java  | 3 +++
 .../main/java/org/apache/sshd/server/sftp/SftpSubsystem.java    | 5 +++--
 3 files changed, 8 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9355e69b/sshd-core/src/main/java/org/apache/sshd/common/file/SshFile.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/file/SshFile.java b/sshd-core/src/main/java/org/apache/sshd/common/file/SshFile.java
index df14bb6..a7a2372 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/file/SshFile.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/file/SshFile.java
@@ -48,7 +48,8 @@ public interface SshFile {
         Permissions,        // EnumSet<Permission>
         CreationTime,       // long
         LastModifiedTime,   // long
-        LastAccessTime      // long
+        LastAccessTime,     // long
+        NLink               // int
     }
 
     //

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9355e69b/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java b/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java
index 9e67c72..564f7e9 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java
@@ -95,6 +95,9 @@ public class NativeSshFileNio extends NativeSshFile {
         } else {
             map.put(Attribute.Group, userName);
         }
+        if (a.containsKey("nlink")) {
+            map.put(Attribute.NLink, a.get("nlink"));
+        }
         map.put(Attribute.IsDirectory, a.get("isDirectory"));
         map.put(Attribute.IsRegularFile, a.get("isRegularFile"));
         map.put(Attribute.IsSymbolicLink, a.get("isSymbolicLink"));

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9355e69b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
index fbc27cd..d19246b 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
@@ -949,8 +949,9 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste
         sb.append((perms & S_IROTH) != 0 ? "r" : "-");
         sb.append((perms & S_IWOTH) != 0 ? "w" : "-");
         sb.append((perms & S_IXOTH) != 0 ? "x" : "-");
-        sb.append(" ");
-        sb.append("  1");
+        sb.append("  ");
+        sb.append(attributes.containsKey(SshFile.Attribute.NLink)
+                ? attributes.get(SshFile.Attribute.NLink) : "1");
         sb.append(" ");
         sb.append(username);
         sb.append(" ");


[2/3] mina-sshd git commit: [sftp] Fix exceptions while listing directories with broken links

Posted by gn...@apache.org.
[sftp] Fix exceptions while listing directories with broken links

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

Branch: refs/heads/master
Commit: 36b224f58192b3cfc2cc112f473661f660931a6b
Parents: 9355e69
Author: Guillaume Nodet <gn...@apache.org>
Authored: Wed Nov 19 23:16:05 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Wed Nov 19 23:16:05 2014 +0100

----------------------------------------------------------------------
 .../org/apache/sshd/common/file/nativefs/NativeSshFileNio.java  | 5 +++++
 .../main/java/org/apache/sshd/server/sftp/SftpSubsystem.java    | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/36b224f5/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java b/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java
index 564f7e9..9753ed8 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeSshFileNio.java
@@ -53,6 +53,11 @@ import org.apache.sshd.common.file.SshFile;
  */
 public class NativeSshFileNio extends NativeSshFile {
 
+    @Override
+    public boolean doesExist() {
+        return Files.exists(file.toPath(), LinkOption.NOFOLLOW_LINKS);
+    }
+
     /**
      * Constructor, internal do not use directly.
      * @param nativeFileSystemView

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/36b224f5/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
index d19246b..94de3eb 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
@@ -902,7 +902,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste
     private String getLongName(SshFile f, boolean sendAttrs) throws IOException {
         Map<SshFile.Attribute, Object> attributes;
         if (sendAttrs) {
-            attributes = f.getAttributes(true);
+            attributes = f.getAttributes(false);
         } else {
             attributes = new HashMap<SshFile.Attribute, Object>();
             attributes.put(SshFile.Attribute.Owner, "owner");


[3/3] mina-sshd git commit: [SSHD-374] Nio2Acceptor never unbinding

Posted by gn...@apache.org.
[SSHD-374] Nio2Acceptor never unbinding

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

Branch: refs/heads/master
Commit: 1a7b0ed00d390ecdab239ccc394d151de6050983
Parents: 36b224f
Author: Guillaume Nodet <gn...@apache.org>
Authored: Mon Dec 1 17:59:40 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Mon Dec 1 17:59:40 2014 +0100

----------------------------------------------------------------------
 .../common/forward/DefaultTcpipForwarder.java   | 12 +----------
 .../sshd/common/io/nio2/Nio2Acceptor.java       | 22 ++++++--------------
 .../org/apache/sshd/PortForwardingTest.java     | 20 +++++++++++++++++-
 3 files changed, 26 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/1a7b0ed0/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultTcpipForwarder.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultTcpipForwarder.java b/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultTcpipForwarder.java
index b1b340e..daede16 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultTcpipForwarder.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultTcpipForwarder.java
@@ -92,9 +92,6 @@ public class DefaultTcpipForwarder extends CloseableUtils.AbstractInnerCloseable
     public synchronized void stopLocalPortForwarding(SshdSocketAddress local) throws IOException {
         if (localToRemote.remove(local.getPort()) != null && acceptor != null) {
             acceptor.unbind(local.toInetSocketAddress());
-            if (acceptor.getBoundAddresses().isEmpty()) {
-                close();
-            }
         }
     }
 
@@ -149,9 +146,6 @@ public class DefaultTcpipForwarder extends CloseableUtils.AbstractInnerCloseable
         if (obj != null) {
             obj.close(true);
             acceptor.unbind(local.toInetSocketAddress());
-            if (acceptor.getBoundAddresses().isEmpty()) {
-                close();
-            }
         }
     }
 
@@ -178,10 +172,6 @@ public class DefaultTcpipForwarder extends CloseableUtils.AbstractInnerCloseable
     public synchronized void localPortForwardingCancelled(SshdSocketAddress local) throws IOException {
         if (localForwards.remove(local) && acceptor != null) {
             acceptor.unbind(local.toInetSocketAddress());
-            if (acceptor.getBoundAddresses().isEmpty()) {
-                acceptor.close(true);
-                acceptor = null;
-            }
         }
     }
 
@@ -214,7 +204,7 @@ public class DefaultTcpipForwarder extends CloseableUtils.AbstractInnerCloseable
                 throw new IOException("Multiple local addresses have been bound for " + address);
             }
             InetSocketAddress result = (InetSocketAddress) after.iterator().next();
-            return new SshdSocketAddress(address.getHostName(), result.getPort());
+            return new SshdSocketAddress(result.getHostName(), result.getPort());
         } catch (IOException bindErr) {
             if (acceptor.getBoundAddresses().isEmpty()) {
                 close();

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/1a7b0ed0/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
index 11ea50b..f9fab11 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
@@ -41,13 +41,11 @@ import org.apache.sshd.common.io.IoHandler;
 public class Nio2Acceptor extends Nio2Service implements IoAcceptor {
 
     private final Map<SocketAddress, AsynchronousServerSocketChannel> channels;
-    private final Map<SocketAddress, AsynchronousServerSocketChannel> unbound;
     private int backlog = 50;
 
     public Nio2Acceptor(FactoryManager manager, IoHandler handler, AsynchronousChannelGroup group) {
         super(manager, handler, group);
         channels = new ConcurrentHashMap<SocketAddress, AsynchronousServerSocketChannel>();
-        unbound = new ConcurrentHashMap<SocketAddress, AsynchronousServerSocketChannel>();
     }
 
     public void bind(Collection<? extends SocketAddress> addresses) throws IOException {
@@ -75,7 +73,11 @@ public class Nio2Acceptor extends Nio2Service implements IoAcceptor {
         for (SocketAddress address : addresses) {
             AsynchronousServerSocketChannel channel = channels.remove(address);
             if (channel != null) {
-                unbound.put(address, channel);
+                try {
+                    channel.close();
+                } catch (IOException e) {
+                    log.warn("Error unbinding socket", e);
+                }
             }
         }
     }
@@ -113,12 +115,6 @@ public class Nio2Acceptor extends Nio2Service implements IoAcceptor {
         protected void onCompleted(AsynchronousSocketChannel result, SocketAddress address) {
             // Verify that the address has not been unbound
             if (!channels.containsKey(address)) {
-                try {
-                    result.close();
-                } catch (IOException e) {
-                    logger.debug("Ignoring error closing accepted connection on unbound socket", e);
-                }
-                acceptorStopped(address);
                 return;
             }
             try {
@@ -134,15 +130,9 @@ public class Nio2Acceptor extends Nio2Service implements IoAcceptor {
             }
         }
         protected void onFailed(final Throwable exc, final SocketAddress address) {
-            if (!channels.containsKey(address)) {
-                acceptorStopped(address);
-            } else if (!disposing.get()) {
+            if (channels.containsKey(address) && !disposing.get()) {
                 logger.warn("Caught exception while accepting incoming connection", exc);
             }
         }
-        protected void acceptorStopped(SocketAddress address) {
-            // TODO: check remaining sessions on that address
-            // TODO: and eventually close the server socket
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/1a7b0ed0/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java b/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
index c21e002..4f8be1c 100644
--- a/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
@@ -226,7 +226,7 @@ public class PortForwardingTest extends BaseTest {
     public void testLocalForwardingNative() throws Exception {
         ClientSession session = createNativeSession();
 
-        SshdSocketAddress local = new SshdSocketAddress("", getFreePort());
+        SshdSocketAddress local = new SshdSocketAddress("", 0);
         SshdSocketAddress remote = new SshdSocketAddress("localhost", echoPort);
 
         SshdSocketAddress bound = session.startLocalPortForwarding(local, remote);
@@ -245,6 +245,24 @@ public class PortForwardingTest extends BaseTest {
     }
 
     @Test
+    public void testLocalForwardingNativeReuse() throws Exception {
+        ClientSession session = createNativeSession();
+
+        int port = getFreePort();
+
+        SshdSocketAddress local = new SshdSocketAddress("", port);
+        SshdSocketAddress remote = new SshdSocketAddress("localhost", echoPort);
+
+        SshdSocketAddress bound = session.startLocalPortForwarding(local, remote);
+        session.stopLocalPortForwarding(bound);
+
+        SshdSocketAddress bound2 = session.startLocalPortForwarding(local, remote);
+        session.stopLocalPortForwarding(bound2);
+
+        session.close(false).await();
+    }
+
+    @Test
     public void testLocalForwardingNativeBigPayload() throws Exception {
         ClientSession session = createNativeSession();