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 2018/04/16 11:48:17 UTC
[30/30] mina-sshd git commit: [SSHD-815] Extract SFTP in its own
module
[SSHD-815] Extract SFTP in its own module
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/251db9b9
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/251db9b9
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/251db9b9
Branch: refs/heads/master
Commit: 251db9b9dccfc4b9091e69982928d308fd09c04a
Parents: 19be905
Author: Guillaume Nodet <gn...@apache.org>
Authored: Fri Apr 13 11:13:07 2018 +0200
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Mon Apr 16 13:46:34 2018 +0200
----------------------------------------------------------------------
README.md | 149 +-
assembly/pom.xml | 5 +
pom.xml | 1 +
sshd-contrib/pom.xml | 5 +
...impleAccessControlSftpEventListenerTest.java | 5 +-
.../sshd/client/ClientFactoryManager.java | 2 -
.../java/org/apache/sshd/client/SshClient.java | 13 -
.../client/session/AbstractClientSession.java | 27 -
.../sshd/client/session/ClientSession.java | 4 +-
.../client/simple/AbstractSimpleClient.java | 100 -
.../apache/sshd/client/simple/SimpleClient.java | 1 -
.../sshd/client/simple/SimpleSftpClient.java | 179 --
.../client/subsystem/sftp/RawSftpClient.java | 44 -
.../sftp/SftpAclFileAttributeView.java | 67 -
.../sshd/client/subsystem/sftp/SftpClient.java | 1038 -------
.../subsystem/sftp/SftpClientCreator.java | 85 -
.../subsystem/sftp/SftpClientFactory.java | 51 -
.../sftp/SftpClientFactoryManager.java | 37 -
.../sshd/client/subsystem/sftp/SftpCommand.java | 920 -------
.../subsystem/sftp/SftpDirEntryIterator.java | 194 --
.../subsystem/sftp/SftpDirectoryStream.java | 65 -
.../client/subsystem/sftp/SftpFileStore.java | 105 -
.../client/subsystem/sftp/SftpFileSystem.java | 596 ----
.../subsystem/sftp/SftpFileSystemChannel.java | 37 -
.../subsystem/sftp/SftpFileSystemProvider.java | 1249 ---------
.../sftp/SftpInputStreamWithChannel.java | 179 --
.../subsystem/sftp/SftpIterableDirEntry.java | 72 -
.../sftp/SftpOutputStreamWithChannel.java | 124 -
.../sshd/client/subsystem/sftp/SftpPath.java | 43 -
.../client/subsystem/sftp/SftpPathIterator.java | 82 -
.../sftp/SftpPosixFileAttributeView.java | 94 -
.../subsystem/sftp/SftpPosixFileAttributes.java | 113 -
.../subsystem/sftp/SftpRemotePathChannel.java | 412 ---
.../subsystem/sftp/SftpVersionSelector.java | 127 -
.../subsystem/sftp/StfpIterableDirHandle.java | 59 -
.../extensions/BuiltinSftpClientExtensions.java | 162 --
.../extensions/CheckFileHandleExtension.java | 45 -
.../sftp/extensions/CheckFileNameExtension.java | 43 -
.../sftp/extensions/CopyDataExtension.java | 34 -
.../sftp/extensions/CopyFileExtension.java | 36 -
.../sftp/extensions/MD5FileExtension.java | 40 -
.../sftp/extensions/MD5HandleExtension.java | 43 -
.../sftp/extensions/SftpClientExtension.java | 34 -
.../extensions/SftpClientExtensionFactory.java | 39 -
.../extensions/SpaceAvailableExtension.java | 34 -
.../helpers/AbstractCheckFileExtension.java | 76 -
.../helpers/AbstractMD5HashExtension.java | 75 -
.../helpers/AbstractSftpClientExtension.java | 206 --
.../helpers/CheckFileHandleExtensionImpl.java | 49 -
.../helpers/CheckFileNameExtensionImpl.java | 48 -
.../helpers/CopyDataExtensionImpl.java | 58 -
.../helpers/CopyFileExtensionImpl.java | 53 -
.../helpers/MD5FileExtensionImpl.java | 45 -
.../helpers/MD5HandleExtensionImpl.java | 46 -
.../helpers/SpaceAvailableExtensionImpl.java | 56 -
.../openssh/OpenSSHFsyncExtension.java | 35 -
.../openssh/OpenSSHStatExtensionInfo.java | 150 -
.../openssh/OpenSSHStatHandleExtension.java | 34 -
.../openssh/OpenSSHStatPathExtension.java | 34 -
.../AbstractOpenSSHStatCommandExtension.java | 57 -
.../helpers/OpenSSHFsyncExtensionImpl.java | 49 -
.../helpers/OpenSSHStatHandleExtensionImpl.java | 44 -
.../helpers/OpenSSHStatPathExtensionImpl.java | 43 -
.../subsystem/sftp/impl/AbstractSftpClient.java | 1188 --------
.../impl/AbstractSftpFileAttributeView.java | 92 -
.../sftp/impl/DefaultCloseableHandle.java | 66 -
.../subsystem/sftp/impl/DefaultSftpClient.java | 464 ----
.../sftp/impl/DefaultSftpClientFactory.java | 81 -
.../common/subsystem/sftp/SftpConstants.java | 330 ---
.../common/subsystem/sftp/SftpException.java | 43 -
.../sshd/common/subsystem/sftp/SftpHelper.java | 1114 --------
.../sftp/SftpUniversalOwnerAndGroup.java | 67 -
.../sftp/extensions/AbstractParser.java | 39 -
.../sftp/extensions/AclSupportedParser.java | 208 --
.../sftp/extensions/ExtensionParser.java | 42 -
.../sftp/extensions/NewlineParser.java | 115 -
.../subsystem/sftp/extensions/ParserUtils.java | 195 --
.../extensions/SpaceAvailableExtensionInfo.java | 125 -
.../sftp/extensions/Supported2Parser.java | 93 -
.../sftp/extensions/SupportedParser.java | 82 -
.../sftp/extensions/VendorIdParser.java | 71 -
.../sftp/extensions/VersionsParser.java | 83 -
.../openssh/AbstractOpenSSHExtensionParser.java | 113 -
.../openssh/FstatVfsExtensionParser.java | 32 -
.../openssh/FsyncExtensionParser.java | 33 -
.../openssh/HardLinkExtensionParser.java | 33 -
.../openssh/PosixRenameExtensionParser.java | 33 -
.../openssh/StatVfsExtensionParser.java | 33 -
.../java/org/apache/sshd/server/SshServer.java | 2 -
.../sftp/AbstractSftpEventListenerAdapter.java | 258 --
.../sftp/AbstractSftpEventListenerManager.java | 60 -
.../sftp/AbstractSftpSubsystemHelper.java | 2580 ------------------
.../subsystem/sftp/DefaultGroupPrincipal.java | 32 -
.../subsystem/sftp/DefaultUserPrincipal.java | 32 -
.../server/subsystem/sftp/DirectoryHandle.java | 109 -
.../sshd/server/subsystem/sftp/FileHandle.java | 270 --
.../sshd/server/subsystem/sftp/Handle.java | 79 -
.../subsystem/sftp/InvalidHandleException.java | 32 -
.../server/subsystem/sftp/PrincipalBase.java | 65 -
.../sftp/SftpErrorStatusDataHandler.java | 83 -
.../subsystem/sftp/SftpEventListener.java | 396 ---
.../sftp/SftpEventListenerManager.java | 48 -
.../subsystem/sftp/SftpFileSystemAccessor.java | 155 --
.../sftp/SftpFileSystemAccessorManager.java | 29 -
.../server/subsystem/sftp/SftpSubsystem.java | 1069 --------
.../sftp/SftpSubsystemEnvironment.java | 67 -
.../subsystem/sftp/SftpSubsystemFactory.java | 173 --
.../server/subsystem/sftp/UnixDateFormat.java | 108 -
.../sftp/UnsupportedAttributePolicy.java | 36 -
.../java/org/apache/sshd/KeyReExchangeTest.java | 53 +-
.../java/org/apache/sshd/client/ClientTest.java | 50 +-
.../client/simple/SimpleSftpClientTest.java | 127 -
.../sftp/AbstractSftpClientTestSupport.java | 97 -
.../sftp/DefaultCloseableHandleTest.java | 87 -
.../client/subsystem/sftp/SftpCommandMain.java | 36 -
.../subsystem/sftp/SftpFileSystemTest.java | 490 ----
.../sshd/client/subsystem/sftp/SftpTest.java | 1500 ----------
.../subsystem/sftp/SftpVersionSelectorTest.java | 134 -
.../client/subsystem/sftp/SftpVersionsTest.java | 510 ----
.../BuiltinSftpClientExtensionsTest.java | 84 -
.../helpers/AbstractCheckFileExtensionTest.java | 228 --
.../helpers/AbstractMD5HashExtensionTest.java | 177 --
.../helpers/CopyDataExtensionImplTest.java | 192 --
.../helpers/CopyFileExtensionImplTest.java | 96 -
.../SpaceAvailableExtensionImplTest.java | 101 -
.../openssh/helpers/OpenSSHExtensionsTest.java | 207 --
.../common/channel/TestChannelListener.java | 153 --
.../subsystem/sftp/SftpConstantsTest.java | 75 -
.../sftp/SftpUniversalOwnerAndGroupTest.java | 70 -
.../java/org/apache/sshd/server/ServerTest.java | 2 +-
.../sftp/SftpSubsystemFactoryTest.java | 101 -
.../server/subsystem/sftp/SshFsMounter.java | 327 ---
.../sshd/util/test/TestChannelListener.java | 155 ++
sshd-git/pom.xml | 6 +
sshd-mina/pom.xml | 69 +-
sshd-sftp/pom.xml | 103 +
.../sshd/client/simple/SimpleSftpClient.java | 179 ++
.../client/simple/SimpleSftpClientImpl.java | 170 ++
.../client/subsystem/sftp/RawSftpClient.java | 44 +
.../sftp/SftpAclFileAttributeView.java | 67 +
.../sshd/client/subsystem/sftp/SftpClient.java | 1038 +++++++
.../subsystem/sftp/SftpClientFactory.java | 100 +
.../sshd/client/subsystem/sftp/SftpCommand.java | 920 +++++++
.../subsystem/sftp/SftpDirEntryIterator.java | 194 ++
.../subsystem/sftp/SftpDirectoryStream.java | 65 +
.../client/subsystem/sftp/SftpFileStore.java | 105 +
.../client/subsystem/sftp/SftpFileSystem.java | 598 ++++
.../subsystem/sftp/SftpFileSystemChannel.java | 37 +
.../subsystem/sftp/SftpFileSystemProvider.java | 1255 +++++++++
.../sftp/SftpInputStreamWithChannel.java | 179 ++
.../subsystem/sftp/SftpIterableDirEntry.java | 72 +
.../sftp/SftpOutputStreamWithChannel.java | 124 +
.../sshd/client/subsystem/sftp/SftpPath.java | 43 +
.../client/subsystem/sftp/SftpPathIterator.java | 82 +
.../sftp/SftpPosixFileAttributeView.java | 94 +
.../subsystem/sftp/SftpPosixFileAttributes.java | 113 +
.../subsystem/sftp/SftpRemotePathChannel.java | 412 +++
.../subsystem/sftp/SftpVersionSelector.java | 126 +
.../subsystem/sftp/StfpIterableDirHandle.java | 59 +
.../extensions/BuiltinSftpClientExtensions.java | 162 ++
.../extensions/CheckFileHandleExtension.java | 45 +
.../sftp/extensions/CheckFileNameExtension.java | 43 +
.../sftp/extensions/CopyDataExtension.java | 34 +
.../sftp/extensions/CopyFileExtension.java | 36 +
.../sftp/extensions/MD5FileExtension.java | 40 +
.../sftp/extensions/MD5HandleExtension.java | 43 +
.../sftp/extensions/SftpClientExtension.java | 34 +
.../extensions/SftpClientExtensionFactory.java | 39 +
.../extensions/SpaceAvailableExtension.java | 34 +
.../helpers/AbstractCheckFileExtension.java | 76 +
.../helpers/AbstractMD5HashExtension.java | 75 +
.../helpers/AbstractSftpClientExtension.java | 206 ++
.../helpers/CheckFileHandleExtensionImpl.java | 49 +
.../helpers/CheckFileNameExtensionImpl.java | 48 +
.../helpers/CopyDataExtensionImpl.java | 58 +
.../helpers/CopyFileExtensionImpl.java | 53 +
.../helpers/MD5FileExtensionImpl.java | 45 +
.../helpers/MD5HandleExtensionImpl.java | 46 +
.../helpers/SpaceAvailableExtensionImpl.java | 56 +
.../openssh/OpenSSHFsyncExtension.java | 35 +
.../openssh/OpenSSHStatExtensionInfo.java | 150 +
.../openssh/OpenSSHStatHandleExtension.java | 34 +
.../openssh/OpenSSHStatPathExtension.java | 34 +
.../AbstractOpenSSHStatCommandExtension.java | 57 +
.../helpers/OpenSSHFsyncExtensionImpl.java | 49 +
.../helpers/OpenSSHStatHandleExtensionImpl.java | 44 +
.../helpers/OpenSSHStatPathExtensionImpl.java | 43 +
.../subsystem/sftp/impl/AbstractSftpClient.java | 1188 ++++++++
.../impl/AbstractSftpFileAttributeView.java | 92 +
.../sftp/impl/DefaultCloseableHandle.java | 66 +
.../subsystem/sftp/impl/DefaultSftpClient.java | 464 ++++
.../sftp/impl/DefaultSftpClientFactory.java | 81 +
.../common/subsystem/sftp/SftpConstants.java | 330 +++
.../common/subsystem/sftp/SftpException.java | 43 +
.../sshd/common/subsystem/sftp/SftpHelper.java | 1114 ++++++++
.../sftp/SftpUniversalOwnerAndGroup.java | 67 +
.../sftp/extensions/AbstractParser.java | 39 +
.../sftp/extensions/AclSupportedParser.java | 208 ++
.../sftp/extensions/ExtensionParser.java | 42 +
.../sftp/extensions/NewlineParser.java | 115 +
.../subsystem/sftp/extensions/ParserUtils.java | 195 ++
.../extensions/SpaceAvailableExtensionInfo.java | 125 +
.../sftp/extensions/Supported2Parser.java | 93 +
.../sftp/extensions/SupportedParser.java | 82 +
.../sftp/extensions/VendorIdParser.java | 71 +
.../sftp/extensions/VersionsParser.java | 83 +
.../openssh/AbstractOpenSSHExtensionParser.java | 113 +
.../openssh/FstatVfsExtensionParser.java | 32 +
.../openssh/FsyncExtensionParser.java | 33 +
.../openssh/HardLinkExtensionParser.java | 33 +
.../openssh/PosixRenameExtensionParser.java | 33 +
.../openssh/StatVfsExtensionParser.java | 33 +
.../sftp/AbstractSftpEventListenerAdapter.java | 258 ++
.../sftp/AbstractSftpEventListenerManager.java | 60 +
.../sftp/AbstractSftpSubsystemHelper.java | 2580 ++++++++++++++++++
.../subsystem/sftp/DefaultGroupPrincipal.java | 32 +
.../subsystem/sftp/DefaultUserPrincipal.java | 32 +
.../server/subsystem/sftp/DirectoryHandle.java | 109 +
.../sshd/server/subsystem/sftp/FileHandle.java | 270 ++
.../sshd/server/subsystem/sftp/Handle.java | 79 +
.../subsystem/sftp/InvalidHandleException.java | 32 +
.../server/subsystem/sftp/PrincipalBase.java | 65 +
.../sftp/SftpErrorStatusDataHandler.java | 83 +
.../subsystem/sftp/SftpEventListener.java | 396 +++
.../sftp/SftpEventListenerManager.java | 48 +
.../subsystem/sftp/SftpFileSystemAccessor.java | 155 ++
.../sftp/SftpFileSystemAccessorManager.java | 29 +
.../server/subsystem/sftp/SftpSubsystem.java | 1069 ++++++++
.../sftp/SftpSubsystemEnvironment.java | 67 +
.../subsystem/sftp/SftpSubsystemFactory.java | 173 ++
.../server/subsystem/sftp/TreeLockExecutor.java | 75 +
.../server/subsystem/sftp/UnixDateFormat.java | 108 +
.../sftp/UnsupportedAttributePolicy.java | 36 +
.../java/org/apache/sshd/client/ClientTest.java | 426 +++
.../simple/BaseSimpleClientTestSupport.java | 70 +
.../client/simple/SimpleSftpClientTest.java | 129 +
.../sftp/AbstractSftpClientTestSupport.java | 106 +
.../sftp/DefaultCloseableHandleTest.java | 87 +
.../client/subsystem/sftp/SftpCommandMain.java | 36 +
.../subsystem/sftp/SftpFileSystemTest.java | 494 ++++
.../sshd/client/subsystem/sftp/SftpTest.java | 1500 ++++++++++
.../subsystem/sftp/SftpVersionSelectorTest.java | 134 +
.../client/subsystem/sftp/SftpVersionsTest.java | 510 ++++
.../BuiltinSftpClientExtensionsTest.java | 84 +
.../helpers/AbstractCheckFileExtensionTest.java | 228 ++
.../helpers/AbstractMD5HashExtensionTest.java | 177 ++
.../helpers/CopyDataExtensionImplTest.java | 192 ++
.../helpers/CopyFileExtensionImplTest.java | 96 +
.../SpaceAvailableExtensionImplTest.java | 101 +
.../openssh/helpers/OpenSSHExtensionsTest.java | 207 ++
.../subsystem/sftp/SftpConstantsTest.java | 75 +
.../sftp/SftpUniversalOwnerAndGroupTest.java | 70 +
.../sftp/SftpSubsystemFactoryTest.java | 101 +
.../server/subsystem/sftp/SshFsMounter.java | 327 +++
sshd-spring-sftp/pom.xml | 5 +
.../sftp/ApacheSshdSftpSessionFactory.java | 3 +-
256 files changed, 23866 insertions(+), 23207 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 8d0c018..52c5180 100644
--- a/README.md
+++ b/README.md
@@ -60,7 +60,7 @@ Optional dependency to enable choosing between NIO asynchronous sockets (the def
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<!-- see SSHD POM for latest tested known version of MINA core -->
- <version>2.0.6</version>
+ <version>2.0.17</version>
</dependency>
```
@@ -382,7 +382,6 @@ The usage of a `FileSystemFactory` is not limited though to the server only - th
it in order to retrieve the *local* path for upload/download-ing files/folders. This means that the client side can also
be tailored to present different views for different clients
-
## `ExecutorService`-s
The framework requires from time to time spawning some threads in order to function correctly - e.g., commands, SFTP subsystem,
@@ -520,6 +519,41 @@ due to SCP protocol limitations one cannot change the **size** of the input/outp
## SFTP
+Both client-side and server-side SFTP are supported. Starting from SSHD 1.8.0, the SFTP related code is located in the `sshd-sftp`, so you need to add this additional dependency to your maven project:
+
+```xml
+
+ <dependency>
+ <groupId>org.apache.sshd</groupId>
+ <artifactId>sshd-sftp</artifactId>
+ <version>...same as sshd-core...</version>
+ </dependency>
+
+```
+
+### Server-side SFTP
+
+On the server side, the following code needs to be added:
+
+```java
+
+ SftpSubsystemFactory factory = new SftpSubsystemFactory.Builder()
+ .build();
+ server.setSubsystemFactories(Collections.singletonList(factory));
+
+```
+
+### Client-side SFTP
+
+```java
+
+ SftpClient client = SftpClientFactory.instance().createSftpClient(session);
+
+```
+
+### `SftpEventListener`
+
+See above...
In addition to the `SftpEventListener` there are a few more SFTP-related special interfaces and modules.
@@ -545,7 +579,7 @@ range.
session.addPasswordIdentity(password);
session.auth.verify(timeout);
- try (SftpClient sftp = session.createSftpClient(myVersionSelector)) {
+ try (SftpClient sftp = SftpClientFactory.instance().createSftpClient(session, myVersionSelector)) {
... do SFTP related stuff...
}
}
@@ -558,73 +592,30 @@ configuration key. For more advanced restrictions one needs to sub-class `SftpSu
`SftpSubsystemFactory` that uses the sub-classed code.
-### Registering a custom `SftpClientFactory`
+### Using a custom `SftpClientFactory`
The code creates `SftpClient`-s and `SftpFileSystem`-s using a default built-in `SftpClientFactory` instance (see
-`DefaultSftpClientFactory`). Users may choose to register a custom factory in order to provide their own
+`DefaultSftpClientFactory`). Users may choose to use a custom factory in order to provide their own
implementations - e.g., in order to override some default behavior. The custom factory may be registered either at
the client or session level - e.g.:
```java
SshClient client = ... setup client...
- client.setSftpClientFactory(new MySuperDuperSftpClientFactory());
try (ClientSession session = client.connect(user, host, port).verify(timeout).getSession()) {
// override the default factory with a special one - but only for this session
- session.setSftpClientFactory(new SpecialSessionSftpClientFactory());
+ session.setSftpClientFactory();
session.addPasswordIdentity(password);
session.auth.verify(timeout);
- try (SftpClient sftp = session.createSftpClient()) {
+ try (SftpClient sftp = new SpecialSessionSftpClientFactory().createSftpClient()) {
... instance created through SpecialSessionSftpClientFactory ...
}
}
```
-If no factory provided or factory set to _null_ then code reverts to using the default built-in one. **Note:** setting
-the factory to _null_ on the session level, simply delegates the creation to whatever factory is registered at the
-client level - default or custom.
-
-```java
-
- SshClient client = ... setup client...
- client.setSftpClientFactory(new MySuperDuperSftpClientFactory());
-
- try (ClientSession session = client.connect(user, host, port).verify(timeout).getSession()) {
- // override the default factory with a special one - but only for this session
- session.setSftpClientFactory(new SpecialSessionSftpClientFactory());
- session.addPasswordIdentity(password);
- session.auth.verify(timeout);
-
- try (SftpClient sftp = session.createSftpClient()) {
- ... instance created through SpecialSessionSftpClientFactory ...
- }
-
- // revert to one from client
- session.setSftpClientFactory(null);
-
- try (SftpClient sftp = session.createSftpClient()) {
- ... instance created through MySuperDuperSftpClientFactory ...
- }
-
- // remove client-level factory
- client.setSftpClientFactory(null);
-
- try (SftpClient sftp = session.createSftpClient()) {
- ... instance created through built-in DefaultSftpClientFactory ...
- }
-
- // re-instate session-level factory
- session.setSftpClientFactory(new SpecialSessionSftpClientFactory());
-
- try (SftpClient sftp = session.createSftpClient()) {
- ... instance created through SpecialSessionSftpClientFactory ...
- }
- }
-
-```
### Using `SftpFileSystemProvider` to create an `SftpFileSystem`
@@ -783,7 +774,7 @@ UTF-8 is used. **Note:** the value can be a charset name or a `java.nio.charset.
PropertyResolverUtils.updateProperty(session, SftpClient.NAME_DECODING_CHARSET, "ISO-8859-4");
session.authenticate(...);
- try (SftpClient sftp = session.createSftpClient()) {
+ try (SftpClient sftp = SftpClientFactory.instance().createSftpClient(session)) {
for (DirEntry entry : sftp.readDir(...some path...)) {
...handle entry assuming ISO-8859-4 (inherited from the session) encoded names...
}
@@ -799,58 +790,6 @@ UTF-8 is used. **Note:** the value can be a charset name or a `java.nio.charset.
```
-Another option is to register a custom `SftpClientFactory` and create a `DefaultSftpClient` that overrides `getReferencedName` method:
-
-```java
-
-public class MyCustomSftpClient extends DefaultSftpClient {
- public MyCustomSftpClient(ClientSession session) {
- super(session);
- }
-
- @Override
- protected String getReferencedName(int cmd, Buffer buf) {
- byte[] bytes = buf.getBytes();
- Charset cs = detectCharset(bytes);
- return new String(bytes, cs);
- }
-
- @Override
- protected <B extends Buffer> B putReferencedName(int cmd, B buf, String name) {
- Charset cs = detectCharset(name);
- buf.putString(name, cs);
- return buf;
- }
-}
-
-public class MyCustomSftpClientFactory extends DefaultSftpClientFactory {
- public MyCustomSftpClientFactory() {
- super();
- }
-
- protected DefaultSftpClient createDefaultSftpClient(ClientSession session, SftpVersionSelector selector) throws IOException {
- return MyCustomSftpClient(session);
- }
-}
-
- // Usage - register at client level and affect ALL SFTP interactions
- SshClient client = ... setup/obtain an instance...
- client.setSftpClientFactory(new MyCustomSftpClientFactory());
-
- // Usage - selective session registration
- SshClient client = ... setup/obtain an instance...
- try (ClientSession session = client.connect(...)) {
- if (...something special about the host/port/etc....) {
- // affect only SFTP interactions for this session
- session.setSftpClientFactory(new MyCustomSftpClientFactory());
- }
- }
-
-
-```
-
-### Supported SFTP extensions
-
Both client and server support several of the SFTP extensions specified in various drafts:
* `supported` - [DRAFT 05 - section 4.4](http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-05.tx)
@@ -887,7 +826,7 @@ On the client side, all the supported extensions are classes that implement `Sft
session.addPasswordIdentity(password);
session.auth().verify(timeout);
- try (SftpClient sftp = session.createSftpClient()) {
+ try (SftpClient sftp = SftpClientFactory.instance().createSftpClient(session)) {
Map<String, byte[]> extensions = sftp.getServerExtensions();
// Key=extension name, value=registered parser instance
Map<String, ?> data = ParserUtils.parse(extensions);
@@ -919,7 +858,7 @@ One can skip all the conditional code if a specific known extension is required:
session.addPasswordIdentity(password);
session.auth().verify(timeout);
- try (SftpClient sftp = session.createSftpClient()) {
+ try (SftpClient sftp = SftpClientFactory.instance().createSftpClient(session)) {
// Returns null if extension is not supported by remote server
SpaceAvailableExtension space = sftp.getExtension(SpaceAvailableExtension.class);
if (space != null) {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/assembly/pom.xml
----------------------------------------------------------------------
diff --git a/assembly/pom.xml b/assembly/pom.xml
index 97500ba..85eab19 100644
--- a/assembly/pom.xml
+++ b/assembly/pom.xml
@@ -42,6 +42,11 @@
<version>${project.version}</version>
</dependency>
<dependency>
+ <groupId>org.apache.sshd</groupId>
+ <artifactId>sshd-sftp</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 6dafdeb..ea73bb4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1004,6 +1004,7 @@
<modules>
<module>sshd-core</module>
+ <module>sshd-sftp</module>
<module>sshd-mina</module>
<module>sshd-ldap</module>
<module>sshd-git</module>
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-contrib/pom.xml
----------------------------------------------------------------------
diff --git a/sshd-contrib/pom.xml b/sshd-contrib/pom.xml
index 1e6430e..3f49df8 100644
--- a/sshd-contrib/pom.xml
+++ b/sshd-contrib/pom.xml
@@ -51,6 +51,11 @@
<artifactId>sshd-core</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.sshd</groupId>
+ <artifactId>sshd-sftp</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<!-- For ed25519 support -->
<dependency>
<groupId>net.i2p.crypto</groupId>
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-contrib/src/test/java/org/apache/sshd/server/subsystem/sftp/SimpleAccessControlSftpEventListenerTest.java
----------------------------------------------------------------------
diff --git a/sshd-contrib/src/test/java/org/apache/sshd/server/subsystem/sftp/SimpleAccessControlSftpEventListenerTest.java b/sshd-contrib/src/test/java/org/apache/sshd/server/subsystem/sftp/SimpleAccessControlSftpEventListenerTest.java
index 6f90d3d..ddbe162 100644
--- a/sshd-contrib/src/test/java/org/apache/sshd/server/subsystem/sftp/SimpleAccessControlSftpEventListenerTest.java
+++ b/sshd-contrib/src/test/java/org/apache/sshd/server/subsystem/sftp/SimpleAccessControlSftpEventListenerTest.java
@@ -30,6 +30,7 @@ import org.apache.sshd.client.session.ClientSession;
import org.apache.sshd.client.subsystem.sftp.SftpClient;
import org.apache.sshd.client.subsystem.sftp.SftpClient.CloseableHandle;
import org.apache.sshd.client.subsystem.sftp.SftpClient.OpenMode;
+import org.apache.sshd.client.subsystem.sftp.SftpClientFactory;
import org.apache.sshd.common.file.FileSystemFactory;
import org.apache.sshd.common.file.virtualfs.VirtualFileSystemFactory;
import org.apache.sshd.common.subsystem.sftp.SftpConstants;
@@ -101,7 +102,7 @@ public class SimpleAccessControlSftpEventListenerTest extends BaseTestSupport {
session.addPasswordIdentity(getCurrentTestName());
session.auth().verify(5L, TimeUnit.SECONDS);
- try (SftpClient sftp = session.createSftpClient()) {
+ try (SftpClient sftp = SftpClientFactory.instance().createSftpClient(session)) {
String file = Utils.resolveRelativeRemotePath(parentPath, testFile);
try (CloseableHandle handle = sftp.open(file, OpenMode.Read)) {
byte[] actual = new byte[data.length];
@@ -151,7 +152,7 @@ public class SimpleAccessControlSftpEventListenerTest extends BaseTestSupport {
session.addPasswordIdentity(getCurrentTestName());
session.auth().verify(5L, TimeUnit.SECONDS);
- try (SftpClient sftp = session.createSftpClient()) {
+ try (SftpClient sftp = SftpClientFactory.instance().createSftpClient(session)) {
String folder = Utils.resolveRelativeRemotePath(parentPath, targetPath);
for (SftpClient.DirEntry entry : sftp.readDir(folder)) {
assertNotNull("No entry", entry);
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/ClientFactoryManager.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/ClientFactoryManager.java b/sshd-core/src/main/java/org/apache/sshd/client/ClientFactoryManager.java
index 7627020..31b2a22 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/ClientFactoryManager.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/ClientFactoryManager.java
@@ -21,7 +21,6 @@ package org.apache.sshd.client;
import org.apache.sshd.client.config.hosts.HostConfigEntryResolver;
import org.apache.sshd.client.config.keys.ClientIdentityLoader;
import org.apache.sshd.client.session.ClientProxyConnectorHolder;
-import org.apache.sshd.client.subsystem.sftp.SftpClientFactoryManager;
import org.apache.sshd.common.FactoryManager;
import org.apache.sshd.common.config.keys.FilePasswordProvider;
import org.apache.sshd.common.scp.ScpFileOpenerHolder;
@@ -34,7 +33,6 @@ import org.apache.sshd.common.scp.ScpFileOpenerHolder;
*/
public interface ClientFactoryManager
extends FactoryManager,
- SftpClientFactoryManager,
ScpFileOpenerHolder,
ClientProxyConnectorHolder,
ClientAuthenticationManager {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java b/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java
index 7a185d1..0874b93 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java
@@ -87,8 +87,6 @@ import org.apache.sshd.client.session.ClientUserAuthServiceFactory;
import org.apache.sshd.client.session.SessionFactory;
import org.apache.sshd.client.simple.AbstractSimpleClientSessionCreator;
import org.apache.sshd.client.simple.SimpleClient;
-import org.apache.sshd.client.subsystem.sftp.SftpClientFactory;
-import org.apache.sshd.client.subsystem.sftp.impl.DefaultSftpClientFactory;
import org.apache.sshd.common.Closeable;
import org.apache.sshd.common.Factory;
import org.apache.sshd.common.FactoryManager;
@@ -214,7 +212,6 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa
private FilePasswordProvider filePasswordProvider;
private PasswordIdentityProvider passwordIdentityProvider;
private ScpFileOpener scpOpener;
- private SftpClientFactory sftpClientFactory;
private final List<Object> identities = new CopyOnWriteArrayList<>();
private final AuthenticationIdentitiesProvider identitiesProvider;
@@ -253,16 +250,6 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa
}
@Override
- public SftpClientFactory getSftpClientFactory() {
- return (sftpClientFactory == null) ? DefaultSftpClientFactory.INSTANCE : sftpClientFactory;
- }
-
- @Override
- public void setSftpClientFactory(SftpClientFactory sftpClientFactory) {
- this.sftpClientFactory = sftpClientFactory;
- }
-
- @Override
public ServerKeyVerifier getServerKeyVerifier() {
return serverKeyVerifier;
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java b/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java
index 6a1a15d..d57a799 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java
@@ -21,7 +21,6 @@ package org.apache.sshd.client.session;
import java.io.IOException;
import java.net.SocketAddress;
-import java.nio.file.FileSystem;
import java.security.KeyPair;
import java.security.PublicKey;
import java.util.EnumMap;
@@ -43,9 +42,6 @@ import org.apache.sshd.client.channel.ClientChannel;
import org.apache.sshd.client.keyverifier.ServerKeyVerifier;
import org.apache.sshd.client.scp.DefaultScpClient;
import org.apache.sshd.client.scp.ScpClient;
-import org.apache.sshd.client.subsystem.sftp.SftpClient;
-import org.apache.sshd.client.subsystem.sftp.SftpClientFactory;
-import org.apache.sshd.client.subsystem.sftp.SftpVersionSelector;
import org.apache.sshd.common.FactoryManager;
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.common.NamedResource;
@@ -90,7 +86,6 @@ public abstract class AbstractClientSession extends AbstractSession implements C
private ScpFileOpener scpOpener;
private SocketAddress connectAddress;
private ClientProxyConnector proxyConnector;
- private SftpClientFactory sftpClientFactory;
protected AbstractClientSession(ClientFactoryManager factoryManager, IoSession ioSession) {
super(false, factoryManager, ioSession);
@@ -167,16 +162,6 @@ public abstract class AbstractClientSession extends AbstractSession implements C
}
@Override
- public SftpClientFactory getSftpClientFactory() {
- return resolveEffectiveProvider(SftpClientFactory.class, sftpClientFactory, getFactoryManager().getSftpClientFactory());
- }
-
- @Override
- public void setSftpClientFactory(SftpClientFactory sftpClientFactory) {
- this.sftpClientFactory = sftpClientFactory;
- }
-
- @Override
public void addPasswordIdentity(String password) {
// DO NOT USE checkNotNullOrNotEmpty SINCE IT TRIMS THE RESULT
ValidateUtils.checkTrue((password != null) && (!password.isEmpty()), "No password provided");
@@ -341,18 +326,6 @@ public abstract class AbstractClientSession extends AbstractSession implements C
}
@Override
- public SftpClient createSftpClient(SftpVersionSelector selector) throws IOException {
- SftpClientFactory factory = getSftpClientFactory();
- return factory.createSftpClient(this, selector);
- }
-
- @Override
- public FileSystem createSftpFileSystem(SftpVersionSelector selector, int readBufferSize, int writeBufferSize) throws IOException {
- SftpClientFactory factory = getSftpClientFactory();
- return factory.createSftpFileSystem(this, selector, readBufferSize, writeBufferSize);
- }
-
- @Override
public SshdSocketAddress startLocalPortForwarding(SshdSocketAddress local, SshdSocketAddress remote) throws IOException {
ForwardingFilter filter = getForwardingFilter();
return filter.startLocalPortForwarding(local, remote);
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSession.java b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSession.java
index b807f17..96caf2e 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSession.java
@@ -45,8 +45,6 @@ import org.apache.sshd.client.future.AuthFuture;
import org.apache.sshd.client.scp.ScpClientCreator;
import org.apache.sshd.client.session.forward.DynamicPortForwardingTracker;
import org.apache.sshd.client.session.forward.ExplicitPortForwardingTracker;
-import org.apache.sshd.client.subsystem.sftp.SftpClientCreator;
-import org.apache.sshd.client.subsystem.sftp.SftpClientFactoryManager;
import org.apache.sshd.common.forward.PortForwardingManager;
import org.apache.sshd.common.future.KeyExchangeFuture;
import org.apache.sshd.common.session.Session;
@@ -83,7 +81,7 @@ import org.apache.sshd.common.util.net.SshdSocketAddress;
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
*/
public interface ClientSession
- extends Session, ScpClientCreator, SftpClientCreator, SftpClientFactoryManager,
+ extends Session, ScpClientCreator,
ClientProxyConnectorHolder, ClientAuthenticationManager,
PortForwardingManager {
enum ClientSessionEvent {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/simple/AbstractSimpleClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/simple/AbstractSimpleClient.java b/sshd-core/src/main/java/org/apache/sshd/client/simple/AbstractSimpleClient.java
index a5420c7..247be60 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/simple/AbstractSimpleClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/simple/AbstractSimpleClient.java
@@ -30,7 +30,6 @@ import java.util.Objects;
import org.apache.sshd.client.scp.CloseableScpClient;
import org.apache.sshd.client.scp.ScpClient;
import org.apache.sshd.client.session.ClientSession;
-import org.apache.sshd.client.subsystem.sftp.SftpClient;
import org.apache.sshd.common.util.GenericUtils;
import org.apache.sshd.common.util.ValidateUtils;
import org.apache.sshd.common.util.logging.AbstractLoggingBean;
@@ -44,105 +43,6 @@ public abstract class AbstractSimpleClient extends AbstractLoggingBean implement
}
@Override
- public SftpClient sftpLogin(SocketAddress target, String username, String password) throws IOException {
- return createSftpClient(sessionLogin(target, username, password));
- }
-
- @Override
- public SftpClient sftpLogin(SocketAddress target, String username, KeyPair identity) throws IOException {
- return createSftpClient(sessionLogin(target, username, identity));
- }
-
- protected SftpClient createSftpClient(final ClientSession session) throws IOException {
- Exception err = null;
- try {
- SftpClient client = session.createSftpClient();
- try {
- return createSftpClient(session, client);
- } catch (Exception e) {
- err = GenericUtils.accumulateException(err, e);
- try {
- client.close();
- } catch (Exception t) {
- if (log.isDebugEnabled()) {
- log.debug("createSftpClient({}) failed ({}) to close client: {}",
- session, t.getClass().getSimpleName(), t.getMessage());
- }
-
- if (log.isTraceEnabled()) {
- log.trace("createSftpClient(" + session + ") client close failure details", t);
- }
- err = GenericUtils.accumulateException(err, t);
- }
- }
- } catch (Exception e) {
- err = GenericUtils.accumulateException(err, e);
- }
-
- // This point is reached if error occurred
- log.warn("createSftpClient({}) failed ({}) to create session: {}",
- session, err.getClass().getSimpleName(), err.getMessage());
-
- try {
- session.close();
- } catch (Exception e) {
- if (log.isDebugEnabled()) {
- log.debug("createSftpClient({}) failed ({}) to close session: {}",
- session, e.getClass().getSimpleName(), e.getMessage());
- }
-
- if (log.isTraceEnabled()) {
- log.trace("createSftpClient(" + session + ") session close failure details", e);
- }
- err = GenericUtils.accumulateException(err, e);
- }
-
- if (err instanceof IOException) {
- throw (IOException) err;
- } else {
- throw new IOException(err);
- }
- }
-
- protected SftpClient createSftpClient(final ClientSession session, final SftpClient client) throws IOException {
- ClassLoader loader = getClass().getClassLoader();
- Class<?>[] interfaces = {SftpClient.class};
- return (SftpClient) Proxy.newProxyInstance(loader, interfaces, (proxy, method, args) -> {
- Throwable err = null;
- Object result = null;
- String name = method.getName();
- try {
- result = method.invoke(client, args);
- } catch (Throwable t) {
- if (log.isTraceEnabled()) {
- log.trace("invoke(SftpClient#{}) failed ({}) to execute: {}",
- name, t.getClass().getSimpleName(), t.getMessage());
- }
- err = GenericUtils.accumulateException(err, t);
- }
-
- // propagate the "close" call to the session as well
- if ("close".equals(name) && GenericUtils.isEmpty(args)) {
- try {
- session.close();
- } catch (Throwable t) {
- if (log.isDebugEnabled()) {
- log.debug("invoke(ClientSession#{}) failed ({}) to execute: {}",
- name, t.getClass().getSimpleName(), t.getMessage());
- }
- err = GenericUtils.accumulateException(err, t);
- }
- }
-
- if (err != null) {
- throw err;
- }
-
- return result;
- });
- }
-
- @Override
public CloseableScpClient scpLogin(String host, String username, String password) throws IOException {
return scpLogin(host, DEFAULT_PORT, username, password);
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/simple/SimpleClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/simple/SimpleClient.java b/sshd-core/src/main/java/org/apache/sshd/client/simple/SimpleClient.java
index fa5510d..6fff133 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/simple/SimpleClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/simple/SimpleClient.java
@@ -32,7 +32,6 @@ public interface SimpleClient
extends SimpleClientConfigurator,
SimpleSessionClient,
SimpleScpClient,
- SimpleSftpClient,
Channel {
// marker interface
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/simple/SimpleSftpClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/simple/SimpleSftpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/simple/SimpleSftpClient.java
deleted file mode 100644
index 119b9e2..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/simple/SimpleSftpClient.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.simple;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.channels.Channel;
-import java.security.KeyPair;
-import java.util.Objects;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient;
-import org.apache.sshd.common.util.ValidateUtils;
-
-/**
- * A simplified <U>synchronous</U> API for obtaining SFTP sessions.
- *
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public interface SimpleSftpClient extends SimpleClientConfigurator, Channel {
- /**
- * Creates an SFTP session on the default port and logs in using the provided credentials
- *
- * @param host The target host name or address
- * @param username Username
- * @param password Password
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- default SftpClient sftpLogin(String host, String username, String password) throws IOException {
- return sftpLogin(host, DEFAULT_PORT, username, password);
- }
-
- /**
- * Creates an SFTP session using the provided credentials
- *
- * @param host The target host name or address
- * @param port The target port
- * @param username Username
- * @param password Password
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- default SftpClient sftpLogin(String host, int port, String username, String password) throws IOException {
- return sftpLogin(InetAddress.getByName(ValidateUtils.checkNotNullAndNotEmpty(host, "No host")), port, username, password);
- }
-
- /**
- * Creates an SFTP session on the default port and logs in using the provided credentials
- *
- * @param host The target host name or address
- * @param username Username
- * @param identity The {@link KeyPair} identity
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- default SftpClient sftpLogin(String host, String username, KeyPair identity) throws IOException {
- return sftpLogin(host, DEFAULT_PORT, username, identity);
- }
-
- /**
- * Creates an SFTP session using the provided credentials
- *
- * @param host The target host name or address
- * @param port The target port
- * @param username Username
- * @param identity The {@link KeyPair} identity
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- default SftpClient sftpLogin(String host, int port, String username, KeyPair identity) throws IOException {
- return sftpLogin(InetAddress.getByName(ValidateUtils.checkNotNullAndNotEmpty(host, "No host")), port, username, identity);
- }
-
- /**
- * Creates an SFTP session on the default port and logs in using the provided credentials
- *
- * @param host The target host {@link InetAddress}
- * @param username Username
- * @param password Password
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- default SftpClient sftpLogin(InetAddress host, String username, String password) throws IOException {
- return sftpLogin(host, DEFAULT_PORT, username, password);
- }
-
- /**
- * Creates an SFTP session using the provided credentials
- *
- * @param host The target host {@link InetAddress}
- * @param port The target port
- * @param username Username
- * @param password Password
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- default SftpClient sftpLogin(InetAddress host, int port, String username, String password) throws IOException {
- return sftpLogin(new InetSocketAddress(Objects.requireNonNull(host, "No host address"), port), username, password);
- }
-
- /**
- * Creates an SFTP session on the default port and logs in using the provided credentials
- *
- * @param host The target host {@link InetAddress}
- * @param username Username
- * @param identity The {@link KeyPair} identity
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- default SftpClient sftpLogin(InetAddress host, String username, KeyPair identity) throws IOException {
- return sftpLogin(host, DEFAULT_PORT, username, identity);
- }
-
- /**
- * Creates an SFTP session using the provided credentials
- *
- * @param host The target host {@link InetAddress}
- * @param port The target port
- * @param username Username
- * @param identity The {@link KeyPair} identity
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- default SftpClient sftpLogin(InetAddress host, int port, String username, KeyPair identity) throws IOException {
- return sftpLogin(new InetSocketAddress(Objects.requireNonNull(host, "No host address"), port), username, identity);
- }
-
- /**
- * Creates an SFTP session using the provided credentials
- *
- * @param target The target {@link SocketAddress}
- * @param username Username
- * @param password Password
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- SftpClient sftpLogin(SocketAddress target, String username, String password) throws IOException;
-
- /**
- * Creates an SFTP session using the provided credentials
- *
- * @param target The target {@link SocketAddress}
- * @param username Username
- * @param identity The {@link KeyPair} identity
- * @return Created {@link SftpClient} - <B>Note:</B> closing the client also closes its
- * underlying session
- * @throws IOException If failed to login or authenticate
- */
- SftpClient sftpLogin(SocketAddress target, String username, KeyPair identity) throws IOException;
-
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/RawSftpClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/RawSftpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/RawSftpClient.java
deleted file mode 100644
index 676a03e..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/RawSftpClient.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.io.IOException;
-
-import org.apache.sshd.common.util.buffer.Buffer;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public interface RawSftpClient {
- /**
- * @param cmd Command to send - <B>Note:</B> only lower 8-bits are used
- * @param buffer The {@link Buffer} containing the command data
- * @return The assigned request id
- * @throws IOException if failed to send command
- */
- int send(int cmd, Buffer buffer) throws IOException;
-
- /**
- * @param id The expected request id
- * @return The received response {@link Buffer} containing the request id
- * @throws IOException If connection closed or interrupted
- */
- Buffer receive(int id) throws IOException;
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpAclFileAttributeView.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpAclFileAttributeView.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpAclFileAttributeView.java
deleted file mode 100644
index 7cada6e..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpAclFileAttributeView.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.io.IOException;
-import java.nio.file.LinkOption;
-import java.nio.file.Path;
-import java.nio.file.attribute.AclEntry;
-import java.nio.file.attribute.AclFileAttributeView;
-import java.nio.file.attribute.PosixFileAttributes;
-import java.nio.file.attribute.UserPrincipal;
-import java.util.List;
-
-import org.apache.sshd.client.subsystem.sftp.impl.AbstractSftpFileAttributeView;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public class SftpAclFileAttributeView extends AbstractSftpFileAttributeView implements AclFileAttributeView {
- public SftpAclFileAttributeView(SftpFileSystemProvider provider, Path path, LinkOption... options) {
- super(provider, path, options);
- }
-
- @Override
- public UserPrincipal getOwner() throws IOException {
- PosixFileAttributes v = provider.readAttributes(path, PosixFileAttributes.class, options);
- return v.owner();
- }
-
- @Override
- public void setOwner(UserPrincipal owner) throws IOException {
- provider.setAttribute(path, "posix", "owner", owner, options);
- }
-
- @Override
- public String name() {
- return "acl";
- }
-
- @Override
- public List<AclEntry> getAcl() throws IOException {
- return readRemoteAttributes().getAcl();
- }
-
- @Override
- public void setAcl(List<AclEntry> acl) throws IOException {
- writeRemoteAttributes(new SftpClient.Attributes().acl(acl));
- }
-
-}