From: Daniel Stenberg Date: Wed, 15 Jun 2022 21:43:33 +0000 (+0200) Subject: libssh: skip the fake-close when libssh does the right thing X-Git-Tag: curl-7_84_0~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ef22d5c42a25eb4c9c1fbc2bb20427f7017ce118;p=thirdparty%2Fcurl.git libssh: skip the fake-close when libssh does the right thing Starting in libssh 0.10.0 ssh_disconnect() will no longer close our socket. Instead it will be kept alive as we want it, and it is our responsibility to close it later. Ref: #8718 Ref: https://gitlab.com/libssh/libssh-mirror/-/merge_requests/240 Closes #9021 --- diff --git a/lib/vssh/libssh.c b/lib/vssh/libssh.c index 5499d88d91..5aa99e618b 100644 --- a/lib/vssh/libssh.c +++ b/lib/vssh/libssh.c @@ -1972,10 +1972,13 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) } ssh_disconnect(sshc->ssh_session); - /* conn->sock[FIRSTSOCKET] is closed by ssh_disconnect behind our back, - explicitly mark it as closed with the memdebug macro: */ - fake_sclose(conn->sock[FIRSTSOCKET]); - conn->sock[FIRSTSOCKET] = CURL_SOCKET_BAD; + if(!ssh_version(SSH_VERSION_INT(0, 10, 0))) { + /* conn->sock[FIRSTSOCKET] is closed by ssh_disconnect behind our back, + explicitly mark it as closed with the memdebug macro. This libssh + bug is fixed in 0.10.0. */ + fake_sclose(conn->sock[FIRSTSOCKET]); + conn->sock[FIRSTSOCKET] = CURL_SOCKET_BAD; + } SSH_STRING_FREE_CHAR(sshc->homedir); data->state.most_recent_ftp_entrypath = NULL; @@ -2958,7 +2961,7 @@ void Curl_ssh_cleanup(void) void Curl_ssh_version(char *buffer, size_t buflen) { - (void)msnprintf(buffer, buflen, "libssh/%s", CURL_LIBSSH_VERSION); + (void)msnprintf(buffer, buflen, "libssh/%s", ssh_version(0)); } #endif /* USE_LIBSSH */ diff --git a/lib/vssh/ssh.h b/lib/vssh/ssh.h index 5518902327..7e1d8159cb 100644 --- a/lib/vssh/ssh.h +++ b/lib/vssh/ssh.h @@ -211,11 +211,7 @@ struct ssh_conn { #endif /* USE_LIBSSH */ }; -#if defined(USE_LIBSSH) - -#define CURL_LIBSSH_VERSION ssh_version(0) - -#elif defined(USE_LIBSSH2) +#if defined(USE_LIBSSH2) /* Feature detection based on version numbers to better work with non-configure platforms */