]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
login-common: Fix crash with invalid login_trusted_networks setting
authorAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 7 Apr 2022 06:39:42 +0000 (09:39 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 14 Apr 2022 06:36:58 +0000 (06:36 +0000)
client_is_trusted() uses the event to log an error.

Broken in 95c63f3e9efdb7ba916dac3e6b013d131392c48a

src/login-common/client-common.c

index 3f3fae6e045caa540f98dfadc4ac0ca9a28eab6e..951a8bea0ae47b970fe35895e724ac735d71525a 100644 (file)
@@ -204,6 +204,16 @@ client_alloc(int fd, pool_t pool,
        client->real_remote_ip = conn->real_remote_ip;
        client->real_remote_port = conn->real_remote_port;
        client->listener_name = p_strdup(client->pool, conn->name);
+       /* This event must exist before client_is_trusted() is called */
+       client->event = event_create(NULL);
+       event_add_category(client->event, &login_binary->event_category);
+       event_add_str(client->event, "local_ip", net_ip2addr(&conn->local_ip));
+       event_add_int(client->event, "local_port", conn->local_port);
+       event_add_str(client->event, "remote_ip", net_ip2addr(&conn->remote_ip));
+       event_add_int(client->event, "remote_port", conn->remote_port);
+       event_add_str(client->event, "service", login_binary->protocol);
+       event_set_log_message_callback(client->event, client_log_msg_callback,
+                                      client);
        client->trusted = client_is_trusted(client);
 
        if (conn->proxied) {
@@ -218,15 +228,6 @@ client_alloc(int fd, pool_t pool,
        }
        client->proxy_ttl = LOGIN_PROXY_TTL;
 
-       client->event = event_create(NULL);
-       event_add_category(client->event, &login_binary->event_category);
-       event_add_str(client->event, "local_ip", net_ip2addr(&conn->local_ip));
-       event_add_int(client->event, "local_port", conn->local_port);
-       event_add_str(client->event, "remote_ip", net_ip2addr(&conn->remote_ip));
-       event_add_int(client->event, "remote_port", conn->remote_port);
-       event_add_str(client->event, "service", login_binary->protocol);
-       event_set_log_message_callback(client->event, client_log_msg_callback,
-                                      client);
 
        client_open_streams(client);
        return client;