From: Todd C. Miller Date: Thu, 28 Mar 2013 19:40:32 +0000 (-0400) Subject: Stash umask in struct sudo_user so we don't need to look it up later. X-Git-Tag: SUDO_1_8_7~1^2~123 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=38dac1e0a4e9208a1dc489048cfaaec20dab502d;p=sudo Stash umask in struct sudo_user so we don't need to look it up later. --- diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 845675b03..6876bc237 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -17,6 +17,7 @@ #include #include +#include #include #include #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); diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 821f4e9ce..bebedabcf 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -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)) { diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index c65ba1823..4e45aa617 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -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)