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

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