do not umask() [with the wrong umask] around mkstemp() calls, no matter
authorderaadt <deraadt@openbsd.org>
Mon, 12 Oct 2015 07:58:19 +0000 (07:58 +0000)
committerderaadt <deraadt@openbsd.org>
Mon, 12 Oct 2015 07:58:19 +0000 (07:58 +0000)
how broken other systems are.
ok guenther gilles

usr.sbin/smtpd/makemap.c
usr.sbin/smtpd/smtpctl.c
usr.sbin/smtpd/smtpd.c
usr.sbin/smtpd/util.c

index 641d469..f54bd57 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: makemap.c,v 1.53 2015/10/06 06:04:46 gilles Exp $     */
+/*     $OpenBSD: makemap.c,v 1.54 2015/10/12 07:58:19 deraadt Exp $    */
 
 /*
  * Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -97,7 +97,6 @@ main(int argc, char *argv[])
        int              ch;
        DBTYPE           dbtype = DB_HASH;
        char            *p;
-       mode_t           omode;
 
        log_init(1);
 
@@ -185,10 +184,8 @@ main(int argc, char *argv[])
 
        if (! bsnprintf(dbname, sizeof(dbname), "%s.XXXXXXXXXXX", oflag))
                errx(1, "path too long");
-       omode = umask(07077);
        if (mkstemp(dbname) == -1)
                err(1, "mkstemp");
-       umask(omode);
 
        db = dbopen(dbname, O_EXLOCK|O_RDWR|O_SYNC, 0644, dbtype, NULL);
        if (db == NULL) {
index b53d2c2..27e454e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: smtpctl.c,v 1.128 2015/10/09 14:37:38 gilles Exp $    */
+/*     $OpenBSD: smtpctl.c,v 1.129 2015/10/12 07:58:19 deraadt Exp $   */
 
 /*
  * Copyright (c) 2013 Eric Faurot <eric@openbsd.org>
@@ -139,7 +139,6 @@ FILE *
 offline_file(void)
 {
        char    path[PATH_MAX];
-       mode_t  omode;
        int     fd;
        FILE   *fp;
 
@@ -147,13 +146,11 @@ offline_file(void)
                PATH_OFFLINE, (long long int) time(NULL)))
                err(EX_UNAVAILABLE, "snprintf");
 
-       omode = umask(07077);
        if ((fd = mkstemp(path)) == -1 || (fp = fdopen(fd, "w+")) == NULL) {
                if (fd != -1)
                        unlink(path);
                err(EX_UNAVAILABLE, "cannot create temporary file %s", path);
        }
-       umask(omode);
 
        if (fchmod(fd, 0600) == -1) {
                unlink(path);
index 47235c0..ff8685f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: smtpd.c,v 1.243 2015/10/09 17:44:25 gilles Exp $      */
+/*     $OpenBSD: smtpd.c,v 1.244 2015/10/12 07:58:19 deraadt Exp $     */
 
 /*
  * Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -907,7 +907,6 @@ forkmda(struct mproc *p, uint64_t id, struct deliver *deliver)
        struct child    *child;
        pid_t            pid;
        int              allout, pipefd[2];
-       mode_t           omode;
 
        log_debug("debug: smtpd: forking mda for session %016"PRIx64
            ": \"%s\" as %s", id, deliver->to, deliver->user);
@@ -943,9 +942,7 @@ forkmda(struct mproc *p, uint64_t id, struct deliver *deliver)
 
        /* prepare file which captures stdout and stderr */
        (void)strlcpy(sfn, "/tmp/smtpd.out.XXXXXXXXXXX", sizeof(sfn));
-       omode = umask(07077);
        allout = mkstemp(sfn);
-       umask(omode);
        if (allout < 0) {
                (void)snprintf(ebuf, sizeof ebuf, "mkstemp: %s", strerror(errno));
                m_create(p_pony, IMSG_MDA_DONE, 0, 0, -1);
index a2d9cc6..a4810fd 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: util.c,v 1.119 2015/10/10 11:42:49 jung Exp $ */
+/*     $OpenBSD: util.c,v 1.120 2015/10/12 07:58:19 deraadt Exp $      */
 
 /*
  * Copyright (c) 2000,2001 Markus Friedl.  All rights reserved.
@@ -377,7 +377,6 @@ mktmpfile(void)
 {
        char            path[PATH_MAX];
        int             fd;
-       mode_t          omode;
 
        if (! bsnprintf(path, sizeof(path), "%s/smtpd.XXXXXXXXXX",
                PATH_TEMPORARY)) {
@@ -385,12 +384,10 @@ mktmpfile(void)
                fatal("exiting");
        }
 
-       omode = umask(07077);
        if ((fd = mkstemp(path)) == -1) {
                log_warn("cannot create temporary file %s", path);
                fatal("exiting");
        }
-       umask(omode);
        unlink(path);
        return (fd);
 }