]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Fail at startup if default_login_user or default_internal_user doesn't exist.
authorTimo Sirainen <tss@iki.fi>
Fri, 3 Jun 2011 14:37:25 +0000 (17:37 +0300)
committerTimo Sirainen <tss@iki.fi>
Fri, 3 Jun 2011 14:37:25 +0000 (17:37 +0300)
src/config/settings-get.pl
src/master/master-settings.c

index 9d76880080f18626f459f9c8fcf7eaa6a2dde917..edffc7ddfc79152c093b230639d4bd0dfa84590b 100755 (executable)
@@ -3,6 +3,7 @@ use strict;
 
 print '#include "lib.h"'."\n";
 print '#include "array.h"'."\n";
+print '#include "ipwd.h"'."\n";
 print '#include "var-expand.h"'."\n";
 print '#include "file-lock.h"'."\n";
 print '#include "fsync-mode.h"'."\n";
index bd69d724ae315a039cb9c316362d97b4e57a70f0..4f495273c8363f95aa7ec987ca14ebe2f31b5115 100644 (file)
@@ -6,6 +6,7 @@
 #include "istream.h"
 #include "network.h"
 #include "str.h"
+#include "ipwd.h"
 #include "mkdir-parents.h"
 #include "safe-mkdir.h"
 #include "settings-parser.h"
@@ -407,6 +408,7 @@ master_settings_verify(void *_set, pool_t pool, const char **error_r)
        struct service_settings *const *services;
        const char *const *strings;
        ARRAY_TYPE(const_string) all_listeners;
+       struct passwd pw;
        unsigned int i, j, count, len, client_limit, process_limit;
        unsigned int max_auth_client_processes, max_anvil_client_processes;
 
@@ -427,6 +429,17 @@ master_settings_verify(void *_set, pool_t pool, const char **error_r)
                return FALSE;
        }
 
+       if (i_getpwnam(set->default_login_user, &pw) == 0) {
+               *error_r = t_strdup_printf("default_login_user doesn't exist: %s",
+                                          set->default_login_user);
+               return FALSE;
+       }
+       if (i_getpwnam(set->default_internal_user, &pw) == 0) {
+               *error_r = t_strdup_printf("default_internal_user doesn't exist: %s",
+                                          set->default_internal_user);
+               return FALSE;
+       }
+
        /* check that we have at least one service. the actual service
           structure validity is checked later while creating them. */
        if (!array_is_created(&set->services) ||