From: Timo Sirainen Date: Fri, 13 Mar 2009 19:11:46 +0000 (-0400) Subject: master: If login process has -D parameter, make login directory writable. X-Git-Tag: 1.2.beta2~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e53e93d1af90732e6385ac49216ada102901fb1e;p=thirdparty%2Fdovecot%2Fcore.git master: If login process has -D parameter, make login directory writable. --HG-- branch : HEAD --- diff --git a/src/master/master-settings.c b/src/master/master-settings.c index 39ad71a958..51ebe98218 100644 --- a/src/master/master-settings.c +++ b/src/master/master-settings.c @@ -941,6 +941,19 @@ static bool settings_verify(struct settings *set) return TRUE; } +static bool login_want_core_dumps(struct settings *set) +{ + const char *p; + + p = strstr(set->server->pop3->login_executable, " -D"); + if (p != NULL && p[3] == '\0') + return TRUE; + p = strstr(set->server->imap->login_executable, " -D"); + if (p != NULL && p[3] == '\0') + return TRUE; + return FALSE; +} + static bool settings_do_fixes(struct settings *set) { struct stat st; @@ -972,7 +985,8 @@ static bool settings_do_fixes(struct settings *set) empty. with external auth we wouldn't want to delete existing sockets or break the permissions required by the auth server. */ - if (safe_mkdir(set->login_dir, 0750, + mode_t mode = login_want_core_dumps(set) ? 0770 : 0750; + if (safe_mkdir(set->login_dir, mode, master_uid, set->server->login_gid) == 0) { i_warning("Corrected permissions for login directory " "%s", set->login_dir);