]> granicus.if.org Git - sudo/commitdiff
Add -U option to use in conjunction with -l instead of -u.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 24 Nov 2004 21:31:51 +0000 (21:31 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 24 Nov 2004 21:31:51 +0000 (21:31 +0000)
Add support for "sudo -l command" to test a specific command.

parse.c
sudo.c
sudo.cat
sudo.h
sudo.man.in
sudo.pod

diff --git a/parse.c b/parse.c
index 2e055e4f7724b36651ff300dceb9d1510150752e..c0ff6334ec38f334327a94746766f29b7fdd6842 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -135,7 +135,7 @@ sudoers_lookup(pwflag)
                }
            }
        }
-       if (matched == TRUE) {
+       if (matched == TRUE || user_uid == 0) {
            /* User has an entry for this host. */
            CLR(validated, VALIDATE_NOT_OK);
            SET(validated, VALIDATE_OK);
@@ -238,6 +238,42 @@ display_privs(pw)
     }
 }
 
+/*
+ * Check user_cmnd against sudoers and print the matching entry if the
+ * command is allowed.
+ */
+int
+display_cmnd(pw)
+    struct passwd *pw;
+{
+    struct cmndspec *cs;
+    struct member *match, *runas;
+    struct privilege *priv;
+    struct userspec *us;
+
+    for (match = NULL, us = userspecs; us != NULL; us = us->next) {
+       if (user_matches(pw, us->user) != TRUE ||
+         host_matches(us->privileges->hostlist) != TRUE)
+           continue;
+
+       for (priv = us->privileges; priv != NULL; priv = priv->next) {
+           runas = NULL;
+           for (cs = priv->cmndlist; cs != NULL; cs = cs->next) {
+               if (cs->runaslist != NULL)
+                   runas = cs->runaslist;
+               if (runas_matches(runas) == TRUE &&
+                 cmnd_matches(cs->cmnd) != UNSPEC) 
+                   match = cs->cmnd;
+           }
+       }
+    }
+    if (match == NULL || match->negated)
+       return(1);
+    printf("%s%s%s\n", safe_cmnd, user_args ? " " : "",
+       user_args ? user_args : "");
+    return(0);
+}
+
 /*
  * Print the contents of a struct member to stdout
  */
diff --git a/sudo.c b/sudo.c
index 53e0c3cf0846ea5ec562d693f264cf825e548fc2..c878324c84c356733af073c2055f7b73b4e270cb 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -239,6 +239,9 @@ main(argc, argv, envp)
                user_cmnd = "list";
                pwflag = I_LISTPW;
                break;
+           case MODE_CHECK:
+               pwflag = I_LISTPW;
+               break;
        }
 
     /* Must have a command to run... */
@@ -361,6 +364,8 @@ main(argc, argv, envp)
        log_auth(validated, 1);
        if (sudo_mode == MODE_VALIDATE)
            exit(0);
