Blame SOURCES/0014-libssh2-1.4.3-scp-remote-exec.patch

68eb44
From 3893140b1ff88d70407d5ab902022ab36d7305d7 Mon Sep 17 00:00:00 2001
68eb44
From: Marc Hoersken <info@marc-hoersken.de>
68eb44
Date: Mon, 23 Mar 2015 22:47:46 +0100
68eb44
Subject: [PATCH 1/5] scp.c: fix that scp_send may transmit not initialised
68eb44
 memory
68eb44
68eb44
Fixes ticket 244. Thanks Torsten.
68eb44
68eb44
Upstream-commit: b99204f2896b0cdafa3ecc0736f0252ce44c32c7
68eb44
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
68eb44
---
68eb44
 src/scp.c | 6 ++++++
68eb44
 1 file changed, 6 insertions(+)
68eb44
68eb44
diff --git a/src/scp.c b/src/scp.c
68eb44
index 63d181e..2f92804 100644
68eb44
--- a/src/scp.c
68eb44
+++ b/src/scp.c
68eb44
@@ -801,12 +801,18 @@ scp_send(LIBSSH2_SESSION * session, const char *path, int mode,
68eb44
 
68eb44
         cmd_len = strlen((char *)session->scpSend_command);
68eb44
 
68eb44
+        memset(&session->scpSend_command[cmd_len], 0,
68eb44
+               session->scpSend_command_len - cmd_len);
68eb44
+
68eb44
         (void)shell_quotearg(path,
68eb44
                              &session->scpSend_command[cmd_len],
68eb44
                              session->scpSend_command_len - cmd_len);
68eb44
 
68eb44
         session->scpSend_command[session->scpSend_command_len - 1] = '\0';
68eb44
 
68eb44
+        session->scpSend_command_len =
68eb44
+            strlen((char *)session->scpSend_command);
68eb44
+
68eb44
         _libssh2_debug(session, LIBSSH2_TRACE_SCP,
68eb44
                        "Opening channel for SCP send");
68eb44
         /* Allocate a channel */
68eb44
-- 
68eb44
2.13.5
68eb44
68eb44
68eb44
From 2ecb8c5d6e116fcc71a31360115c9c2b4b0ca1d2 Mon Sep 17 00:00:00 2001
68eb44
From: Marc Hoersken <info@marc-hoersken.de>
68eb44
Date: Mon, 23 Mar 2015 23:04:24 +0100
68eb44
Subject: [PATCH 2/5] scp.c: fix that scp_recv may transmit not initialised
68eb44
 memory
68eb44
68eb44
Upstream-commit: 1e7988cb0d8dae32148b04dd93e919a770599f30
68eb44
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
68eb44
---
68eb44
 src/scp.c | 7 +++++++
68eb44
 1 file changed, 7 insertions(+)
68eb44
68eb44
diff --git a/src/scp.c b/src/scp.c
68eb44
index 2f92804..d0c0d26 100644
68eb44
--- a/src/scp.c
68eb44
+++ b/src/scp.c
68eb44
@@ -299,10 +299,17 @@ scp_recv(LIBSSH2_SESSION * session, const char *path, struct stat * sb)
68eb44
 
68eb44
         cmd_len = strlen((char *)session->scpRecv_command);
68eb44
 
68eb44
+        memset(&session->scpRecv_command[cmd_len], 0,
68eb44
+               session->scpRecv_command_len - cmd_len);
68eb44
+
68eb44
         (void) shell_quotearg(path,
68eb44
                               &session->scpRecv_command[cmd_len],
68eb44
                               session->scpRecv_command_len - cmd_len);
68eb44
 
68eb44
+        session->scpRecv_command[session->scpRecv_command_len - 1] = '\0';
68eb44
+
68eb44
+        session->scpRecv_command_len =
68eb44
+            strlen((char *)session->scpRecv_command);
68eb44
 
68eb44
         _libssh2_debug(session, LIBSSH2_TRACE_SCP,
68eb44
                        "Opening channel for SCP receive");
68eb44
-- 
68eb44
2.13.5
68eb44
68eb44
68eb44
From 5b23e9e9875302791f5c190cf0e4f61fd9879ff0 Mon Sep 17 00:00:00 2001
68eb44
From: Marc Hoersken <info@marc-hoersken.de>
68eb44
Date: Mon, 23 Mar 2015 23:05:41 +0100
68eb44
Subject: [PATCH 3/5] scp.c: improved and streamlined formatting
68eb44
68eb44
Upstream-commit: 2d59b41daa3925645a26e6406fc318e6c2bfaae6
68eb44
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
68eb44
---
68eb44
 src/scp.c | 16 ++++++++++------
68eb44
 1 file changed, 10 insertions(+), 6 deletions(-)
68eb44
68eb44
diff --git a/src/scp.c b/src/scp.c
68eb44
index d0c0d26..30d46af 100644
68eb44
--- a/src/scp.c
68eb44
+++ b/src/scp.c
68eb44
@@ -295,16 +295,17 @@ scp_recv(LIBSSH2_SESSION * session, const char *path, struct stat * sb)
68eb44
         }
