From: Markus Valentin Date: Fri, 29 Dec 2023 08:50:20 +0000 (+0100) Subject: master: Replace inet_listener { address } with the global listen config X-Git-Tag: 2.4.1~1034 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cfce328d0e41ed78a98ebecdf6199be2fb17b0ff;p=thirdparty%2Fdovecot%2Fcore.git master: Replace inet_listener { address } with the global listen config --- diff --git a/src/lib-master/service-settings.h b/src/lib-master/service-settings.h index ee4cf1110a..8b5baed8b9 100644 --- a/src/lib-master/service-settings.h +++ b/src/lib-master/service-settings.h @@ -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; diff --git a/src/master/master-settings.c b/src/master/master-settings.c index 5085cd1eb6..eacfbf6cbf 100644 --- a/src/master/master-settings.c +++ b/src/master/master-settings.c @@ -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); diff --git a/src/master/service.c b/src/master/service.c index 3dbd21519a..ab3ee7fc4e 100644 --- a/src/master/service.c +++ b/src/master/service.c @@ -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;