]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Replace inet_listener { address } with the global listen config
authorMarkus Valentin <markus.valentin@open-xchange.com>
Fri, 29 Dec 2023 08:50:20 +0000 (09:50 +0100)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:12 +0000 (12:34 +0200)
src/lib-master/service-settings.h
src/master/master-settings.c
src/master/service.c

index ee4cf1110ae58450334da07e58d536df161f0b9e..8b5baed8b94243f4ce1f881b92906e26306dcf83 100644 (file)
@@ -44,8 +44,9 @@ struct inet_listener_settings {
        pool_t pool;
        const char *name;
        const char *type;
-       const char *address;
        in_port_t port;
+       /* copied from master_settings: */
+       const char *listen;
        bool ssl;
        bool reuse_port;
        bool haproxy;
index 5085cd1eb697d08116ce2eb9d599c8d3ab7e82b3..eacfbf6cbf4d914277658d3e92b273506900b990 100644 (file)
@@ -82,7 +82,6 @@ const struct setting_parser_info fifo_listener_setting_parser_info = {
 static const struct setting_define inet_listener_setting_defines[] = {
        DEF(STR, name),
        DEF(STR, type),
-       DEF(STR_NOVARS, address), /* NOVARS to avoid expanding %scope */
        DEF(IN_PORT, port),
        DEF(BOOL, ssl),
        DEF(BOOL, reuse_port),
@@ -94,7 +93,6 @@ static const struct setting_define inet_listener_setting_defines[] = {
 static const struct inet_listener_settings inet_listener_default_settings = {
        .name = "",
        .type = "",
-       .address = "",
        .port = 0,
        .ssl = FALSE,
        .reuse_port = FALSE,
@@ -326,7 +324,7 @@ static void add_inet_listeners(ARRAY_TYPE(inet_listener_settings) *l,
 
        array_foreach_elem(l, set) {
                if (set->port != 0) {
-                       str = t_strdup_printf("%u:%s", set->port, set->address);
+                       str = t_strdup_printf("%u:%s", set->port, set->listen);
                        array_push_back(all_listeners, &str);
                }
        }
@@ -459,6 +457,7 @@ master_service_get_inet_listeners(struct service_settings *service_set,
                                  const char **error_r)
 {
        const struct inet_listener_settings *listener_set;
+       const struct master_settings *master_set;
        const char *name, *error;
        bool ret = TRUE;
 
@@ -480,10 +479,26 @@ master_service_get_inet_listeners(struct service_settings *service_set,
                        ret = FALSE;
                        break;
                }
+
+               event_add_str(event, "inet_listener", name);
+               if (settings_get(event, &master_setting_parser_info,
+                                SETTINGS_GET_FLAG_NO_CHECK,
+                                &master_set, &error) < 0) {
+                       *error_r = t_strdup_printf(
+                               "Failed to get inet_listener %s: %s",
+                               name, error);
+                       ret = FALSE;
+                       settings_free(listener_set);
+                       break;
+               }
+
                struct inet_listener_settings *listener_set_dup =
                        p_memdup(pool, listener_set, sizeof(*listener_set));
 
                pool_add_external_ref(pool, listener_set->pool);
+               listener_set_dup->listen = p_strdup(pool, master_set->listen);
+               settings_free(master_set);
+
                array_push_back(&service_set->parsed_inet_listeners,
                                &listener_set_dup);
                settings_free(listener_set);
index 3dbd21519aa8cc68e8db2525a4465423c1e15e36..ab3ee7fc4ea6b98a62a2cbd2a57b17abb75101ee 100644 (file)
@@ -140,8 +140,8 @@ service_create_inet_listeners(struct service *service,
                return 0;
        }
 
-       if (*set->address != '\0')
-               addresses = set->address;
+       if (*set->listen != '\0')
+               addresses = set->listen;
        else {
                /* use the default listen address */
                addresses = service->list->set->listen;