save & restore umask when creating socket dir

This commit is contained in:
Alexandre Ratchov 2015-11-25 20:50:17 +01:00
parent c8a50a21ea
commit 276b44ece4
1 changed files with 4 additions and 2 deletions

View File

@ -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)