From: Stephan Bosch Date: Mon, 11 Dec 2017 14:55:32 +0000 (+0100) Subject: lmtp: Fix segfault occurring in client_read_settings(). X-Git-Tag: 2.3.0.rc1~133 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b1aac3a1d59d47a1fca5e4d7ac274089336f2c4f;p=thirdparty%2Fdovecot%2Fcore.git lmtp: Fix segfault occurring in client_read_settings(). This problem is caused by recent changes. The code attempts to access client->conn to obtain connection security info, which is not yet assigned at that point. It is doubtful whether assigning those security flags is useful at that stage, but it now uses the ssl flag from the master_service_connection instead. --- diff --git a/src/lmtp/client.c b/src/lmtp/client.c index ba9acdca04..b7b2eb0481 100644 --- a/src/lmtp/client.c +++ b/src/lmtp/client.c @@ -87,7 +87,7 @@ static void client_raw_user_create(struct client *client) raw_storage_create_from_set(client->user_set_info, sets[0]); } -static void client_read_settings(struct client *client) +static void client_read_settings(struct client *client, bool ssl) { struct mail_storage_service_input input; const struct setting_parser_context *set_parser; @@ -101,11 +101,9 @@ static void client_read_settings(struct client *client) input.remote_ip = client->remote_ip; input.local_port = client->local_port; input.remote_port = client->remote_port; + input.conn_secured = ssl; + input.conn_ssl_secured = ssl; input.username = ""; - input.conn_ssl_secured = - smtp_server_connection_is_ssl_secured(client->conn); - input.conn_secured = input.conn_ssl_secured || - smtp_server_connection_is_trusted(client->conn); if (mail_storage_service_read_settings(storage_service, &input, client->pool, @@ -138,10 +136,9 @@ struct client *client_create(int fd_in, int fd_out, client->remote_port = conn->remote_port; client->local_ip = conn->local_ip; client->local_port = conn->local_port; - client->state_pool = pool_alloconly_create("client state", 4096); - client_read_settings(client); + client_read_settings(client, conn->ssl); client_raw_user_create(client); client->my_domain = client->unexpanded_lda_set->hostname;