=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sndiod/sndiod.c,v retrieving revision 1.13 retrieving revision 1.14 diff -c -r1.13 -r1.14 *** src/usr.bin/sndiod/sndiod.c 2015/11/22 16:52:06 1.13 --- src/usr.bin/sndiod/sndiod.c 2015/11/23 12:01:04 1.14 *************** *** 1,4 **** ! /* $OpenBSD: sndiod.c,v 1.13 2015/11/22 16:52:06 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * --- 1,4 ---- ! /* $OpenBSD: sndiod.c,v 1.14 2015/11/23 12:01:04 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * *************** *** 255,261 **** { uid_t uid; struct stat sb; ! mode_t mask; uid = geteuid(); if (uid == 0) { --- 255,261 ---- { uid_t uid; struct stat sb; ! mode_t mask, omask; uid = geteuid(); if (uid == 0) { *************** *** 265,274 **** mask = 077; snprintf(base, SOCKPATH_MAX, SOCKPATH_DIR "-%u", uid); } ! if (mkdir(base, 0777 & ~mask) < 0) { if (errno != EEXIST) err(1, "mkdir(\"%s\")", base); } if (stat(base, &sb) < 0) err(1, "stat(\"%s\")", base); if (sb.st_uid != uid || (sb.st_mode & mask) != 0) --- 265,276 ---- mask = 077; snprintf(base, SOCKPATH_MAX, SOCKPATH_DIR "-%u", uid); } ! omask = umask(mask); ! if (mkdir(base, 0777) < 0) { if (errno != EEXIST) err(1, "mkdir(\"%s\")", base); } + umask(omask); if (stat(base, &sb) < 0) err(1, "stat(\"%s\")", base); if (sb.st_uid != uid || (sb.st_mode & mask) != 0)