Mercurial > dovecot > core-2.2
changeset 9783:252bb3d23fb9 HEAD
master: Allow inet_listener address to specify multiple addresses.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 13 Aug 2009 14:17:57 -0400 |
parents | e4235adb3044 |
children | 3296870a8510 |
files | dovecot-master-example.conf src/master/service.c |
diffstat | 2 files changed, 29 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/dovecot-master-example.conf Thu Aug 13 13:31:27 2009 -0400 +++ b/dovecot-master-example.conf Thu Aug 13 14:17:57 2009 -0400 @@ -63,22 +63,12 @@ type = auth-source executable = imap-login - # IPv4 inet_listener { + address = *, :: port = 143 } inet_listener { - port = 993 - ssl = yes - } - - # IPv6 - inet_listener { - address = :: - port = 143 - } - inet_listener { - address = :: + address = *, :: port = 993 ssl = yes } @@ -98,22 +88,12 @@ type = auth-source executable = pop3-login - # IPv4 inet_listener { + address = *, :: port = 110 } inet_listener { - port = 995 - ssl = yes - } - - # IPv6 - inet_listener { - address = :: - port = 110 - } - inet_listener { - address = :: + address = *, :: port = 995 ssl = yes }
--- a/src/master/service.c Thu Aug 13 13:31:27 2009 -0400 +++ b/src/master/service.c Thu Aug 13 14:17:57 2009 -0400 @@ -88,9 +88,9 @@ } static struct service_listener * -service_create_inet_listener(struct service *service, - const struct inet_listener_settings *set, - const char **error_r) +service_create_one_inet_listener(struct service *service, + const struct inet_listener_settings *set, + const char *address, const char **error_r) { struct service_listener *l; @@ -100,7 +100,7 @@ l->fd = -1; l->set.inetset.set = set; - if (resolve_ip(set->address, &l->set.inetset.ip, error_r) < 0) + if (resolve_ip(address, &l->set.inetset.ip, error_r) < 0) return NULL; if (set->port == 0) { @@ -115,6 +115,25 @@ return l; } +static int +service_create_inet_listeners(struct service *service, + const struct inet_listener_settings *set, + const char **error_r) +{ + static struct service_listener *l; + const char *const *tmp; + + tmp = t_strsplit_spaces(set->address, ", "); + for (; *tmp != NULL; tmp++) { + l = service_create_one_inet_listener(service, set, *tmp, + error_r); + if (l == NULL) + return -1; + array_append(&service->listeners, &l, 1); + } + return 0; +} + static struct service * service_create(pool_t pool, const struct service_settings *set, struct service_list *service_list, const char **error_r) @@ -255,11 +274,9 @@ array_append(&service->listeners, &l, 1); } for (i = 0; i < inet_count; i++) { - l = service_create_inet_listener(service, inet_listeners[i], - error_r); - if (l == NULL) + if (service_create_inet_listeners(service, inet_listeners[i], + error_r) < 0) return NULL; - array_append(&service->listeners, &l, 1); } return service;