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:
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user