+       else if (sudo_mode == MODE_CHECK)
+           exit(display_cmnd(list_pw ? list_pw : sudo_user.pw));
        else if (sudo_mode == MODE_LIST) {
            display_privs(list_pw ? list_pw : sudo_user.pw);
 #ifdef HAVE_LDAP
@@ -548,7 +553,7 @@ init_vars(sudo_mode)
     /* It is now safe to use log_error() and set_perms() */
 
 #ifdef HAVE_GETGROUPS
-    if ((user_ngroups = getgroups(0, NULL)) > 0) {
+    if (list_pw == NULL && (user_ngroups = getgroups(0, NULL)) > 0) {
        user_groups = emalloc2(user_ngroups, sizeof(gid_t));
        if (getgroups(user_ngroups, user_groups) < 0)
            log_error(USE_ERRNO|MSG_ONLY, "can't get group vector");
@@ -618,8 +623,8 @@ set_cmnd(sudo_mode)
     /* Resolve the path and return. */
     rval = FOUND;
     user_stat = emalloc(sizeof(struct stat));
-    if (sudo_mode & (MODE_RUN | MODE_EDIT)) {
-       if (ISSET(sudo_mode, MODE_RUN)) {
+    if (sudo_mode & (MODE_RUN | MODE_EDIT | MODE_CHECK)) {
+       if (ISSET(sudo_mode, MODE_RUN | MODE_CHECK)) {
            set_perms(PERM_RUNAS);
            rval = find_path(NewArgv[0], &user_cmnd, user_stat, user_path);
            set_perms(PERM_ROOT);
@@ -817,6 +822,15 @@ parse_args(argc, argv)
            case 'S':
                SET(tgetpass_flags, TGP_STDIN);
                break;
+           case 'U':
+               /* Must have an associated list user. */
+               if (NewArgv[1] == NULL)
+                   usage(1);
+               if ((list_pw = sudo_getpwnam(NewArgv[1])) == NULL)
+                   errorx(1, "unknown user %s", NewArgv[1]);
+               NewArgc--;
+               NewArgv++;
+               break;
            case '-':
                NewArgc--;
                NewArgv++;
@@ -833,19 +847,23 @@ parse_args(argc, argv)
        NewArgc--;
        NewArgv++;
     }
+    if (NewArgc > 0 && rval == MODE_LIST)
+       rval = MODE_CHECK;
 
-    if (user_runas != NULL) {
-       if (rval == MODE_LIST) {
-           if ((list_pw = sudo_getpwnam(*user_runas)) == NULL)
-               errorx(1, "unknown user %s", *user_runas);
-           user_runas = NULL;
-       } else if (!ISSET(rval, (MODE_EDIT|MODE_RUN))) {
-           warningx("the `-u' and '-%c' options may not be used together", excl);
-           usage(1);
-       }
+    if (user_runas != NULL && !ISSET(rval, (MODE_EDIT|MODE_RUN|MODE_CHECK))) {
+       if (excl != '\0')
+           warningx("the `-u' and '-%c' options may not be used together",
+               excl);
+       usage(1);
+    }
+    if (list_pw != NULL && rval != MODE_LIST && rval != MODE_CHECK) {
+       if (excl != '\0')
+           warningx("the `-U' and '-%c' options may not be used together",
+               excl);
+       usage(1);
     }
     if ((NewArgc == 0 && (rval & MODE_EDIT)) ||
-       (NewArgc > 0 && !(rval & (MODE_RUN | MODE_EDIT))))
+       (NewArgc > 0 && !(rval & (MODE_RUN | MODE_EDIT | MODE_CHECK))))
        usage(1);
 
     return(rval);
@@ -1126,7 +1144,10 @@ usage(exit_val)
            continue;
        *p = " file [...]";
     } else {
-       fprintf(stderr, "usage: %s -K | -L | -V | -h | -k | -l | -v\n",
+       fprintf(stderr, "usage: %s -K | -L | -V | -h | -k | -v\n",
+           getprogname());
+       fprintf(stderr,
+           "usage: %s [-U username] [-u username|#uid] -l [command]\n",
            getprogname());
     }
 
index 02d9d5b00f73e2dce7d787141281964686375983..f9b56baf1cfb2fa65d2c4e480f7b1bd772793208 100644 (file)
--- a/sudo.cat
+++ b/sudo.cat
@@ -8,7 +8,9 @@ N\bNA\bAM\bME\bE
        sudo, sudoedit - execute a command as another user
 
 S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
-       s\bsu\bud\bdo\bo -\b-K\bK | -\b-L\bL | -\b-V\bV | -\b-h\bh | -\b-k\bk | -\b-l\bl | -\b-v\bv
+       s\bsu\bud\bdo\bo -\b-K\bK | -\b-L\bL | -\b-V\bV | -\b-h\bh | -\b-k\bk | -\b-v\bv
+
+       s\bsu\bud\bdo\bo [-\b-U\bU _\bu_\bs_\be_\br_\bn_\ba_\bm_\be] [-\b-u\bu _\bu_\bs_\be_\br_\bn_\ba_\bm_\be|_\b#_\bu_\bi_\bd] -\b-l\bl [_\bc_\bo_\bm_\bm_\ba_\bn_\bd]
 
        s\bsu\bud\bdo\bo [-\b-H\bHP\bPS\bSb\bb] [-\b-a\ba _\ba_\bu_\bt_\bh_\b__\bt_\by_\bp_\be] [-\b-c\bc _\bc_\bl_\ba_\bs_\bs|_\b-] [-\b-p\bp _\bp_\br_\bo_\bm_\bp_\bt]
        [-\b-u\bu _\bu_\bs_\be_\br_\bn_\ba_\bm_\be|_\b#_\bu_\bi_\bd] {-\b-e\be file [...] | -\b-i\bi | -\b-s\bs | _\bc_\bo_\bm_\bm_\ba_\bn_\bd}
@@ -56,12 +58,10 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        mands through sudo even when a root shell has been
        invoked.  It also allows the -\b-e\be flag to remain useful even
        when being run via a sudo-run script or program.  Note
-       however, that the sudoers lookup is still done for root,
-       not the user specified by SUDO_USER.
 
 
 
-1.6.9                   November 11, 2004                       1
+1.6.9                   November 24, 2004                       1
 
 
 
@@ -70,6 +70,9 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
 SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
 
 
+       however, that the sudoers lookup is still done for root,
+       not the user specified by SUDO_USER.
+
        s\bsu\bud\bdo\bo can log both successful and unsuccessful attempts (as
        well as errors) to _\bs_\by_\bs_\bl_\bo_\bg(3), a log file, or both.  By
        default s\bsu\bud\bdo\bo will log via _\bs_\by_\bs_\bl_\bo_\bg(3) but this is changeable
@@ -104,6 +107,11 @@ O\bOP\bPT\bTI\bIO\bON\bNS\bS
            from the standard input instead of the terminal
            device.
 
+       -U  The -\b-U\bU (_\bo_\bt_\bh_\be_\br _\bu_\bs_\be_\br) option is used in conjunction with
+           the -\b-l\bl option to specify the user whose privileges
+           should be listed.  Only root or a user with s\bsu\bud\bdo\bo ALL
+           on the current host may use this option.
+
        -V  The -\b-V\bV (_\bv_\be_\br_\bs_\bi_\bo_\bn) option causes s\bsu\bud\bdo\bo to print the ver­
            sion number and exit.  If the invoking user is already
            root the -\b-V\bV option will print out a list of the
@@ -116,25 +124,25 @@ O\bOP\bPT\bTI\bIO\bON\bNS\bS
            administrator may specify a list of sudo-specific
            authentication methods by adding an "auth-sudo" entry
            in /etc/login.conf.  This option is only available on
-           systems that support BSD authentication where s\bsu\bud\bdo\bo has
-           been configured with the --with-bsdauth option.
 
-       -b  The -\b-b\bb (_\bb_\ba_\bc_\bk_\bg_\br_\bo_\bu_\bn_\bd) option tells s\bsu\bud\bdo\bo to run the given
-           command in the background.  Note that if you use the
-           -\b-b\bb option you cannot use shell job control to manipu­
-           late the process.
 
 
+1.6.9                   November 24, 2004                       2
 
 
-1.6.9                   November 11, 2004                       2
 
 
 
+SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
 
 
-SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
+           systems that support BSD authentication where s\bsu\bud\bdo\bo has
+           been configured with the --with-bsdauth option.
 
+       -b  The -\b-b\bb (_\bb_\ba_\bc_\bk_\bg_\br_\bo_\bu_\bn_\bd) option tells s\bsu\bud\bdo\bo to run the given
+           command in the background.  Note that if you use the
+           -\b-b\bb option you cannot use shell job control to manipu­
+           late the process.
 
        -c  The -\b-c\bc (_\bc_\bl_\ba_\bs_\bs) option causes s\bsu\bud\bdo\bo to run the specified
            command with resources limited by the specified login
@@ -182,18 +190,10 @@ SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
            sage and exit.
 
        -i  The -\b-i\bi (_\bs_\bi_\bm_\bu_\bl_\ba_\bt_\be _\bi_\bn_\bi_\bt_\bi_\ba_\bl _\bl_\bo_\bg_\bi_\bn) option runs the shell
-           specified in the passwd(4) entry of the user that the
-           command is being run as.  The command name argument
-           given to the shell begins with a `-' to tell the shell
-           to run as a login shell.  s\bsu\bud\bdo\bo attempts to change to
-           that user's home directory before running the shell.
-           It also initializes the environment, leaving _\bT_\bE_\bR_\bM
-           unchanged, setting _\bH_\bO_\bM_\bE, _\bS_\bH_\bE_\bL_\bL, _\bU_\bS_\bE_\bR, _\bL_\bO_\bG_\bN_\bA_\bM_\bE, and
-           _\bP_\bA_\bT_\bH, and unsetting all other environment variables.
 
 
 
-1.6.9                   November 11, 2004                       3
+1.6.9                   November 24, 2004                       3
 
 
 
@@ -202,6 +202,15 @@ SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
 SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
 
 
+           specified in the passwd(4) entry of the user that the
+           command is being run as.  The command name argument
+           given to the shell begins with a `-' to tell the shell
+           to run as a login shell.  s\bsu\bud\bdo\bo attempts to change to
+           that user's home directory before running the shell.
+           It also initializes the environment, leaving _\bT_\bE_\bR_\bM
+           unchanged, setting _\bH_\bO_\bM_\bE, _\bS_\bH_\bE_\bL_\bL, _\bU_\bS_\bE_\bR, _\bL_\bO_\bG_\bN_\bA_\bM_\bE, and
+           _\bP_\bA_\bT_\bH, and unsetting all other environment variables.
+
        -k  The -\b-k\bk (_\bk_\bi_\bl_\bl) option to s\bsu\bud\bdo\bo invalidates the user's
            timestamp by setting the time on it to the epoch.  The
            next time s\bsu\bud\bdo\bo is run a password will be required.
@@ -209,11 +218,15 @@ SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
            to allow a user to revoke s\bsu\bud\bdo\bo permissions from a
            .logout file.
 
-       -l  The -\b-l\bl (_\bl_\bi_\bs_\bt) option will list out the allowed (and
-           forbidden) commands for the user on the current host.
-           If the -\b-u\bu flag is specified and the invoking user has
-           s\bsu\bud\bdo\bo ALL on the current host, the information listed
-           will be for the user specified by the -\b-u\bu flag.
+       -l [_\bc_\bo_\bm_\bm_\ba_\bn_\bd]
+           If no _\bc_\bo_\bm_\bm_\ba_\bn_\bd is specified, the -\b-l\bl (_\bl_\bi_\bs_\bt) option will
+           list the allowed (and forbidden) commands for the
+           invoking user (or the user specified by the -\b-U\bU option)
+           on the current host.  If a _\bc_\bo_\bm_\bm_\ba_\bn_\bd is specified and is
+           permitted by _\bs_\bu_\bd_\bo_\be_\br_\bs, the fully-qualified path to the
+           command is displayed along with any command line argu­
+           ments.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd is not allowed, s\bsu\bud\bdo\bo will exit with
+           a return value of 1.
 
        -p  The -\b-p\bp (_\bp_\br_\bo_\bm_\bp_\bt) option allows you to override the
            default password prompt and use a custom one.  The
@@ -243,30 +256,30 @@ SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
            command as a user other than _\br_\bo_\bo_\bt.  To specify a _\bu_\bi_\bd
            instead of a _\bu_\bs_\be_\br_\bn_\ba_\bm_\be, use _\b#_\bu_\bi_\bd.  Note that if the
            _\bt_\ba_\br_\bg_\be_\bt_\bp_\bw Defaults option is set (see sudoers(4)) it is
-           not possible to run commands with a uid not listed in
-           the password database.
 
-       -v  If given the -\b-v\bv (_\bv_\ba_\bl_\bi_\bd_\ba_\bt_\be) option, s\bsu\bud\bdo\bo will update
-           the user's timestamp, prompting for the user's pass­
-           word if necessary.  This extends the s\bsu\bud\bdo\bo timeout for
-           another 5 minutes (or whatever the timeout is set to
-           in _\bs_\bu_\bd_\bo_\be_\br_\bs) but does not run a command.
 
-       --  The -\b--\b- flag indicates that s\bsu\bud\bdo\bo should stop processing
-           command line arguments.  It is most useful in conjunc­
-           tion with the -\b-s\bs flag.
 
+1.6.9                   November 24, 2004                       4
 
 
 
-1.6.9                   November 11, 2004                       4
 
 
+SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
 
 
+           not possible to run commands with a uid not listed in
+           the password database.
 
-SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
+       -v  If given the -\b-v\bv (_\bv_\ba_\bl_\bi_\bd_\ba_\bt_\be) option, s\bsu\bud\bdo\bo will update
+           the user's timestamp, prompting for the user's pass­
+           word if necessary.  This extends the s\bsu\bud\bdo\bo timeout for
+           another 5 minutes (or whatever the timeout is set to
+           in _\bs_\bu_\bd_\bo_\be_\br_\bs) but does not run a command.
 
+       --  The -\b--\b- flag indicates that s\bsu\bud\bdo\bo should stop processing
+           command line arguments.  It is most useful in conjunc­
+           tion with the -\b-s\bs flag.
 
 R\bRE\bET\bTU\bUR\bRN\bN V\bVA\bAL\bLU\bUE\bES\bS
        Upon successful execution of a program, the return value
@@ -309,6 +322,18 @@ S\bSE\bEC\bCU\bUR\bRI\bIT\bTY\bY N\bNO\bOT\bTE\bES\bS
        as root.
 
        To prevent command spoofing, s\bsu\bud\bdo\bo checks "." and "" (both
+
+
+
+1.6.9                   November 24, 2004                       5
+
+
+
+
+
+SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
+
+
        denoting current directory) last when searching for a com­
        mand in the user's PATH (if one or both are in the PATH).
        Note, however, that the actual PATH environment variable
@@ -322,18 +347,6 @@ S\bSE\bEC\bCU\bUR\bRI\bIT\bTY\bY N\bNO\bOT\bTE\bES\bS
        cally.
 
        s\bsu\bud\bdo\bo will check the ownership of its timestamp directory
-
-
-
-1.6.9                   November 11, 2004                       5
-
-
-
-
-
-SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
-
-
        (_\b/_\bv_\ba_\br_\b/_\br_\bu_\bn_\b/_\bs_\bu_\bd_\bo by default) and ignore the directory's con­
        tents if it is not owned by root and only writable by
        root.  On systems that allow non-root users to give away
@@ -374,31 +387,32 @@ SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
 E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bNT\bT
        s\bsu\bud\bdo\bo utilizes the following environment variables:
 
-        EDITOR                 Default editor to use in -e (sudoedit) mode if
-                               VISUAL is not set
 
-        HOME                   In -s or -H mode (or if sudo was configured with
-                               the --enable-shell-sets-home option), set to
-                               homedir of the target user
 
-        PATH                   Set to a sane value if sudo was configured with
-                               the --with-secure-path option
 
-        SHELL                  Used to determine shell to run with -s option
 
-        SUDO_PROMPT            Used as the default password prompt
+1.6.9                   November 24, 2004                       6
 
 
 
 
-1.6.9                   November 11, 2004                       6
 
+SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
 
 
+        EDITOR                 Default editor to use in -e (sudoedit) mode if
+                               VISUAL is not set
+
+        HOME                   In -s or -H mode (or if sudo was configured with
+                               the --enable-shell-sets-home option), set to
+                               homedir of the target user
 
+        PATH                   Set to a sane value if sudo was configured with
+                               the --with-secure-path option
 
-SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
+        SHELL                  Used to determine shell to run with -s option
 
+        SUDO_PROMPT            Used as the default password prompt
 
         SUDO_COMMAND           Set to the command run by sudo
 
@@ -441,6 +455,17 @@ E\bEX\bXA\bAM\bMP\bPL\bLE\bES\bS
 
         $ sudo shutdown -r +15 "quick reboot"
 
+
+
+1.6.9                   November 24, 2004                       7
+
+
+
+
+
+SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
+
+
        To make a usage listing of the directories in the /home
        partition.  Note that this runs the commands in a sub-
        shell to make the cd and file redirection work.
@@ -455,17 +480,6 @@ A\bAU\bUT\bTH\bHO\bOR\bRS\bS
        Many people have worked on s\bsu\bud\bdo\bo over the years; this ver­
        sion consists of code written primarily by:
 
-
-
-1.6.9                   November 11, 2004                       7
-
-
-
-
-
-SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
-
-
                Todd Miller
                Chris Jepeway
 
@@ -505,25 +519,11 @@ B\bBU\bUG\bGS\bS
        If you feel you have found a bug in s\bsu\bud\bdo\bo, please submit a
        bug report at http://www.sudo.ws/sudo/bugs/
 
-S\bSU\bUP\bPP\bPO\bOR\bRT\bT
-       Commercial support is available for s\bsu\bud\bdo\bo, see
-       http://www.sudo.ws/sudo/support.html for details.
-
-       Limited free support is available via the sudo-users mail­
-       ing list, see http://www.sudo.ws/mail­
-       man/listinfo/sudo-users to subscribe or search the
-       archives.
 
-D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
-       S\bSu\bud\bdo\bo is provided ``AS IS'' and any express or implied war­
-       ranties, including, but not limited to, the implied war­
-       ranties of merchantability and fitness for a particular
-       purpose are disclaimed.  See the LICENSE file distributed
-       with s\bsu\bud\bdo\bo or http://www.sudo.ws/sudo/license.html for
 
 
 
-1.6.9                   November 11, 2004                       8
+1.6.9                   November 24, 2004                       8
 
 
 
@@ -532,22 +532,22 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
 
 
-       complete details.
-
-
-
-
-
-
-
-
-
-
-
-
-
+S\bSU\bUP\bPP\bPO\bOR\bRT\bT
+       Commercial support is available for s\bsu\bud\bdo\bo, see
+       http://www.sudo.ws/sudo/support.html for details.
 
+       Limited free support is available via the sudo-users mail­
+       ing list, see http://www.sudo.ws/mail­
+       man/listinfo/sudo-users to subscribe or search the
+       archives.
 
+D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
+       S\bSu\bud\bdo\bo is provided ``AS IS'' and any express or implied war­
+       ranties, including, but not limited to, the implied war­
+       ranties of merchantability and fitness for a particular
+       purpose are disclaimed.  See the LICENSE file distributed
+       with s\bsu\bud\bdo\bo or http://www.sudo.ws/sudo/license.html for com­
+       plete details.
 
 
 
@@ -589,6 +589,6 @@ SUDO(1m)               MAINTENANCE COMMANDS              SUDO(1m)
 
 
 
-1.6.9                   November 11, 2004                       9
+1.6.9                   November 24, 2004                       9
 
 
diff --git a/sudo.h b/sudo.h
index 6014f2439174e25e9ca6c8e9771c9ad578443d51..4e2ed4395d5ea5cfa3de7523a25ca0e76d74679d 100644 (file)
--- a/sudo.h
+++ b/sudo.h
@@ -83,23 +83,24 @@ struct sudo_user {
 #define NOT_FOUND_DOT          -1
 
 /*
- * Various modes sudo can be in (based on arguments) in octal
+ * Various modes sudo can be in (based on arguments) in hex
  */
-#define MODE_RUN                 000001
-#define MODE_VALIDATE            000002
-#define MODE_INVALIDATE          000004
-#define MODE_KILL                000010
-#define MODE_VERSION             000020
-#define MODE_HELP                000040
-#define MODE_LIST                000100
-#define MODE_LISTDEFS            000200
-#define MODE_BACKGROUND          000400
-#define MODE_SHELL               001000
-#define MODE_LOGIN_SHELL         002000
-#define MODE_IMPLIED_SHELL       004000
-#define MODE_RESET_HOME          010000
-#define MODE_PRESERVE_GROUPS     020000
-#define MODE_EDIT                040000
+#define MODE_RUN               0x0001
+#define MODE_EDIT              0x0002
+#define MODE_VALIDATE          0x0004
+#define MODE_INVALIDATE                0x0008
+#define MODE_KILL              0x0010
+#define MODE_VERSION           0x0020
+#define MODE_HELP              0x0040
+#define MODE_LIST              0x0080
+#define MODE_CHECK             0x0100
+#define MODE_LISTDEFS          0x0200
+#define MODE_BACKGROUND                0x0400
+#define MODE_SHELL             0x0800
+#define MODE_LOGIN_SHELL       0x1000
+#define MODE_IMPLIED_SHELL     0x2000
+#define MODE_RESET_HOME                0x4000
+#define MODE_PRESERVE_GROUPS   0x8000
 
 /*
  * Used with set_perms()
@@ -238,7 +239,8 @@ int pam_prep_user   __P((struct passwd *));
 void zero_bytes                __P((volatile VOID *, size_t));
 int gettime            __P((struct timespec *));
 FILE *open_sudoers     __P((const char *, int *));
-void display_privs      __P((struct passwd *));
+void display_privs     __P((struct passwd *));
+int display_cmnd       __P((struct passwd *));
 void sudo_setpwent     __P((void));
 void sudo_endpwent     __P((void));
 void sudo_setgrent     __P((void));
index a8b0f5a85bef9f0e4ec4b3e6ee77f102e3dc5411..cf56018f32e8ae69d7af7e9a6c9d38f1cfb340de 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "SUDO @mansectsu@"
-.TH SUDO @mansectsu@ "November 11, 2004" "1.6.9" "MAINTENANCE COMMANDS"
+.TH SUDO @mansectsu@ "November 24, 2004" "1.6.9" "MAINTENANCE COMMANDS"
 .SH "NAME"
 sudo, sudoedit \- execute a command as another user
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
-\&\fBsudo\fR \fB\-K\fR | \fB\-L\fR | \fB\-V\fR | \fB\-h\fR | \fB\-k\fR | \fB\-l\fR | \fB\-v\fR
+\&\fBsudo\fR \fB\-K\fR | \fB\-L\fR | \fB\-V\fR | \fB\-h\fR | \fB\-k\fR | \fB\-v\fR
+.PP
+\&\fBsudo\fR [\fB\-U\fR\ \fIusername\fR] [\fB\-u\fR\ \fIusername\fR|\fI#uid\fR] \fB\-l\fR [\fIcommand\fR]
 .PP
 \&\fBsudo\fR [\fB\-HPSb\fR] [\fB\-a\fR\ \fIauth_type\fR] [\fB\-c\fR\ \fIclass\fR|\fI\-\fR]
 [\fB\-p\fR\ \fIprompt\fR] [\fB\-u\fR\ \fIusername\fR|\fI#uid\fR]
@@ -239,6 +241,12 @@ still set to match the target user.
 .IX Item "-S"
 The \fB\-S\fR (\fIstdin\fR) option causes \fBsudo\fR to read the password from
 the standard input instead of the terminal device.
+.IP "\-U" 4
+.IX Item "-U"
+The \fB\-U\fR (\fIother user\fR) option is used in conjunction with the \fB\-l\fR
+option to specify the user whose privileges should be listed.  Only
+root or a user with \fBsudo\fR \f(CW\*(C`ALL\*(C'\fR on the current host may use this
+option.
 .IP "\-V" 4
 .IX Item "-V"
 The \fB\-V\fR (\fIversion\fR) option causes \fBsudo\fR to print the version
@@ -320,12 +328,15 @@ by setting the time on it to the epoch.  The next time \fBsudo\fR is
 run a password will be required.  This option does not require a password
 and was added to allow a user to revoke \fBsudo\fR permissions from a .logout
 file.
-.IP "\-l" 4
-.IX Item "-l"
-The \fB\-l\fR (\fIlist\fR) option will list out the allowed (and forbidden)
-commands for the user on the current host.  If the \fB\-u\fR flag is
-specified and the invoking user has \fBsudo\fR \f(CW\*(C`ALL\*(C'\fR on the current host,
-the information listed will be for the user specified by the \fB\-u\fR flag.
+.IP "\-l [\fIcommand\fR]" 4
+.IX Item "-l [command]"
+If no \fIcommand\fR is specified, the \fB\-l\fR (\fIlist\fR) option will list
+the allowed (and forbidden) commands for the invoking user (or the
+user specified by the \fB\-U\fR option) on the current host.  If a
+\&\fIcommand\fR is specified and is permitted by \fIsudoers\fR, the
+fully-qualified path to the command is displayed along with any
+command line arguments.  If \fIcommand\fR is not allowed, \fBsudo\fR will
+exit with a return value of 1.
 .IP "\-p" 4
 .IX Item "-p"
 The \fB\-p\fR (\fIprompt\fR) option allows you to override the default
index 080c2a94ce0b7f3577dcee396d3194fa552014c1..576dcc4deef55a3331dbb0f2abe71cde1b9380b0 100644 (file)
--- a/sudo.pod
+++ b/sudo.pod
@@ -27,7 +27,9 @@ sudo, sudoedit - execute a command as another user
 
 =head1 SYNOPSIS
 
-B<sudo> B<-K> | B<-L> | B<-V> | B<-h> | B<-k> | B<-l> | B<-v>
+B<sudo> B<-K> | B<-L> | B<-V> | B<-h> | B<-k> | B<-v>
+
+B<sudo> S<[B<-U> I<username>]> S<[B<-u> I<username>|I<#uid>]> B<-l> [I<command>]
 
 B<sudo> [B<-HPSb>] S<[B<-a> I<auth_type>]> S<[B<-c> I<class>|I<->]>
 S<[B<-p> I<prompt>]> S<[B<-u> I<username>|I<#uid>]>
@@ -122,6 +124,13 @@ still set to match the target user.
 The B<-S> (I<stdin>) option causes B<sudo> to read the password from
 the standard input instead of the terminal device.
 
+=item -U
+
+The B<-U> (I<other user>) option is used in conjunction with the B<-l>
+option to specify the user whose privileges should be listed.  Only
+root or a user with B<sudo> C<ALL> on the current host may use this
+option.
+
 =item -V
 
 The B<-V> (I<version>) option causes B<sudo> to print the version
@@ -217,12 +226,15 @@ run a password will be required.  This option does not require a password
 and was added to allow a user to revoke B<sudo> permissions from a .logout
 file.
 
-=item -l
+=item -l [I<command>]
 
-The B<-l> (I<list>) option will list out the allowed (and forbidden)
-commands for the user on the current host.  If the B<-u> flag is
-specified and the invoking user has B<sudo> C<ALL> on the current host,
-the information listed will be for the user specified by the B<-u> flag.
+If no I<command> is specified, the B<-l> (I<list>) option will list
+the allowed (and forbidden) commands for the invoking user (or the
+user specified by the B<-U> option) on the current host.  If a
+I<command> is specified and is permitted by I<sudoers>, the
+fully-qualified path to the command is displayed along with any
+command line arguments.  If I<command> is not allowed, B<sudo> will
+exit with a return value of 1.
 
 =item -p