File 0384-ssh-Bug-fix-sftp-error-codes.patch of Package erlang

From 182c7b954620e9287ba2ddce9b1cbaceb1bddbaf Mon Sep 17 00:00:00 2001
From: Hans Nilsson <hans@erlang.org>
Date: Thu, 21 Jun 2018 10:38:51 +0200
Subject: [PATCH 1/2] ssh: Bug fix sftp error codes

Report the signal name if the signal error message is ""
Do not report a return code of 0 as an error.
---
 lib/ssh/doc/src/ssh_sftp.xml |  8 ++++++--
 lib/ssh/src/ssh_sftp.erl     | 13 +++++++++++--
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/lib/ssh/doc/src/ssh_sftp.xml b/lib/ssh/doc/src/ssh_sftp.xml
index 129426a6d5..f367560b5f 100644
--- a/lib/ssh/doc/src/ssh_sftp.xml
+++ b/lib/ssh/doc/src/ssh_sftp.xml
@@ -46,9 +46,9 @@
     <taglist>
       <tag><c>reason()</c></tag>
       <item>
-	<p>= <c>atom()</c> A description of the reason why an operation failed.</p>
+	<p>= <c>atom() | string() | tuple() </c>A description of the reason why an operation failed.</p>
 	<p>
-	  The value is formed from the sftp error codes in the protocol-level responses as defined in 
+	  The <c>atom()</c> value is formed from the sftp error codes in the protocol-level responses as defined in 
 	  <url href="https://tools.ietf.org/id/draft-ietf-secsh-filexfer-13.txt">draft-ietf-secsh-filexfer-13.txt</url>
 	  section 9.1.
 	</p>
@@ -57,6 +57,10 @@
 	  E.g. the error code <c>SSH_FX_NO_SUCH_FILE</c>
 	  will cause the <c>reason()</c> to be <c>no_such_file</c>.
 	</p>
+	<p>The <c>string()</c> reason is the error information from the server in case of an exit-signal.  If that information is empty, the reason is the exit signal name.
+	</p>
+	<p>The <c>tuple()</c> reason are other errors like the <c>{exit_status,integer()}</c> if the exit status is not 0.
+	</p>
       </item>
 
       <tag><c>ssh_connection_ref() =</c></tag>
diff --git a/lib/ssh/src/ssh_sftp.erl b/lib/ssh/src/ssh_sftp.erl
index 9e1229dc85..79586141b2 100644
--- a/lib/ssh/src/ssh_sftp.erl
+++ b/lib/ssh/src/ssh_sftp.erl
@@ -801,13 +801,22 @@ handle_ssh_msg({ssh_cm, _, {signal, _, _}}, State) ->
     %% Ignore signals according to RFC 4254 section 6.9.
     {ok, State};
 
-handle_ssh_msg({ssh_cm, _, {exit_signal, ChannelId, _, Error, _}},
+handle_ssh_msg({ssh_cm, _, {exit_signal, ChannelId, Signal, Error0, _}},
 	       State0) ->
+    Error =
+        case Error0 of
+            "" -> Signal;
+            _ -> Error0
+        end,
     State = reply_all(State0, {error, Error}),
     {stop, ChannelId,  State};
 
 handle_ssh_msg({ssh_cm, _, {exit_status, ChannelId, Status}}, State0) ->
-    State = reply_all(State0, {error, {exit_status, Status}}),
+    State = 
+        case State0 of
+            0 -> State0;
+            _ -> reply_all(State0, {error, {exit_status, Status}})
+        end,
     {stop, ChannelId, State}.
 
 %%--------------------------------------------------------------------
-- 
2.16.4

openSUSE Build Service is sponsored by