]> granicus.if.org Git - sudo/commitdiff
Stash umask in struct sudo_user so we don't need to look it up later.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 28 Mar 2013 19:40:32 +0000 (15:40 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 28 Mar 2013 19:40:32 +0000 (15:40 -0400)
plugins/sudoers/policy.c
plugins/sudoers/sudoers.c
plugins/sudoers/sudoers.h

index 845675b038a54f404949e294cd920a0291276445..6876bc237313a3921ac5ea18a90280d01fdca498 100644 (file)
@@ -17,6 +17,7 @@
 #include <config.h>
 
 #include <sys/types.h>
+#include <sys/stat.h>
 #include <netinet/in.h>
 #include <stdio.h>
 #ifdef STDC_HEADERS
@@ -318,6 +319,10 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group)
        user_ngids = ngids;
     }
 
+    /* Stash initial umask for later use. */
+    user_umask = umask(SUDO_UMASK);
+    umask(user_umask);
+
     /* Setup debugging if indicated. */
     if (debug_flags != NULL) {
        sudo_debug_init(NULL, debug_flags);
index 821f4e9ce28610e5d688e2ef8ff9cdfa690e263a..bebedabcfebb94c7d6a5cdb65a5100891e5556a0 100644 (file)
@@ -435,11 +435,8 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
      */
     if (def_umask != 0777) {
        cmnd_umask = def_umask;
-       if (!def_umask_override) {
-           mode_t omask = umask(cmnd_umask);
-           cmnd_umask |= omask;
-           umask(omask);
-       }
+       if (!def_umask_override)
+           cmnd_umask |= user_umask;
     }
 
     if (ISSET(sudo_mode, MODE_LOGIN_SHELL)) {
index c65ba182354df4a7bce48c725d7a2f92ceeed919..4e45aa6170cbfb1d1cffdf94e096de7dde806238 100644 (file)
@@ -94,6 +94,7 @@ struct sudo_user {
     int   cols;
     int   flags;
     int   max_groups;
+    mode_t umask;
     uid_t uid;
     uid_t gid;
     pid_t sid;
@@ -174,6 +175,7 @@ struct sudo_user {
 #define user_uid               (sudo_user.uid)
 #define user_gid               (sudo_user.gid)
 #define user_sid               (sudo_user.sid)
+#define user_umask             (sudo_user.umask)
 #define user_passwd            (sudo_user.pw->pw_passwd)
 #define user_dir               (sudo_user.pw->pw_dir)
 #define user_gids              (sudo_user.gids)