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();