68eb44
 
68eb44
         snprintf((char *)session->scpRecv_command,
68eb44
-                 session->scpRecv_command_len, "scp -%sf ", sb?"p":"");
68eb44
+                 session->scpRecv_command_len,
68eb44
+                 "scp -%sf ", sb?"p":"");
68eb44
 
68eb44
         cmd_len = strlen((char *)session->scpRecv_command);
68eb44
 
68eb44
         memset(&session->scpRecv_command[cmd_len], 0,
68eb44
                session->scpRecv_command_len - cmd_len);
68eb44
 
68eb44
-        (void) shell_quotearg(path,
68eb44
-                              &session->scpRecv_command[cmd_len],
68eb44
-                              session->scpRecv_command_len - cmd_len);
68eb44
+        (void)shell_quotearg(path,
68eb44
+                             &session->scpRecv_command[cmd_len],
68eb44
+                             session->scpRecv_command_len - cmd_len);
68eb44
 
68eb44
         session->scpRecv_command[session->scpRecv_command_len - 1] = '\0';
68eb44
 
68eb44
@@ -797,13 +798,16 @@ scp_send(LIBSSH2_SESSION * session, const char *path, int mode,
68eb44
 
68eb44
         session->scpSend_command =
68eb44
             LIBSSH2_ALLOC(session, session->scpSend_command_len);
68eb44
+
68eb44
         if (!session->scpSend_command) {
68eb44
             _libssh2_error(session, LIBSSH2_ERROR_ALLOC,
68eb44
-                           "Unable to allocate a command buffer for scp session");
68eb44
+                           "Unable to allocate a command buffer for "
68eb44
+                           "SCP session");
68eb44
             return NULL;
68eb44
         }
68eb44
 
68eb44
-        snprintf((char *)session->scpSend_command, session->scpSend_command_len,
68eb44
+        snprintf((char *)session->scpSend_command,
68eb44
+                 session->scpSend_command_len,
68eb44
                  "scp -%st ", (mtime || atime)?"p":"");
68eb44
 
68eb44
         cmd_len = strlen((char *)session->scpSend_command);
68eb44
-- 
68eb44
2.13.5
68eb44
68eb44
68eb44
From fc0d9df034e8701cdcf6c24fd40b1dbc8bc3e084 Mon Sep 17 00:00:00 2001
68eb44
From: Marc Hoersken <info@marc-hoersken.de>
68eb44
Date: Mon, 23 Mar 2015 23:17:31 +0100
68eb44
Subject: [PATCH 4/5] scp.c: improved command length calculation
68eb44
68eb44
Reduced number of calls to strlen, because shell_quotearg already
68eb44
returns the length of the resulting string (e.q. quoted path)
68eb44
which we can add to the existing and known cmd_len.
68eb44
Removed obsolete call to memset again, because we can put a final
68eb44
NULL-byte at the end of the string using the calculated length.
68eb44
68eb44
Upstream-commit: 3d3347c0625ce29b5581a0aa45e6e3be580769f1
68eb44
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
68eb44
---
68eb44
 src/scp.c | 32 ++++++++++----------------------
68eb44
 1 file changed, 10 insertions(+), 22 deletions(-)
68eb44
68eb44
diff --git a/src/scp.c b/src/scp.c
68eb44
index 30d46af..f3d4995 100644
68eb44
--- a/src/scp.c
68eb44
+++ b/src/scp.c
68eb44
@@ -299,18 +299,12 @@ scp_recv(LIBSSH2_SESSION * session, const char *path, struct stat * sb)
68eb44
                  "scp -%sf ", sb?"p":"");
68eb44
 
68eb44
         cmd_len = strlen((char *)session->scpRecv_command);
68eb44
+        cmd_len += shell_quotearg(path,
68eb44
+                                  &session->scpRecv_command[cmd_len],
68eb44
+                                  session->scpRecv_command_len - cmd_len);
68eb44
 
68eb44
-        memset(&session->scpRecv_command[cmd_len], 0,
68eb44
-               session->scpRecv_command_len - cmd_len);
68eb44
-
68eb44
-        (void)shell_quotearg(path,
68eb44
-                             &session->scpRecv_command[cmd_len],
68eb44
-                             session->scpRecv_command_len - cmd_len);
68eb44
-
68eb44
-        session->scpRecv_command[session->scpRecv_command_len - 1] = '\0';
68eb44
-
68eb44
-        session->scpRecv_command_len =
68eb44
-            strlen((char *)session->scpRecv_command);
68eb44
+        session->scpRecv_command[cmd_len] = '\0';
68eb44
+        session->scpRecv_command_len = cmd_len + 1;
68eb44
 
