Use SSL_free() when closing an SSL server connection

This avoids leaking memory.

Also change to always call SSL_shutdown() regardless of whether a QUIT message was sent.  No
need to call SSL_shutdown() from write_to_server(), close_server() will do it for us.

Remove "Closing SSL connection" message.
This commit is contained in:
Kevin Easton
2017-12-03 00:54:44 +11:00
parent 5d131bcf01
commit abc9dbdf9e
2 changed files with 14 additions and 13 deletions

View File

@@ -1,5 +1,7 @@
[Changes 1.2.2] [Changes 1.2.2]
* Fix memory leak when reconnecting to SSL servers. (caf)
* Add SSL version and cipher to SSL connect message. (caf) * Add SSL version and cipher to SSL connect message. (caf)
* Add BITCHXRC_NAME to config.h. (caf) * Add BITCHXRC_NAME to config.h. (caf)

View File

@@ -152,15 +152,19 @@ void BX_close_server (int cs_index, char *message)
strlcat(buffer, "\r\n", sizeof buffer); strlcat(buffer, "\r\n", sizeof buffer);
#ifdef HAVE_LIBSSL #ifdef HAVE_LIBSSL
if (get_server_ssl(cs_index)) if (get_server_ssl(cs_index))
{
SSL_write(server_list[cs_index].ssl_fd, buffer, strlen(buffer)); SSL_write(server_list[cs_index].ssl_fd, buffer, strlen(buffer));
say("Closing SSL connection");
SSL_shutdown(server_list[cs_index].ssl_fd);
}
else else
#endif #endif
send(server_list[cs_index].write, buffer, strlen(buffer), 0); write(server_list[cs_index].write, buffer, strlen(buffer));
} }
#ifdef HAVE_LIBSSL
if (get_server_ssl(cs_index))
{
SSL_shutdown(server_list[cs_index].ssl_fd);
SSL_free(server_list[cs_index].ssl_fd);
server_list[cs_index].ssl_fd = NULL;
}
#endif
new_close(server_list[cs_index].write); new_close(server_list[cs_index].write);
} }
if (server_list[cs_index].read > -1) if (server_list[cs_index].read > -1)
@@ -2441,11 +2445,10 @@ void got_my_userhost (UserhostItem *item, char *nick, char *stuff)
lame_resolv(item->host, &server_list[from_server].uh_addr); lame_resolv(item->host, &server_list[from_server].uh_addr);
} }
static int write_to_server(int server, int des, char *buffer) static int write_to_server(int server, int des, char *buffer)
{ {
int err = 0; int err = 0;
if (do_hook(SEND_TO_SERVER_LIST, "%d %d %s", server, des, buffer)) if (do_hook(SEND_TO_SERVER_LIST, "%d %d %s", server, des, buffer))
{ {
if (serv_output_func) if (serv_output_func)
@@ -2469,10 +2472,6 @@ int err = 0;
if ((err == -1) && !get_int_var(NO_FAIL_DISCONNECT_VAR)) if ((err == -1) && !get_int_var(NO_FAIL_DISCONNECT_VAR))
{ {
say("Write to server failed. Closing connection."); say("Write to server failed. Closing connection.");
#ifdef HAVE_LIBSSL
if(get_server_ssl(server))
SSL_shutdown (server_list[server].ssl_fd);
#endif
close_server(server, strerror(errno)); close_server(server, strerror(errno));
get_connected(server, server); get_connected(server, server);
} }