From fb9daf723e283825cc6cfa0090c720438dfcf50a Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Jan 25 2011 16:08:08 +0000 Subject: juggle the umask correctly when creating intermediates --- diff --git a/src/selinux.c b/src/selinux.c index 5130cce..d2482cf 100644 --- a/src/selinux.c +++ b/src/selinux.c @@ -124,7 +124,7 @@ oddjob_selinux_mkdir(const char *newpath, mode_t mode, uid_t uid, gid_t gid) char *q; int i; struct stat st; - mode_t stored_umask; + mode_t stored_umask, perms; /* Collapse instances of "//" to "/". */ if (strlen(newpath) < sizeof(tmp)) { @@ -157,8 +157,9 @@ oddjob_selinux_mkdir(const char *newpath, mode_t mode, uid_t uid, gid_t gid) S_IXGRP | S_IXOTH | S_IFDIR); - stored_umask = umask(0777); - i = mkdir(path, S_IRWXU | S_IXGRP | S_IXOTH); + perms = S_IRWXU | S_IXGRP | S_IXOTH; + stored_umask = umask(~perms); + i = mkdir(path, perms); umask(stored_umask); oddjob_unset_selinux_file_creation_context(); if ((i == -1) && (errno != EEXIST)) {