]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
safe_mkstemp()'s mode parameter didn't override umask as it was supposed to.
authorTimo Sirainen <tss@iki.fi>
Fri, 1 May 2009 16:30:07 +0000 (12:30 -0400)
committerTimo Sirainen <tss@iki.fi>
Fri, 1 May 2009 16:30:07 +0000 (12:30 -0400)
--HG--
branch : HEAD

src/lib/safe-mkstemp.c

index 9891e154950b2df5fdccea6cb76f498aa33d089e..be950df2beb57dae82595a0a4410e3cdd0464b05 100644 (file)
@@ -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;