]> granicus.if.org Git - sudo/commitdiff
Add env_file Defaults option that is similar to /etc/environment on some
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 3 May 2008 00:53:21 +0000 (00:53 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 3 May 2008 00:53:21 +0000 (00:53 +0000)
systems.

WHATSNEW
def_data.c
def_data.h
def_data.in
env.c
sudo.c
sudo.h
sudoers.cat
sudoers.man.in
sudoers.pod

index 81b51cfe6e61db86764ebdf35550e9b04650a34e..372e45b2a363a51b8a54f6aaf232a0ef4f5ef0ea 100644 (file)
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -59,6 +59,9 @@ What's new in Sudo 1.7.0?
    "From:" field in the warning/error mail.  If unspecified, the
    login name of the invoking user is used.
 
+ * A new Defaults option, "env_file" that refers to a file containing
+   environment variables to be set in the command being run.
+
  * A new flag, -n, may be used to indicate that sudo should not
    prompt the user for a password and, instead, exit with an error
    if authentication is required.
index eed0cab8dc8c2ff9d1539be4d7923a3a730d5279..0dd21be8c850dc4957e8a18abf915d6c9f665815 100644 (file)
@@ -290,6 +290,10 @@ struct sudo_defs_types sudo_defs_table[] = {
        "askpass", T_STR|T_PATH|T_BOOL,
        "Path to the askpass helper program: %s",
        NULL,
+    }, {
+       "env_file", T_STR|T_PATH|T_BOOL,
+       "Path to the sudo-specific environment file: %s",
+       NULL,
     }, {
        NULL, 0, NULL
     }
index a01f41ae3da2f5b477da23368859a0ff9b8f4af0..103b55e850bef61feca67057d24ee56c7cb96848 100644 (file)
 #define I_TYPE                  65
 #define def_askpass             (sudo_defs_table[66].sd_un.str)
 #define I_ASKPASS               66
+#define def_env_file            (sudo_defs_table[67].sd_un.str)
+#define I_ENV_FILE              67
 
 enum def_tupple {
        never,
index ae2d784339179962844ad45efc9cdc7e1da4ebb7..fa58e8d1af385bcb3a13589b842173d222abc635 100644 (file)
@@ -214,3 +214,6 @@ type
 askpass
        T_STR|T_PATH|T_BOOL
        "Path to the askpass helper program: %s"
+env_file
+       T_STR|T_PATH|T_BOOL
+       "Path to the sudo-specific environment file: %s"
diff --git a/env.c b/env.c
index b9ee0ab34d86433eb845f79b4f42821f085d4b0a..10a1061fdc7f4ef0a5ff57af63db06b1a189641e 100644 (file)
--- a/env.c
+++ b/env.c
@@ -346,7 +346,8 @@ insert_env(str, dupcheck, dosync)
 
            for (nep = env.envp; *nep; nep++) {
                if (strncmp(str, *nep, varlen) == 0) {
-                   *nep = str;
+                   if (dupcheck != -1)
+                       *nep = str;
                    return;
                }
            }
@@ -738,7 +739,6 @@ validate_env_vars(env_vars)
     }
 }
 
-#if defined(__linux__) || defined(_AIX)
 /*
  * Read in /etc/environment ala AIX and Linux.
  * Lines are in the form of NAME=VALUE
@@ -746,8 +746,9 @@ validate_env_vars(env_vars)
  * character are skipped.
  */
 void
-read_env_file(path)
+read_env_file(path, replace)
     const char *path;
+    int replace;
 {
     FILE *fp;
     char *cp;
@@ -768,11 +769,10 @@ read_env_file(path)
        if (strchr(cp, '=') == NULL)
            continue;
 
-       insert_env(estrdup(cp), TRUE, TRUE);
+       insert_env(estrdup(cp), replace ? TRUE : -1, TRUE);
     }
     fclose(fp);
 }
-#endif /* __linux__ || _AIX */
 
 void
 init_envtables()
diff --git a/sudo.c b/sudo.c
index 58c8c7749c001cc15c65173d4c1d5bddcbc5c280..a4ed546138b44a2f82932eb5b0b18a69db549847 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -474,13 +474,17 @@ main(argc, argv, envp)
 
 #if defined(__linux__) || defined(_AIX)
            /* Insert system-wide environment variables. */
-           read_env_file(_PATH_ENVIRONMENT);
+           read_env_file(_PATH_ENVIRONMENT, TRUE);
 #endif
        }
 
        if (ISSET(sudo_mode, MODE_EDIT))
            exit(sudo_edit(NewArgc, NewArgv, envp));
 
