mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-12-09 15:41:10 +03:00
Do not close socket passed through options on error conditions
Fixes: #244 Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Sahana Prasad <sahana@redhat.com>
This commit is contained in:
@@ -308,6 +308,7 @@ int ssh_auth_reply_success(ssh_session session, int partial);
|
||||
/* client.c */
|
||||
|
||||
int ssh_send_banner(ssh_session session, int is_server);
|
||||
void ssh_session_socket_close(ssh_session session);
|
||||
|
||||
/* connect.c */
|
||||
socket_t ssh_connect_host_nonblocking(ssh_session session, const char *host,
|
||||
|
||||
@@ -486,9 +486,7 @@ static void ssh_client_connection_callback(ssh_session session)
|
||||
|
||||
return;
|
||||
error:
|
||||
ssh_socket_close(session->socket);
|
||||
session->alive = 0;
|
||||
session->session_state = SSH_SESSION_STATE_ERROR;
|
||||
ssh_session_socket_close(session);
|
||||
SSH_LOG(SSH_LOG_WARN, "%s", ssh_get_error(session));
|
||||
}
|
||||
|
||||
@@ -798,10 +796,7 @@ ssh_disconnect(ssh_session session)
|
||||
}
|
||||
|
||||
ssh_packet_send(session);
|
||||
/* Do not close the socket, if the fd was set via options. */
|
||||
if (session->opts.fd == SSH_INVALID_SOCKET) {
|
||||
ssh_socket_close(session->socket);
|
||||
}
|
||||
ssh_session_socket_close(session);
|
||||
}
|
||||
|
||||
error:
|
||||
|
||||
@@ -81,9 +81,7 @@ SSH_PACKET_CALLBACK(ssh_packet_disconnect_callback)
|
||||
error != NULL ? error : "no error");
|
||||
SAFE_FREE(error);
|
||||
|
||||
ssh_socket_close(session->socket);
|
||||
session->alive = 0;
|
||||
session->session_state = SSH_SESSION_STATE_ERROR;
|
||||
ssh_session_socket_close(session);
|
||||
/* correctly handle disconnect during authorization */
|
||||
session->auth.state = SSH_AUTH_STATE_FAILED;
|
||||
|
||||
|
||||
@@ -495,6 +495,21 @@ const char* ssh_get_hmac_out(ssh_session session) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @brief Close the connection socket if it is a socket created by us.
|
||||
* Does not close the sockets provided by the user through options API.
|
||||
*/
|
||||
void
|
||||
ssh_session_socket_close(ssh_session session)
|
||||
{
|
||||
if (session->opts.fd == SSH_INVALID_SOCKET) {
|
||||
ssh_socket_close(session->socket);
|
||||
}
|
||||
session->alive = 0;
|
||||
session->session_state = SSH_SESSION_STATE_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disconnect impolitely from a remote host by closing the socket.
|
||||
*
|
||||
@@ -509,8 +524,7 @@ ssh_silent_disconnect(ssh_session session)
|
||||
return;
|
||||
}
|
||||
|
||||
ssh_socket_close(session->socket);
|
||||
session->alive = 0;
|
||||
ssh_session_socket_close(session);
|
||||
ssh_disconnect(session);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user