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

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