+       /* Insert system-wide environment variables. */
+       if (def_env_file)
+           read_env_file(def_env_file, FALSE);
+
        /* Insert user-specified environment variables. */
        insert_env_vars(sudo_user.env_vars);
 
diff --git a/sudo.h b/sudo.h
index 4726a03a76d39a9b0b034e6fdd192ec006dc02d8..f7e7af208a89e53f9257cb3e5f8b5518ebfc21ad 100644 (file)
--- a/sudo.h
+++ b/sudo.h
@@ -284,7 +284,7 @@ void efree          __P((void *));
 void dump_defaults     __P((void));
 void dump_auth_methods __P((void));
 void init_envtables    __P((void));
-void read_env_file     __P((const char *));
+void read_env_file     __P((const char *, int));
 int lock_file          __P((int, int));
 int touch              __P((int, char *, struct timespec *));
 int user_is_exempt     __P((void));
index aac188e977507110cf51daad889d1f059c096026..6b6a305c5f181cc34e80c17068bb86b2744b79f0 100644 (file)
@@ -915,7 +915,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
                    _\ba_\bs_\bk_\bp_\ba_\bs_\bs may be overridden by the SUDO_ASKPASS environment
                    variable.
 
-
+       env_file    The _\be_\bn_\bv_\b__\bf_\bi_\bl_\be options specifies the fully-qualilfy path to a
 
 
 
@@ -928,6 +928,12 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
+                   file containing variables to be set in the environment of
+                   the program being run.  Entries in this file should be of
+                   the form VARIABLE=value.  Variables in this file are sub-
+                   ject to other s\bsu\bud\bdo\bo environment settings such as _\be_\bn_\bv_\b__\bk_\be_\be_\bp
+                   and _\be_\bn_\bv_\b__\bc_\bh_\be_\bc_\bk.
+
        exempt_group
                    Users in this group are exempt from password and PATH
                    requirements.  This is not set by default.
@@ -977,12 +983,6 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
                    ting a path turns on logging to a file; negating this
                    option turns it off.  By default, s\bsu\bud\bdo\bo logs via syslog.
 
-       mailerflags Flags to use when invoking mailer. Defaults to -\b-t\bt.
-
-       mailerpath  Path to mail program used to send warning mail.  Defaults
-                   to the path to sendmail found at configure time.
-
-
 
 
 1.7.0                      May  2, 2008                        15
