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
No related branches found
No related tags found
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,9 +1001,10 @@ ssh_close(void) ...@@ -1002,9 +1001,10 @@ ssh_close(void)
{ {
char garbage[1024]; char garbage[1024];
conn_api.terminate = 1;
if (ssh_active) {
cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_READTIMEOUT, 1); cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_READTIMEOUT, 1);
cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_WRITETIMEOUT, 1); cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_WRITETIMEOUT, 1);
conn_api.terminate = 1;
ssh_active = false; ssh_active = false;
if (sftp_state) if (sftp_state)
sftpc_finish(sftp_state); sftpc_finish(sftp_state);
...@@ -1021,8 +1021,11 @@ ssh_close(void) ...@@ -1021,8 +1021,11 @@ ssh_close(void)
sftpc_end(sftp_state); sftpc_end(sftp_state);
close_ssh_channel(); close_ssh_channel();
cryptDestroySession(ssh_session); cryptDestroySession(ssh_session);
if (ssh_sock != INVALID_SOCKET) {
closesocket(ssh_sock); closesocket(ssh_sock);
ssh_sock = INVALID_SOCKET; 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