]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Ignore service {} blocks with empty executable settings.
authorTimo Sirainen <tss@iki.fi>
Mon, 29 Oct 2012 16:32:40 +0000 (18:32 +0200)
committerTimo Sirainen <tss@iki.fi>
Mon, 29 Oct 2012 16:32:40 +0000 (18:32 +0200)
src/master/master-settings.c
src/master/service.c

index d7b9d970dba816160ebb760bf77f16bb18a136ce..7a63b557584a2de2c3a1acb52d3e36a5f561d3b7 100644 (file)
@@ -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);
index 13fd31354a135f3216dcbcb288b84dc01354410f..11b33aaf77227de9b9c1022abe42b971b6d6ab6f 100644 (file)
@@ -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;