@@ -994,6 +994,11 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
+       mailerflags Flags to use when invoking mailer. Defaults to -\b-t\bt.
+
+       mailerpath  Path to mail program used to send warning mail.  Defaults
+                   to the path to sendmail found at configure time.
+
        mailfrom    Address to use for the "from" address when sending warning
                    and error mail.  The address should be enclosed in double
                    quotes (") to protect against s\bsu\bud\bdo\bo interpreting the @ sign.
@@ -1042,12 +1047,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
                        environment if the variable's value contains % or /
                        characters.  This can be used to guard against printf-
                        style format vulnerabilities in poorly-written pro-
-                       grams.  The argument may be a double-quoted, space-sep-
-                       arated list or a single value without double-quotes.
-                       The list can be replaced, added to, deleted from, or
-                       disabled by using the =, +=, -=, and ! operators
-                       respectively.  Regardless of whether the env_reset
-                       option is enabled or disabled, variables specified by
+                       grams.  The argument may be a double-quoted, space-
 
 
 
@@ -1060,6 +1060,11 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
+                       separated list or a single value without double-quotes.
+                       The list can be replaced, added to, deleted from, or
+                       disabled by using the =, +=, -=, and ! operators
+                       respectively.  Regardless of whether the env_reset
+                       option is enabled or disabled, variables specified by
                        env_check will be preserved in the environment if they
                        pass the aforementioned check.  The default list of
                        environment variables to check is displayed when s\bsu\bud\bdo\bo
@@ -1106,14 +1111,9 @@ E\bEX\bXA\bAM\bMP\bPL\bLE\bES\bS
        Below are example _\bs_\bu_\bd_\bo_\be_\br_\bs entries.  Admittedly, some of these are a bit
        contrived.  First, we define our _\ba_\bl_\bi_\ba_\bs_\be_\bs:
 
-        # User alias specification
-        User_Alias     FULLTIMERS = millert, mikef, dowdy
-        User_Alias     PARTTIMERS = bostley, jwfox, crawl
-        User_Alias     WEBMASTERS = will, wendy, wim
 
-        # Runas alias specification
-        Runas_Alias    OP = root, operator
-        Runas_Alias    DB = oracle, sybase
+
+
 
 
 
@@ -1126,6 +1126,15 @@ E\bEX\bXA\bAM\bMP\bPL\bLE\bES\bS
 SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
+        # User alias specification
+        User_Alias     FULLTIMERS = millert, mikef, dowdy
+        User_Alias     PARTTIMERS = bostley, jwfox, crawl
+        User_Alias     WEBMASTERS = will, wendy, wim
+
+        # Runas alias specification
+        Runas_Alias    OP = root, operator
+        Runas_Alias    DB = oracle, sybase
+
         # Host alias specification
         Host_Alias     SPARC = bigtime, eclipse, moet, anchor :\
                        SGI = grolsch, dandelion, black :\
@@ -1172,25 +1181,24 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
        The _\bU_\bs_\be_\br _\bs_\bp_\be_\bc_\bi_\bf_\bi_\bc_\ba_\bt_\bi_\bo_\bn is the part that actually determines who may run
        what.
 
-        root           ALL = (ALL) ALL
-        %wheel         ALL = (ALL) ALL
-
-       We let r\bro\boo\bot\bt and any user in group w\bwh\bhe\bee\bel\bl run any command on any host as
-       any user.
 
-        FULLTIMERS     ALL = NOPASSWD: ALL
 
+1.7.0                      May  2, 2008                        18
 
 
 
-1.7.0                      May  2, 2008                        18
 
 
+SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
+        root           ALL = (ALL) ALL
+        %wheel         ALL = (ALL) ALL
 
-SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
+       We let r\bro\boo\bot\bt and any user in group w\bwh\bhe\bee\bel\bl run any command on any host as
+       any user.
 
+        FULLTIMERS     ALL = NOPASSWD: ALL
 
        Full time sysadmins (m\bmi\bil\bll\ble\ber\brt\bt, m\bmi\bik\bke\bef\bf, and d\bdo\bow\bwd\bdy\by) may run any command on
        any host without authenticating themselves.
@@ -1239,14 +1247,6 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
         jim            +biglab = ALL
 
-       The user j\bji\bim\bm may run any command on machines in the _\bb_\bi_\bg_\bl_\ba_\bb netgroup.
-       s\bsu\bud\bdo\bo knows that "biglab" is a netgroup due to the '+' prefix.
-
-        +secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
-
-       Users in the s\bse\bec\bcr\bre\bet\bta\bar\bri\bie\bes\bs netgroup need to help manage the printers as
-       well as add and remove users, so they are allowed to run those commands
-
 
 
 1.7.0                      May  2, 2008                        19
@@ -1258,6 +1258,13 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
+       The user j\bji\bim\bm may run any command on machines in the _\bb_\bi_\bg_\bl_\ba_\bb netgroup.
+       s\bsu\bud\bdo\bo knows that "biglab" is a netgroup due to the '+' prefix.
+
+        +secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
+
+       Users in the s\bse\bec\bcr\bre\bet\bta\bar\bri\bie\bes\bs netgroup need to help manage the printers as
+       well as add and remove users, so they are allowed to run those commands
        on all machines.
 
         fred           ALL = (DB) NOPASSWD: ALL
@@ -1305,13 +1312,6 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
        This is a bit tedious for users to type, so it is a prime candidate for
        encapsulating in a shell script.
 
-S\bSE\bEC\bCU\bUR\bRI\bIT\bTY\bY N\bNO\bOT\bTE\bES\bS
-       It is generally not effective to "subtract" commands from ALL using the
-       '!' operator.  A user can trivially circumvent this by copying the
-       desired command to a different name and then executing that.  For exam-
-       ple:
-
-           bill        ALL = ALL, !SU, !SHELLS
 
 
 
@@ -1324,6 +1324,14 @@ S\bSE\bEC\bCU\bUR\bRI\bIT\bTY\bY N\bNO\bOT\bTE\bES\bS
 SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
+S\bSE\bEC\bCU\bUR\bRI\bIT\bTY\bY N\bNO\bOT\bTE\bES\bS
+       It is generally not effective to "subtract" commands from ALL using the
+       '!' operator.  A user can trivially circumvent this by copying the
+       desired command to a different name and then executing that.  For exam-
+       ple:
+
+           bill        ALL = ALL, !SU, !SHELLS
+
        Doesn't really prevent b\bbi\bil\bll\bl from running the commands listed in _\bS_\bU or
        _\bS_\bH_\bE_\bL_\bL_\bS since he can simply copy those commands to a different name, or
        use a shell escape from an editor or other program.  Therefore, these
@@ -1370,14 +1378,6 @@ P\bPR\bRE\bEV\bVE\bEN\bNT\bTI\bIN\bNG\bG S\bSH\bHE\bEL\bLL\bL E\bES\bSC\bCA\bAP\bPE\bES\bS
                  in the standard library with its own that simply return an
                  error.  Unfortunately, there is no foolproof way to know
                  whether or not _\bn_\bo_\be_\bx_\be_\bc will work at compile-time.  _\bn_\bo_\be_\bx_\be_\bc
-                 should work on SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX,
-                 MacOS X, and HP-UX 11.x.  It is known n\bno\bot\bt to work on AIX and
-                 UnixWare.  _\bn_\bo_\be_\bx_\be_\bc is expected to work on most operating sys-
-                 tems that support the LD_PRELOAD environment variable.  Check
-                 your operating system's manual pages for the dynamic linker
-                 (usually ld.so, ld.so.1, dyld, dld.sl, rld, or loader) to see
-                 if LD_PRELOAD is supported.
-
 
 
 
@@ -1390,6 +1390,14 @@ P\bPR\bRE\bEV\bVE\bEN\bNT\bTI\bIN\bNG\bG S\bSH\bHE\bEL\bLL\bL E\bES\bSC\bCA\bAP\bPE\bES\bS
 SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
+                 should work on SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX,
+                 MacOS X, and HP-UX 11.x.  It is known n\bno\bot\bt to work on AIX and
+                 UnixWare.  _\bn_\bo_\be_\bx_\be_\bc is expected to work on most operating sys-
+                 tems that support the LD_PRELOAD environment variable.  Check
+                 your operating system's manual pages for the dynamic linker
+                 (usually ld.so, ld.so.1, dyld, dld.sl, rld, or loader) to see
+                 if LD_PRELOAD is supported.
+
                  To enable _\bn_\bo_\be_\bx_\be_\bc for a command, use the NOEXEC tag as docu-
                  mented in the User Specification section above.  Here is that
                  example again:
@@ -1436,6 +1444,18 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
        including, but not limited to, the implied warranties of merchantabil-
        ity and fitness for a particular purpose are disclaimed.  See the
        LICENSE file distributed with s\bsu\bud\bdo\bo or
+
+
+
+1.7.0                      May  2, 2008                        22
+
+
+
+
+
+SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
+
+
        http://www.sudo.ws/sudo/license.html for complete details.
 
 
@@ -1447,6 +1467,52 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.7.0                      May  2, 2008                        22
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1.7.0                      May  2, 2008                        23
 
 
index 746db052f18e406ab2d80d123a63d05c73c954ad..b0dae49ab85b135fe595981ac223629ec6d913e5 100644 (file)
@@ -1036,6 +1036,13 @@ specified by \fIaskpass\fR should display the argument passed to it
 as the prompt and write the user's password to the standard output.
 The value of \fIaskpass\fR may be overridden by the \f(CW\*(C`SUDO_ASKPASS\*(C'\fR
 environment variable.
+.IP "env_file" 12
+.IX Item "env_file"
+The \fIenv_file\fR options specifies the fully-qualilfy path to a file
+containing variables to be set in the environment of the program
+being run.  Entries in this file should be of the form \f(CW\*(C`VARIABLE=value\*(C'\fR.
+Variables in this file are subject to other \fBsudo\fR environment
+settings such as \fIenv_keep\fR and \fIenv_check\fR.
 .IP "exempt_group" 12
 .IX Item "exempt_group"
 Users in this group are exempt from password and \s-1PATH\s0 requirements.
index 59a1ad3e469236f0ec7000c4c4199f4b5485bbae..4f4d55e1d6097f0e856fba25970c192c350e638f 100644 (file)
@@ -926,6 +926,14 @@ as the prompt and write the user's password to the standard output.
 The value of I<askpass> may be overridden by the C<SUDO_ASKPASS>
 environment variable.
 
+=item env_file
+
+The I<env_file> options specifies the fully-qualilfy path to a file
+containing variables to be set in the environment of the program
+being run.  Entries in this file should be of the form C<VARIABLE=value>.
+Variables in this file are subject to other B<sudo> environment
+settings such as I<env_keep> and I<env_check>.
+
 =item exempt_group
 
 Users in this group are exempt from password and PATH requirements.