68eb44
         _libssh2_debug(session, LIBSSH2_TRACE_SCP,
68eb44
                        "Opening channel for SCP receive");
68eb44
@@ -811,18 +805,12 @@ scp_send(LIBSSH2_SESSION * session, const char *path, int mode,
68eb44
                  "scp -%st ", (mtime || atime)?"p":"");
68eb44
 
68eb44
         cmd_len = strlen((char *)session->scpSend_command);
68eb44
+        cmd_len += shell_quotearg(path,
68eb44
+                                  &session->scpSend_command[cmd_len],
68eb44
+                                  session->scpSend_command_len - cmd_len);
68eb44
 
68eb44
-        memset(&session->scpSend_command[cmd_len], 0,
68eb44
-               session->scpSend_command_len - cmd_len);
68eb44
-
68eb44
-        (void)shell_quotearg(path,
68eb44
-                             &session->scpSend_command[cmd_len],
68eb44
-                             session->scpSend_command_len - cmd_len);
68eb44
-
68eb44
-        session->scpSend_command[session->scpSend_command_len - 1] = '\0';
68eb44
-
68eb44
-        session->scpSend_command_len =
68eb44
-            strlen((char *)session->scpSend_command);
68eb44
+        session->scpSend_command[cmd_len] = '\0';
68eb44
+        session->scpSend_command_len = cmd_len + 1;
68eb44
 
68eb44
         _libssh2_debug(session, LIBSSH2_TRACE_SCP,
68eb44
                        "Opening channel for SCP send");
68eb44
-- 
68eb44
2.13.5
68eb44
68eb44
68eb44
From 9506e299fa5116aa8c4c626e6de1feaed9ff9ff8 Mon Sep 17 00:00:00 2001
68eb44
From: Kamil Dudka <kdudka@redhat.com>
68eb44
Date: Mon, 11 Sep 2017 21:13:45 +0200
68eb44
Subject: [PATCH 5/5] scp: do not NUL-terminate the command for remote exec
68eb44
 (#208)
68eb44
68eb44
It breaks SCP download/upload from/to certain server implementations.
68eb44
68eb44
The bug does not manifest with OpenSSH, which silently drops the NUL
68eb44
byte (eventually with any garbage that follows the NUL byte) before
68eb44
executing it.
68eb44
68eb44
Bug: https://bugzilla.redhat.com/1489736
68eb44
68eb44
Upstream-commit: 819ef4f2037490b6aa2e870aea851b6364184090
68eb44
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
68eb44
---
68eb44
 src/scp.c | 8 ++++----
68eb44
 1 file changed, 4 insertions(+), 4 deletions(-)
68eb44
68eb44
diff --git a/src/scp.c b/src/scp.c
68eb44
index f3d4995..c6451bc 100644
68eb44
--- a/src/scp.c
68eb44
+++ b/src/scp.c
68eb44
@@ -303,8 +303,8 @@ scp_recv(LIBSSH2_SESSION * session, const char *path, struct stat * sb)
68eb44
                                   &session->scpRecv_command[cmd_len],
68eb44
                                   session->scpRecv_command_len - cmd_len);
68eb44
 
68eb44
-        session->scpRecv_command[cmd_len] = '\0';
68eb44
-        session->scpRecv_command_len = cmd_len + 1;
68eb44
+        /* the command to exec should _not_ be NUL-terminated */
68eb44
+        session->scpRecv_command_len = cmd_len;
68eb44
 
68eb44
         _libssh2_debug(session, LIBSSH2_TRACE_SCP,
68eb44
                        "Opening channel for SCP receive");
68eb44
@@ -809,8 +809,8 @@ scp_send(LIBSSH2_SESSION * session, const char *path, int mode,
68eb44
                                   &session->scpSend_command[cmd_len],
68eb44
                                   session->scpSend_command_len - cmd_len);
68eb44
 
68eb44
-        session->scpSend_command[cmd_len] = '\0';
68eb44
-        session->scpSend_command_len = cmd_len + 1;
68eb44
+        /* the command to exec should _not_ be NUL-terminated */
68eb44
+        session->scpSend_command_len = cmd_len;
68eb44
 
68eb44
         _libssh2_debug(session, LIBSSH2_TRACE_SCP,
68eb44
                        "Opening channel for SCP send");
68eb44
-- 
68eb44
2.13.5
68eb44