From: Timo Sirainen Date: Sun, 24 Jun 2012 18:43:48 +0000 (+0300) Subject: master: Problems with creating base_dir/statedir should be fatals. X-Git-Tag: 2.2.alpha1~462 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=121b017684fbe76e9ea270afcae16fc2f22a347a;p=thirdparty%2Fdovecot%2Fcore.git master: Problems with creating base_dir/statedir should be fatals. --- diff --git a/src/master/master-settings.c b/src/master/master-settings.c index aa8542ce36..f2b71b2371 100644 --- a/src/master/master-settings.c +++ b/src/master/master-settings.c @@ -708,7 +708,7 @@ static void unlink_sockets(const char *path, const char *prefix) (void)closedir(dirp); } -bool master_settings_do_fixes(const struct master_settings *set) +void master_settings_do_fixes(const struct master_settings *set) { const char *login_dir, *empty_dir; struct stat st; @@ -716,19 +716,13 @@ bool master_settings_do_fixes(const struct master_settings *set) /* since base dir is under /var/run by default, it may have been deleted. */ - if (mkdir_parents(set->base_dir, 0755) < 0 && errno != EEXIST) { - i_error("mkdir(%s) failed: %m", set->base_dir); - return FALSE; - } + if (mkdir_parents(set->base_dir, 0755) < 0 && errno != EEXIST) + i_fatal("mkdir(%s) failed: %m", set->base_dir); /* allow base_dir to be a symlink, so don't use lstat() */ - if (stat(set->base_dir, &st) < 0) { - i_error("stat(%s) failed: %m", set->base_dir); - return FALSE; - } - if (!S_ISDIR(st.st_mode)) { - i_error("%s is not a directory", set->base_dir); - return FALSE; - } + if (stat(set->base_dir, &st) < 0) + i_fatal("stat(%s) failed: %m", set->base_dir); + if (!S_ISDIR(st.st_mode)) + i_fatal("%s is not a directory", set->base_dir); if ((st.st_mode & 0755) != 0755) { i_warning("Fixing permissions of %s to be world-readable", set->base_dir); @@ -737,10 +731,8 @@ bool master_settings_do_fixes(const struct master_settings *set) } /* Make sure our permanent state directory exists */ - if (mkdir_parents(PKG_STATEDIR, 0750) < 0 && errno != EEXIST) { - i_error("mkdir(%s) failed: %m", PKG_STATEDIR); - return FALSE; - } + if (mkdir_parents(PKG_STATEDIR, 0750) < 0 && errno != EEXIST) + i_fatal("mkdir(%s) failed: %m", PKG_STATEDIR); login_dir = t_strconcat(set->base_dir, "/login", NULL); if (settings_have_auth_unix_listeners_in(set, login_dir)) { @@ -758,10 +750,8 @@ bool master_settings_do_fixes(const struct master_settings *set) unlink_sockets(login_dir, ""); } else { /* still make sure that login directory exists */ - if (mkdir(login_dir, 0755) < 0 && errno != EEXIST) { - i_error("mkdir(%s) failed: %m", login_dir); - return FALSE; - } + if (mkdir(login_dir, 0755) < 0 && errno != EEXIST) + i_fatal("mkdir(%s) failed: %m", login_dir); } empty_dir = t_strconcat(set->base_dir, "/empty", NULL); @@ -769,5 +759,4 @@ bool master_settings_do_fixes(const struct master_settings *set) i_warning("Corrected permissions for empty directory " "%s", empty_dir); } - return TRUE; } diff --git a/src/master/master-settings.h b/src/master/master-settings.h index bc94270b57..f2857e255f 100644 --- a/src/master/master-settings.h +++ b/src/master/master-settings.h @@ -29,6 +29,6 @@ struct master_settings { extern const struct setting_parser_info master_setting_parser_info; -bool master_settings_do_fixes(const struct master_settings *set); +void master_settings_do_fixes(const struct master_settings *set); #endif