Blame SOURCES/0014-curl-7.61.1-libssh-socket.patch

3546d2
From 095d4cf3b1c388b2871e3783f8c41b1e01200a25 Mon Sep 17 00:00:00 2001
3546d2
From: =?UTF-8?q?Felix=20H=C3=A4dicke?= <felixhaedicke@web.de>
3546d2
Date: Wed, 23 Jan 2019 23:47:55 +0100
3546d2
Subject: [PATCH] libssh: do not let libssh create socket
3546d2
3546d2
By default, libssh creates a new socket, instead of using the socket
3546d2
created by curl for SSH connections.
3546d2
3546d2
Pass the socket created by curl to libssh using ssh_options_set() with
3546d2
SSH_OPTIONS_FD directly after ssh_new(). So libssh uses our socket
3546d2
instead of creating a new one.
3546d2
3546d2
This approach is very similar to what is done in the libssh2 code, where
3546d2
the socket created by curl is passed to libssh2 when
3546d2
libssh2_session_startup() is called.
3546d2
3546d2
Fixes #3491
3546d2
Closes #3495
3546d2
3546d2
Upstream-commit: 15c94b310bf9e0c92d71fca5a88eb67a1e2548a6
3546d2
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
3546d2
---
3546d2
 lib/ssh-libssh.c | 6 +++++-
3546d2
 1 file changed, 5 insertions(+), 1 deletion(-)
3546d2
3546d2
diff --git a/lib/ssh-libssh.c b/lib/ssh-libssh.c
3546d2
index 7d59089..4110be2 100644
3546d2
--- a/lib/ssh-libssh.c
3546d2
+++ b/lib/ssh-libssh.c
3546d2
@@ -549,6 +549,7 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block)
3546d2
   struct Curl_easy *data = conn->data;
3546d2
   struct SSHPROTO *protop = data->req.protop;
3546d2
   struct ssh_conn *sshc = &conn->proto.sshc;
3546d2
+  curl_socket_t sock = conn->sock[FIRSTSOCKET];
3546d2
   int rc = SSH_NO_ERROR, err;
3546d2
   char *new_readdir_line;
3546d2
   int seekerr = CURL_SEEKFUNC_OK;
3546d2
@@ -792,7 +793,7 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block)
3546d2
 
3546d2
       Curl_pgrsTime(conn->data, TIMER_APPCONNECT);      /* SSH is connected */
3546d2
 
3546d2
-      conn->sockfd = ssh_get_fd(sshc->ssh_session);
3546d2
+      conn->sockfd = sock;
3546d2
       conn->writesockfd = CURL_SOCKET_BAD;
3546d2
 
3546d2
       if(conn->handler->protocol == CURLPROTO_SFTP) {
3546d2
@@ -2048,6 +2049,7 @@ static CURLcode myssh_connect(struct connectdata *conn, bool *done)
3546d2
 {
3546d2
   struct ssh_conn *ssh;
3546d2
   CURLcode result;
3546d2
+  curl_socket_t sock = conn->sock[FIRSTSOCKET];
3546d2
   struct Curl_easy *data = conn->data;
3546d2
   int rc;
3546d2
 
3546d2
@@ -2076,6 +2078,8 @@ static CURLcode myssh_connect(struct connectdata *conn, bool *done)
3546d2
     return CURLE_FAILED_INIT;
3546d2
   }
3546d2
 
3546d2
+  ssh_options_set(ssh->ssh_session, SSH_OPTIONS_FD, &sock);
3546d2
+
3546d2
   if(conn->user) {
3546d2
     infof(data, "User: %s\n", conn->user);
3546d2
     ssh_options_set(ssh->ssh_session, SSH_OPTIONS_USER, conn->user);
3546d2
-- 
3546d2
2.17.2
3546d2