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 2020/08/28 07:47:35 UTC
[mina-sshd] 02/02: [SSHD-1064] Fixed
ClientSession#executeRemoteCommand handling of STDERR in case of exception
to behave according to its documentation
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
commit 8415ed4a86b6c64cfae36a0dcd77542d498caff4
Author: Lyor Goldstein <lg...@apache.org>
AuthorDate: Thu Aug 27 08:45:22 2020 +0300
[SSHD-1064] Fixed ClientSession#executeRemoteCommand handling of STDERR in case of exception to behave according to its documentation
---
CHANGES.md | 1 +
.../java/org/apache/sshd/client/session/ClientSession.java | 14 ++++++++------
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index 7470f94..bf19bdd 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -25,6 +25,7 @@ or `-key-file` command line option.
* [SSHD-1042](https://issues.apache.org/jira/browse/SSHD-1042) Added more callbacks to SftpEventListener
* [SSHD-1040](https://issues.apache.org/jira/browse/SSHD-1040) Make server key available after KEX completed.
* [SSHD-1060](https://issues.apache.org/jira/browse/SSHD-1060) Do not store logger level in fields.
+* [SSHD-1064](https://issues.apache.org/jira/browse/SSHD-1064) Fixed `ClientSession#executeRemoteCommand` handling of STDERR in case of exception to behave according to its documentation
## Behavioral changes and enhancements
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 eb5b508..075d026 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
@@ -209,13 +209,15 @@ public interface ClientSession
*/
default String executeRemoteCommand(String command) throws IOException {
try (ByteArrayOutputStream stderr = new ByteArrayOutputStream()) {
- String response = executeRemoteCommand(command, stderr, StandardCharsets.US_ASCII);
- if (stderr.size() > 0) {
- String errorMessage = stderr.toString(StandardCharsets.US_ASCII.name());
- throw new RemoteException("Error reported from remote command='" + command, new ServerException(errorMessage));
+ try {
+ return executeRemoteCommand(command, stderr, StandardCharsets.US_ASCII);
+ } finally {
+ if (stderr.size() > 0) {
+ String errorMessage = stderr.toString(StandardCharsets.US_ASCII.name());
+ throw new RemoteException(
+ "Error reported from remote command=" + command, new ServerException(errorMessage));
+ }
}
-
- return response;
}
}