From: Timo Sirainen Date: Fri, 1 May 2009 16:30:07 +0000 (-0400) Subject: safe_mkstemp()'s mode parameter didn't override umask as it was supposed to. X-Git-Tag: 2.0.alpha1~861 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4ded3d18fa391ae5908f9834f1390cf55e8c99d5;p=thirdparty%2Fdovecot%2Fcore.git safe_mkstemp()'s mode parameter didn't override umask as it was supposed to. --HG-- branch : HEAD --- diff --git a/src/lib/safe-mkstemp.c b/src/lib/safe-mkstemp.c index 9891e15495..be950df2be 100644 --- a/src/lib/safe-mkstemp.c +++ b/src/lib/safe-mkstemp.c @@ -16,6 +16,7 @@ int safe_mkstemp(string_t *prefix, mode_t mode, uid_t uid, gid_t gid) size_t prefix_len; struct stat st; unsigned char randbuf[8]; + mode_t old_umask; int fd; prefix_len = str_len(prefix); @@ -32,7 +33,9 @@ int safe_mkstemp(string_t *prefix, mode_t mode, uid_t uid, gid_t gid) return -1; } - fd = open(str_c(prefix), O_RDWR | O_EXCL | O_CREAT, mode); + old_umask = umask(0666 ^ mode); + fd = open(str_c(prefix), O_RDWR | O_EXCL | O_CREAT, 0666); + umask(old_umask); if (fd != -1) break;