From 276b44ece4a303e37e5f22fe8a5c5acf7b0ec973 Mon Sep 17 00:00:00 2001 From: Alexandre Ratchov Date: Wed, 25 Nov 2015 20:50:17 +0100 Subject: [PATCH] save & restore umask when creating socket dir --- sndiod/sndiod.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sndiod/sndiod.c b/sndiod/sndiod.c index a8381ae..e4cabae 100644 --- a/sndiod/sndiod.c +++ b/sndiod/sndiod.c @@ -257,7 +257,7 @@ getbasepath(char *base, size_t size) { uid_t uid; struct stat sb; - mode_t mask; + mode_t mask, omask; uid = geteuid(); if (uid == 0) { @@ -267,10 +267,12 @@ getbasepath(char *base, size_t size) mask = 077; snprintf(base, SOCKPATH_MAX, SOCKPATH_DIR "-%u", uid); } - if (mkdir(base, 0777 & ~mask) < 0) { + 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)