This is an automated email from the ASF dual-hosted git repository. lgoldstein pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mina-sshd.git
The following commit(s) were added to refs/heads/master by this push: new 498bf10 [SSHD-525] Added support for sftp client posix rename 498bf10 is described below commit 498bf10e58d47d2899fe42c3dda4074b2ec63ca8 Author: =?UTF-8?q?Christian=20Schou=20J=C3=B8dal?= <c...@telenor.dk> AuthorDate: Thu Jan 14 18:45:19 2021 +0200 [SSHD-525] Added support for sftp client posix rename --- CHANGES.md | 2 + .../extensions/BuiltinSftpClientExtensions.java | 10 +++++ .../openssh/OpenSSHPosixRenameExtension.java | 31 ++++++++++++++ .../helpers/OpenSSHPosixRenameExtensionImpl.java | 48 ++++++++++++++++++++++ 4 files changed, 91 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index b2bc036..feaa362 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,6 +21,8 @@ * [SSHD-1109](https://issues.apache.org/jira/browse/SSHD-1109) Provide full slf4j logger capabilities to CliLogger + use it in all CLI classes * [SSHD-1110](https://issues.apache.org/jira/browse/SSHD-1110) Replace `Class#newInstance()` calls with `Class#getDefaultConstructor().newInstance()` * [SSHD-1111](https://issues.apache.org/jira/browse/SSHD-1111) Fixed SshClientCliSupport compression option detection +* [SSHD-525] Added support for SFTP **client-side** ["posix-ren...@openssh.com" + extension](http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL?rev=1.28&content-type=text/x-cvsweb-markup) - see section 3.3 ## Behavioral changes and enhancements diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/BuiltinSftpClientExtensions.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/BuiltinSftpClientExtensions.java index 3a0a293..4e15251 100644 --- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/BuiltinSftpClientExtensions.java +++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/BuiltinSftpClientExtensions.java @@ -35,15 +35,18 @@ import org.apache.sshd.sftp.client.extensions.helpers.MD5FileExtensionImpl; import org.apache.sshd.sftp.client.extensions.helpers.MD5HandleExtensionImpl; import org.apache.sshd.sftp.client.extensions.helpers.SpaceAvailableExtensionImpl; import org.apache.sshd.sftp.client.extensions.openssh.OpenSSHFsyncExtension; +import org.apache.sshd.sftp.client.extensions.openssh.OpenSSHPosixRenameExtension; import org.apache.sshd.sftp.client.extensions.openssh.OpenSSHStatHandleExtension; import org.apache.sshd.sftp.client.extensions.openssh.OpenSSHStatPathExtension; import org.apache.sshd.sftp.client.extensions.openssh.helpers.OpenSSHFsyncExtensionImpl; +import org.apache.sshd.sftp.client.extensions.openssh.helpers.OpenSSHPosixRenameExtensionImpl; import org.apache.sshd.sftp.client.extensions.openssh.helpers.OpenSSHStatHandleExtensionImpl; import org.apache.sshd.sftp.client.extensions.openssh.helpers.OpenSSHStatPathExtensionImpl; import org.apache.sshd.sftp.common.SftpConstants; import org.apache.sshd.sftp.common.extensions.ParserUtils; import org.apache.sshd.sftp.common.extensions.openssh.FstatVfsExtensionParser; import org.apache.sshd.sftp.common.extensions.openssh.FsyncExtensionParser; +import org.apache.sshd.sftp.common.extensions.openssh.PosixRenameExtensionParser; import org.apache.sshd.sftp.common.extensions.openssh.StatVfsExtensionParser; /** @@ -119,6 +122,13 @@ public enum BuiltinSftpClientExtensions implements SftpClientExtensionFactory { SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) { return new OpenSSHStatPathExtensionImpl(client, raw, extensions); } + }, + OPENSSH_POSIX_RENAME(PosixRenameExtensionParser.NAME, OpenSSHPosixRenameExtension.class) { + @Override // co-variant return + public OpenSSHPosixRenameExtension create( + SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) { + return new OpenSSHPosixRenameExtensionImpl(client, raw, extensions); + } }; public static final Set<BuiltinSftpClientExtensions> VALUES diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/openssh/OpenSSHPosixRenameExtension.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/openssh/OpenSSHPosixRenameExtension.java new file mode 100644 index 0000000..92533f6 --- /dev/null +++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/openssh/OpenSSHPosixRenameExtension.java @@ -0,0 +1,31 @@ +/* + * 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.sftp.client.extensions.openssh; + +import java.io.IOException; + +import org.apache.sshd.sftp.client.extensions.SftpClientExtension; + +/** + * Implements the "posix-ren...@openssh.com" extension + */ +public interface OpenSSHPosixRenameExtension extends SftpClientExtension { + void posixRename(String oldPath, String newPath) throws IOException; +} diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/openssh/helpers/OpenSSHPosixRenameExtensionImpl.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/openssh/helpers/OpenSSHPosixRenameExtensionImpl.java new file mode 100644 index 0000000..f75ee4c --- /dev/null +++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/openssh/helpers/OpenSSHPosixRenameExtensionImpl.java @@ -0,0 +1,48 @@ +/* + * 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.sftp.client.extensions.openssh.helpers; + +import java.io.IOException; +import java.util.Map; + +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.sftp.client.RawSftpClient; +import org.apache.sshd.sftp.client.SftpClient; +import org.apache.sshd.sftp.client.extensions.helpers.AbstractSftpClientExtension; +import org.apache.sshd.sftp.client.extensions.openssh.OpenSSHPosixRenameExtension; +import org.apache.sshd.sftp.common.extensions.openssh.PosixRenameExtensionParser; + +/** + * @author <a href="mailto:chr.joe...@gmail.com">Christian Schou Jødal</a> + */ +public class OpenSSHPosixRenameExtensionImpl extends AbstractSftpClientExtension implements OpenSSHPosixRenameExtension { + public OpenSSHPosixRenameExtensionImpl(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions) { + super(PosixRenameExtensionParser.NAME, client, raw, extensions); + } + + @Override + public void posixRename(String oldPath, String newPath) throws IOException { + Buffer buffer = getCommandBuffer(Integer.BYTES + oldPath.length() + newPath.length()); + putTarget(buffer, oldPath); + putTarget(buffer, newPath); + + checkExtendedReplyBuffer(receive(sendExtendedCommand(buffer))); + } +}