From: Timo Sirainen Date: Mon, 29 Oct 2012 16:32:40 +0000 (+0200) Subject: master: Ignore service {} blocks with empty executable settings. X-Git-Tag: 2.2.alpha1~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d06f521ae13ba145fe4e60bfbf7afaf1cdebaed;p=thirdparty%2Fdovecot%2Fcore.git master: Ignore service {} blocks with empty executable settings. --- diff --git a/src/master/master-settings.c b/src/master/master-settings.c index d7b9d970db..7a63b55758 100644 --- a/src/master/master-settings.c +++ b/src/master/master-settings.c @@ -505,12 +505,8 @@ master_settings_verify(void *_set, pool_t pool, const char **error_r) continue; } - if (*service->executable == '\0') { - *error_r = t_strdup_printf("service(%s): " - "executable is empty", service->name); - return FALSE; - } - if (*service->executable != '/') { + if (*service->executable != '/' && + *service->executable != '\0') { service->executable = p_strconcat(pool, set->libexec_dir, "/", service->executable, NULL); diff --git a/src/master/service.c b/src/master/service.c index 13fd31354a..11b33aaf77 100644 --- a/src/master/service.c +++ b/src/master/service.c @@ -231,7 +231,6 @@ service_create(pool_t pool, const struct service_settings *set, service->idle_kill = set->idle_kill != 0 ? set->idle_kill : set->master_set->default_idle_kill; service->type = service->set->parsed_type; - service->executable = set->executable; if (set->process_limit == 0) { /* use default */ @@ -357,6 +356,7 @@ service_create(pool_t pool, const struct service_settings *set, return NULL; } + service->executable = set->executable; if (access(t_strcut(service->executable, ' '), X_OK) < 0) { *error_r = t_strdup_printf("access(%s) failed: %m", t_strcut(service->executable, ' ')); @@ -397,6 +397,13 @@ static bool service_want(struct service_settings *set) { char *const *proto; + if (*set->executable == '\0') { + /* silently allow service {} blocks for disabled extensions + (e.g. service managesieve {} block without pigeonhole + installed) */ + return FALSE; + } + if (*set->protocol == '\0') return TRUE;