dovecot-2.2: *-login: Another crashfix
dovecot at dovecot.org
dovecot at dovecot.org
Sun May 20 03:26:29 EEST 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/842e5124038d
changeset: 14368:842e5124038d
user: Timo Sirainen <tss at iki.fi>
date: Thu Mar 22 16:03:04 2012 +0200
description:
*-login: Another crashfix
diffstat:
src/login-common/client-common.c | 2 +-
src/login-common/login-proxy.c | 2 +-
src/login-common/main.c | 2 +-
src/login-common/ssl-proxy-openssl.c | 18 ++++++++++++------
src/login-common/ssl-proxy.h | 4 ++--
5 files changed, 17 insertions(+), 11 deletions(-)
diffs (122 lines):
diff -r 1d23440ccb89 -r 842e5124038d src/login-common/client-common.c
--- a/src/login-common/client-common.c Thu Mar 22 15:32:00 2012 +0200
+++ b/src/login-common/client-common.c Thu Mar 22 16:03:04 2012 +0200
@@ -297,7 +297,7 @@
if (!client_unref(&client) || client->destroyed)
return;
- fd_ssl = ssl_proxy_alloc(client->fd, &client->ip,
+ fd_ssl = ssl_proxy_alloc(client->fd, &client->ip, client->pool,
client->set, &client->ssl_proxy);
if (fd_ssl == -1) {
client_send_line(client, CLIENT_CMD_REPLY_BYE,
diff -r 1d23440ccb89 -r 842e5124038d src/login-common/login-proxy.c
--- a/src/login-common/login-proxy.c Thu Mar 22 15:32:00 2012 +0200
+++ b/src/login-common/login-proxy.c Thu Mar 22 16:03:04 2012 +0200
@@ -545,7 +545,7 @@
io_remove(&proxy->server_io);
fd = ssl_proxy_client_alloc(proxy->server_fd, &proxy->client->ip,
- proxy->client->set,
+ proxy->client->pool, proxy->client->set,
login_proxy_ssl_handshaked, proxy,
&proxy->ssl_server_proxy);
if (fd < 0) {
diff -r 1d23440ccb89 -r 842e5124038d src/login-common/main.c
--- a/src/login-common/main.c Thu Mar 22 15:32:00 2012 +0200
+++ b/src/login-common/main.c Thu Mar 22 16:03:04 2012 +0200
@@ -123,7 +123,7 @@
client = client_create(conn->fd, FALSE, pool, set, other_sets,
&local_ip, &conn->remote_ip);
} else {
- fd_ssl = ssl_proxy_alloc(conn->fd, &conn->remote_ip, set,
+ fd_ssl = ssl_proxy_alloc(conn->fd, &conn->remote_ip, pool, set,
&proxy);
if (fd_ssl == -1) {
net_disconnect(conn->fd);
diff -r 1d23440ccb89 -r 842e5124038d src/login-common/ssl-proxy-openssl.c
--- a/src/login-common/ssl-proxy-openssl.c Thu Mar 22 15:32:00 2012 +0200
+++ b/src/login-common/ssl-proxy-openssl.c Thu Mar 22 16:03:04 2012 +0200
@@ -52,6 +52,7 @@
struct client *client;
struct ip_addr ip;
const struct login_settings *set;
+ pool_t set_pool;
int fd_ssl, fd_plain;
struct io *io_ssl_read, *io_ssl_write, *io_plain_read, *io_plain_write;
@@ -543,7 +544,7 @@
static int
ssl_proxy_alloc_common(SSL_CTX *ssl_ctx, int fd, const struct ip_addr *ip,
- const struct login_settings *set,
+ pool_t set_pool, const struct login_settings *set,
struct ssl_proxy **proxy_r)
{
struct ssl_proxy *proxy;
@@ -590,7 +591,9 @@
proxy->fd_ssl = fd;
proxy->fd_plain = sfd[0];
proxy->ip = *ip;
- SSL_set_ex_data(ssl, extdata_index, proxy);
+ proxy->set_pool = set_pool;
+ pool_ref(set_pool);
+ SSL_set_ex_data(ssl, extdata_index, proxy);
ssl_proxy_count++;
DLLIST_PREPEND(&ssl_proxies, proxy);
@@ -618,24 +621,26 @@
return ctx;
}
-int ssl_proxy_alloc(int fd, const struct ip_addr *ip,
+int ssl_proxy_alloc(int fd, const struct ip_addr *ip, pool_t set_pool,
const struct login_settings *set,
struct ssl_proxy **proxy_r)
{
struct ssl_server_context *ctx;
ctx = ssl_server_context_get(set);
- return ssl_proxy_alloc_common(ctx->ctx, fd, ip, set, proxy_r);
+ return ssl_proxy_alloc_common(ctx->ctx, fd, ip,
+ set_pool, set, proxy_r);
}
-int ssl_proxy_client_alloc(int fd, struct ip_addr *ip,
+int ssl_proxy_client_alloc(int fd, struct ip_addr *ip, pool_t set_pool,
const struct login_settings *set,
ssl_handshake_callback_t *callback, void *context,
struct ssl_proxy **proxy_r)
{
int ret;
- ret = ssl_proxy_alloc_common(ssl_client_ctx, fd, ip, set, proxy_r);
+ ret = ssl_proxy_alloc_common(ssl_client_ctx, fd, ip,
+ set_pool, set, proxy_r);
if (ret < 0)
return -1;
@@ -767,6 +772,7 @@
SSL_free(proxy->ssl);
+ pool_unref(&proxy->set_pool);
i_free(proxy->last_error);
i_free(proxy);
}
diff -r 1d23440ccb89 -r 842e5124038d src/login-common/ssl-proxy.h
--- a/src/login-common/ssl-proxy.h Thu Mar 22 15:32:00 2012 +0200
+++ b/src/login-common/ssl-proxy.h Thu Mar 22 16:03:04 2012 +0200
@@ -13,10 +13,10 @@
/* establish SSL connection with the given fd, returns a new fd which you
must use from now on, or -1 if error occurred. Unless -1 is returned,
the given fd must be simply forgotten. */
-int ssl_proxy_alloc(int fd, const struct ip_addr *ip,
+int ssl_proxy_alloc(int fd, const struct ip_addr *ip, pool_t set_pool,
const struct login_settings *set,
struct ssl_proxy **proxy_r);
-int ssl_proxy_client_alloc(int fd, struct ip_addr *ip,
+int ssl_proxy_client_alloc(int fd, struct ip_addr *ip, pool_t set_pool,
const struct login_settings *set,
ssl_handshake_callback_t *callback, void *context,
struct ssl_proxy **proxy_r);
More information about the dovecot-cvs
mailing list