From: Timo Sirainen Date: Tue, 16 Mar 2010 12:29:25 +0000 (+0200) Subject: safe_mkdir(): uid/gid can now be -1 to mean "don't change it". X-Git-Tag: 2.0.beta4~55 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0991f7f498f3b751e96fce8d6226d1abb4299597;p=thirdparty%2Fdovecot%2Fcore.git safe_mkdir(): uid/gid can now be -1 to mean "don't change it". --HG-- branch : HEAD --- diff --git a/src/lib/safe-mkdir.c b/src/lib/safe-mkdir.c index 3fadebef26..7f8185be53 100644 --- a/src/lib/safe-mkdir.c +++ b/src/lib/safe-mkdir.c @@ -39,7 +39,8 @@ int safe_mkdir(const char *dir, mode_t mode, uid_t uid, gid_t gid) /* change the file owner first, since it's the only user one who can mess up with the file mode. */ - if (st.st_uid != uid || st.st_gid != gid) { + if ((st.st_uid != uid && uid != (uid_t)-1) || + (st.st_gid != gid && gid != (gid_t)-1)) { if (fchown(fd, uid, gid) < 0) i_fatal("fchown() failed for %s: %m", dir); ret = changed_ret; @@ -65,7 +66,8 @@ int safe_mkdir(const char *dir, mode_t mode, uid_t uid, gid_t gid) i_fatal("safe_mkdir() failed: %s (%o) is still not mode %o", dir, (int)st.st_mode, (int)mode); } - if (st.st_uid != uid || st.st_gid != gid) { + if ((st.st_uid != uid && uid != (uid_t)-1) || + (st.st_gid != gid && gid != (gid_t)-1)) { i_fatal("safe_mkdir() failed: %s (%s, %s) " "is still not owned by %s.%s", dir, dec2str(st.st_uid), dec2str(st.st_gid),