Skip to content
Snippets Groups Projects
Commit 8bc6f5f8 authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Some more ssh_close() cleanup

Make ssh_active only true when ssh_session was set.
Only do ssh cleanup if ssh_active is true.
Initialize channel values to -1 (already done in ssh_connect(), but
doesn't hurt anything).
parent 1bac2b62
Branches
Tags
No related merge requests found
Pipeline #6654 passed
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
SOCKET ssh_sock = INVALID_SOCKET; SOCKET ssh_sock = INVALID_SOCKET;
CRYPT_SESSION ssh_session; CRYPT_SESSION ssh_session;
int ssh_channel; int ssh_channel = -1;
bool ssh_active = true; bool ssh_active;
pthread_mutex_t ssh_mutex; pthread_mutex_t ssh_mutex;
pthread_mutex_t ssh_tx_mutex; pthread_mutex_t ssh_tx_mutex;
int sftp_channel = -1; int sftp_channel = -1;
...@@ -739,8 +739,6 @@ ssh_connect(struct bbslist *bbs) ...@@ -739,8 +739,6 @@ ssh_connect(struct bbslist *bbs)
if (ssh_sock == INVALID_SOCKET) if (ssh_sock == INVALID_SOCKET)
return -1; return -1;
ssh_active = true;
if (!bbs->hidepopups) if (!bbs->hidepopups)
uifc.pop("Creating Session"); uifc.pop("Creating Session");
status = cryptCreateSession(&ssh_session, CRYPT_UNUSED, CRYPT_SESSION_SSH); status = cryptCreateSession(&ssh_session, CRYPT_UNUSED, CRYPT_SESSION_SSH);
...@@ -748,6 +746,8 @@ ssh_connect(struct bbslist *bbs) ...@@ -748,6 +746,8 @@ ssh_connect(struct bbslist *bbs)
error_popup(bbs, "creating session", status); error_popup(bbs, "creating session", status);
return -1; return -1;
} }
ssh_active = true;
/* we need to disable Nagle on the socket. */ /* we need to disable Nagle on the socket. */
if (setsockopt(ssh_sock, IPPROTO_TCP, TCP_NODELAY, (char *)&off, sizeof(off))) if (setsockopt(ssh_sock, IPPROTO_TCP, TCP_NODELAY, (char *)&off, sizeof(off)))
...@@ -889,7 +889,6 @@ ssh_connect(struct bbslist *bbs) ...@@ -889,7 +889,6 @@ ssh_connect(struct bbslist *bbs)
} }
FlushData(ssh_session); FlushData(ssh_session);
ssh_active = true;
if (!bbs->hidepopups) { if (!bbs->hidepopups) {
uifc.pop(NULL); uifc.pop(NULL);
uifc.pop("Clearing Ownership"); uifc.pop("Clearing Ownership");
...@@ -1002,27 +1001,31 @@ ssh_close(void) ...@@ -1002,27 +1001,31 @@ ssh_close(void)
{ {
char garbage[1024]; char garbage[1024];
cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_READTIMEOUT, 1);
cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_WRITETIMEOUT, 1);
conn_api.terminate = 1; conn_api.terminate = 1;
ssh_active = false; if (ssh_active) {
if (sftp_state) cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_READTIMEOUT, 1);
sftpc_finish(sftp_state); cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_WRITETIMEOUT, 1);
while (conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1 || pubkey_thread_running) { ssh_active = false;
conn_recv_upto(garbage, sizeof(garbage), 0); if (sftp_state)
SLEEP(1); sftpc_finish(sftp_state);
while (conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1 || pubkey_thread_running) {
conn_recv_upto(garbage, sizeof(garbage), 0);
SLEEP(1);
}
pthread_mutex_lock(&ssh_mutex);
int sc = sftp_channel;
pthread_mutex_unlock(&ssh_mutex);
if (sc != -1)
close_sftp_channel(sc);
if (sftp_state)
sftpc_end(sftp_state);
close_ssh_channel();
cryptDestroySession(ssh_session);
if (ssh_sock != INVALID_SOCKET) {
closesocket(ssh_sock);
ssh_sock = INVALID_SOCKET;
}
} }
pthread_mutex_lock(&ssh_mutex);
int sc = sftp_channel;
pthread_mutex_unlock(&ssh_mutex);
if (sc != -1)
close_sftp_channel(sc);
if (sftp_state)
sftpc_end(sftp_state);
close_ssh_channel();
cryptDestroySession(ssh_session);
closesocket(ssh_sock);
ssh_sock = INVALID_SOCKET;
destroy_conn_buf(&conn_inbuf); destroy_conn_buf(&conn_inbuf);
destroy_conn_buf(&conn_outbuf); destroy_conn_buf(&conn_outbuf);
FREE_AND_NULL(conn_api.rd_buf); FREE_AND_NULL(conn_api.rd_buf);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment