Move askpass path specification from sudoers to sudo.conf.
This commit is contained in:
182
doc/sudo.cat
182
doc/sudo.cat
@@ -86,8 +86,15 @@ OOPPTTIIOONNSS
|
|||||||
executed to read the user's password and output the
|
executed to read the user's password and output the
|
||||||
password to the standard output. If the SUDO_ASKPASS
|
password to the standard output. If the SUDO_ASKPASS
|
||||||
environment variable is set, it specifies the path to the
|
environment variable is set, it specifies the path to the
|
||||||
helper program. Otherwise, the value specified by the
|
helper program. Otherwise, if _/_e_t_c_/_s_u_d_o_._c_o_n_f contains a
|
||||||
_a_s_k_p_a_s_s option in _s_u_d_o_e_r_s(4) is used.
|
line specifying the askpass program that value will be
|
||||||
|
used. For example:
|
||||||
|
|
||||||
|
# Path to askpass helper program
|
||||||
|
Path askpass /usr/X11R6/bin/ssh-askpass
|
||||||
|
|
||||||
|
If no askpass program is available, sudo will exit with an
|
||||||
|
error.
|
||||||
|
|
||||||
-a _t_y_p_e The --aa (_a_u_t_h_e_n_t_i_c_a_t_i_o_n _t_y_p_e) option causes ssuuddoo to use the
|
-a _t_y_p_e The --aa (_a_u_t_h_e_n_t_i_c_a_t_i_o_n _t_y_p_e) option causes ssuuddoo to use the
|
||||||
specified authentication type when validating the user, as
|
specified authentication type when validating the user, as
|
||||||
@@ -117,13 +124,6 @@ OOPPTTIIOONNSS
|
|||||||
Specifying a _c_l_a_s_s of - indicates that the command should
|
Specifying a _c_l_a_s_s of - indicates that the command should
|
||||||
be run restricted by the default login capabilities for the
|
be run restricted by the default login capabilities for the
|
||||||
user the command is run as. If the _c_l_a_s_s argument
|
user the command is run as. If the _c_l_a_s_s argument
|
||||||
specifies an existing user class, the command must be run
|
|
||||||
as root, or the ssuuddoo command must be run from a shell that
|
|
||||||
is already root. This option is only available on systems
|
|
||||||
with BSD login classes.
|
|
||||||
|
|
||||||
-D _l_e_v_e_l Enable debugging of ssuuddoo plugins and ssuuddoo itself. The
|
|
||||||
_l_e_v_e_l may be a value from 1 through 9.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -136,6 +136,14 @@ OOPPTTIIOONNSS
|
|||||||
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
||||||
|
|
||||||
|
|
||||||
|
specifies an existing user class, the command must be run
|
||||||
|
as root, or the ssuuddoo command must be run from a shell that
|
||||||
|
is already root. This option is only available on systems
|
||||||
|
with BSD login classes.
|
||||||
|
|
||||||
|
-D _l_e_v_e_l Enable debugging of ssuuddoo plugins and ssuuddoo itself. The
|
||||||
|
_l_e_v_e_l may be a value from 1 through 9.
|
||||||
|
|
||||||
-E The --EE (_p_r_e_s_e_r_v_e _e_n_v_i_r_o_n_m_e_n_t) option will override the
|
-E The --EE (_p_r_e_s_e_r_v_e _e_n_v_i_r_o_n_m_e_n_t) option will override the
|
||||||
_e_n_v___r_e_s_e_t option in _s_u_d_o_e_r_s(4)). It is only available when
|
_e_n_v___r_e_s_e_t option in _s_u_d_o_e_r_s(4)). It is only available when
|
||||||
either the matching command has the SETENV tag or the
|
either the matching command has the SETENV tag or the
|
||||||
@@ -183,14 +191,6 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
|||||||
specified in _p_a_s_s_w_d(4). By default, ssuuddoo does not modify
|
specified in _p_a_s_s_w_d(4). By default, ssuuddoo does not modify
|
||||||
HOME (see _s_e_t___h_o_m_e and _a_l_w_a_y_s___s_e_t___h_o_m_e in _s_u_d_o_e_r_s(4)).
|
HOME (see _s_e_t___h_o_m_e and _a_l_w_a_y_s___s_e_t___h_o_m_e in _s_u_d_o_e_r_s(4)).
|
||||||
|
|
||||||
-h The --hh (_h_e_l_p) option causes ssuuddoo to print a usage message
|
|
||||||
and exit.
|
|
||||||
|
|
||||||
-i [command]
|
|
||||||
The --ii (_s_i_m_u_l_a_t_e _i_n_i_t_i_a_l _l_o_g_i_n) option runs the shell
|
|
||||||
specified in the _p_a_s_s_w_d(4) entry of the target user as a
|
|
||||||
login shell. This means that login-specific resource files
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.8.0a2 June 9, 2010 3
|
1.8.0a2 June 9, 2010 3
|
||||||
@@ -202,6 +202,13 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
|||||||
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
||||||
|
|
||||||
|
|
||||||
|
-h The --hh (_h_e_l_p) option causes ssuuddoo to print a usage message
|
||||||
|
and exit.
|
||||||
|
|
||||||
|
-i [command]
|
||||||
|
The --ii (_s_i_m_u_l_a_t_e _i_n_i_t_i_a_l _l_o_g_i_n) option runs the shell
|
||||||
|
specified in the _p_a_s_s_w_d(4) entry of the target user as a
|
||||||
|
login shell. This means that login-specific resource files
|
||||||
such as .profile or .login will be read by the shell. If a
|
such as .profile or .login will be read by the shell. If a
|
||||||
command is specified, it is passed to the shell for
|
command is specified, it is passed to the shell for
|
||||||
execution. Otherwise, an interactive shell is executed.
|
execution. Otherwise, an interactive shell is executed.
|
||||||
@@ -249,13 +256,6 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
|||||||
|
|
||||||
-P The --PP (_p_r_e_s_e_r_v_e _g_r_o_u_p _v_e_c_t_o_r) option causes ssuuddoo to
|
-P The --PP (_p_r_e_s_e_r_v_e _g_r_o_u_p _v_e_c_t_o_r) option causes ssuuddoo to
|
||||||
preserve the invoking user's group vector unaltered. By
|
preserve the invoking user's group vector unaltered. By
|
||||||
default, ssuuddoo will initialize the group vector to the list
|
|
||||||
of groups the target user is in. The real and effective
|
|
||||||
group IDs, however, are still set to match the target user.
|
|
||||||
|
|
||||||
-p _p_r_o_m_p_t The --pp (_p_r_o_m_p_t) option allows you to override the default
|
|
||||||
password prompt and use a custom one. The following
|
|
||||||
percent (`%') escapes are supported:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -268,6 +268,14 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
|||||||
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
||||||
|
|
||||||
|
|
||||||
|
default, ssuuddoo will initialize the group vector to the list
|
||||||
|
of groups the target user is in. The real and effective
|
||||||
|
group IDs, however, are still set to match the target user.
|
||||||
|
|
||||||
|
-p _p_r_o_m_p_t The --pp (_p_r_o_m_p_t) option allows you to override the default
|
||||||
|
password prompt and use a custom one. The following
|
||||||
|
percent (`%') escapes are supported:
|
||||||
|
|
||||||
%H expanded to the local host name including the domain
|
%H expanded to the local host name including the domain
|
||||||
name (on if the machine's host name is fully qualified
|
name (on if the machine's host name is fully qualified
|
||||||
or the _f_q_d_n _s_u_d_o_e_r_s option is set)
|
or the _f_q_d_n _s_u_d_o_e_r_s option is set)
|
||||||
@@ -314,14 +322,6 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
|||||||
is set (see _s_u_d_o_e_r_s(4)) it is not possible to run commands
|
is set (see _s_u_d_o_e_r_s(4)) it is not possible to run commands
|
||||||
with a uid not listed in the password database.
|
with a uid not listed in the password database.
|
||||||
|
|
||||||
-V The --VV (_v_e_r_s_i_o_n) option causes ssuuddoo to print the version
|
|
||||||
number and exit. If the invoking user is already root the
|
|
||||||
--VV option will print out a list of the defaults ssuuddoo was
|
|
||||||
compiled with as well as the machine's local network
|
|
||||||
addresses.
|
|
||||||
|
|
||||||
-v If given the --vv (_v_a_l_i_d_a_t_e) option, ssuuddoo will update the
|
|
||||||
user's time stamp, prompting for the user's password if
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -334,6 +334,14 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
|||||||
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
||||||
|
|
||||||
|
|
||||||
|
-V The --VV (_v_e_r_s_i_o_n) option causes ssuuddoo to print the version
|
||||||
|
number and exit. If the invoking user is already root the
|
||||||
|
--VV option will print out a list of the defaults ssuuddoo was
|
||||||
|
compiled with as well as the machine's local network
|
||||||
|
addresses.
|
||||||
|
|
||||||
|
-v If given the --vv (_v_a_l_i_d_a_t_e) option, ssuuddoo will update the
|
||||||
|
user's time stamp, prompting for the user's password if
|
||||||
necessary. This extends the ssuuddoo timeout for another 5
|
necessary. This extends the ssuuddoo timeout for another 5
|
||||||
minutes (or whatever the timeout is set to in _s_u_d_o_e_r_s) but
|
minutes (or whatever the timeout is set to in _s_u_d_o_e_r_s) but
|
||||||
does not run a command.
|
does not run a command.
|
||||||
@@ -367,6 +375,7 @@ PPLLUUGGIINNSS
|
|||||||
#
|
#
|
||||||
# Format:
|
# Format:
|
||||||
# Plugin plugin_name plugin_path
|
# Plugin plugin_name plugin_path
|
||||||
|
# Path askpass path/to/askpass
|
||||||
#
|
#
|
||||||
# The plugin_path is relative to /usr/local/libexec unless
|
# The plugin_path is relative to /usr/local/libexec unless
|
||||||
# fully qualified.
|
# fully qualified.
|
||||||
@@ -379,15 +388,6 @@ PPLLUUGGIINNSS
|
|||||||
A Plugin line consists of the Plugin keyword, followed by the
|
A Plugin line consists of the Plugin keyword, followed by the
|
||||||
_s_y_m_b_o_l___n_a_m_e and the _p_a_t_h to the shared object containing the plugin.
|
_s_y_m_b_o_l___n_a_m_e and the _p_a_t_h to the shared object containing the plugin.
|
||||||
The _s_y_m_b_o_l___n_a_m_e is the name of the struct policy_plugin or struct
|
The _s_y_m_b_o_l___n_a_m_e is the name of the struct policy_plugin or struct
|
||||||
io_plugin in the plugin shared object. The _p_a_t_h may be fully qualified
|
|
||||||
or relative. If not fully qualified it is relative to the
|
|
||||||
_/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c directory. Any additional parameters after the _p_a_t_h
|
|
||||||
are ignored.
|
|
||||||
|
|
||||||
For more information, see the "_s_u_d_o___p_l_u_g_i_n(1m) manual."
|
|
||||||
|
|
||||||
RREETTUURRNN VVAALLUUEESS
|
|
||||||
Upon successful execution of a program, the exit status from ssuuddoo will
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -400,6 +400,16 @@ RREETTUURRNN VVAALLUUEESS
|
|||||||
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
||||||
|
|
||||||
|
|
||||||
|
io_plugin in the plugin shared object. The _p_a_t_h may be fully qualified
|
||||||
|
or relative. If not fully qualified it is relative to the
|
||||||
|
_/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c directory. Any additional parameters after the _p_a_t_h
|
||||||
|
are ignored. Lines that don't begin with Plugin or Path are silently
|
||||||
|
ignored
|
||||||
|
|
||||||
|
For more information, see the _s_u_d_o___p_l_u_g_i_n(1m) manual.
|
||||||
|
|
||||||
|
RREETTUURRNN VVAALLUUEESS
|
||||||
|
Upon successful execution of a program, the exit status from ssuuddoo will
|
||||||
simply be the exit status of the program that was executed.
|
simply be the exit status of the program that was executed.
|
||||||
|
|
||||||
Otherwise, ssuuddoo quits with an exit value of 1 if there is a
|
Otherwise, ssuuddoo quits with an exit value of 1 if there is a
|
||||||
@@ -444,16 +454,6 @@ SSEECCUURRIITTYY NNOOTTEESS
|
|||||||
ssuuddoo to preserve them.
|
ssuuddoo to preserve them.
|
||||||
|
|
||||||
To prevent command spoofing, ssuuddoo checks "." and "" (both denoting
|
To prevent command spoofing, ssuuddoo checks "." and "" (both denoting
|
||||||
current directory) last when searching for a command in the user's PATH
|
|
||||||
(if one or both are in the PATH). Note, however, that the actual PATH
|
|
||||||
environment variable is _n_o_t modified and is passed unchanged to the
|
|
||||||
program that ssuuddoo executes.
|
|
||||||
|
|
||||||
ssuuddoo will check the ownership of its time stamp directory
|
|
||||||
(_/_v_a_r_/_r_u_n_/_s_u_d_o by default) and ignore the directory's contents if it is
|
|
||||||
not owned by root or if it is writable by a user other than root. On
|
|
||||||
systems that allow non-root users to give away files via _c_h_o_w_n(2), if
|
|
||||||
the time stamp directory is located in a directory writable by anyone
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -466,6 +466,16 @@ SSEECCUURRIITTYY NNOOTTEESS
|
|||||||
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
||||||
|
|
||||||
|
|
||||||
|
current directory) last when searching for a command in the user's PATH
|
||||||
|
(if one or both are in the PATH). Note, however, that the actual PATH
|
||||||
|
environment variable is _n_o_t modified and is passed unchanged to the
|
||||||
|
program that ssuuddoo executes.
|
||||||
|
|
||||||
|
ssuuddoo will check the ownership of its time stamp directory
|
||||||
|
(_/_v_a_r_/_r_u_n_/_s_u_d_o by default) and ignore the directory's contents if it is
|
||||||
|
not owned by root or if it is writable by a user other than root. On
|
||||||
|
systems that allow non-root users to give away files via _c_h_o_w_n(2), if
|
||||||
|
the time stamp directory is located in a directory writable by anyone
|
||||||
(e.g., _/_t_m_p), it is possible for a user to create the time stamp
|
(e.g., _/_t_m_p), it is possible for a user to create the time stamp
|
||||||
directory before ssuuddoo is run. However, because ssuuddoo checks the
|
directory before ssuuddoo is run. However, because ssuuddoo checks the
|
||||||
ownership and mode of the directory and its contents, the only damage
|
ownership and mode of the directory and its contents, the only damage
|
||||||
@@ -510,16 +520,6 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
|||||||
when giving users access to commands via ssuuddoo to verify that the
|
when giving users access to commands via ssuuddoo to verify that the
|
||||||
command does not inadvertently give the user an effective root shell.
|
command does not inadvertently give the user an effective root shell.
|
||||||
For more information, please see the PREVENTING SHELL ESCAPES section
|
For more information, please see the PREVENTING SHELL ESCAPES section
|
||||||
in _s_u_d_o_e_r_s(4).
|
|
||||||
|
|
||||||
EENNVVIIRROONNMMEENNTT
|
|
||||||
ssuuddoo utilizes the following environment variables:
|
|
||||||
|
|
||||||
EDITOR Default editor to use in --ee (sudoedit) mode if neither
|
|
||||||
SUDO_EDITOR nor VISUAL is set
|
|
||||||
|
|
||||||
HOME In --ss or --HH mode (or if sudo was configured with the
|
|
||||||
--enable-shell-sets-home option), set to homedir of the
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -532,6 +532,16 @@ EENNVVIIRROONNMMEENNTT
|
|||||||
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
||||||
|
|
||||||
|
|
||||||
|
in _s_u_d_o_e_r_s(4).
|
||||||
|
|
||||||
|
EENNVVIIRROONNMMEENNTT
|
||||||
|
ssuuddoo utilizes the following environment variables:
|
||||||
|
|
||||||
|
EDITOR Default editor to use in --ee (sudoedit) mode if neither
|
||||||
|
SUDO_EDITOR nor VISUAL is set
|
||||||
|
|
||||||
|
HOME In --ss or --HH mode (or if sudo was configured with the
|
||||||
|
--enable-shell-sets-home option), set to homedir of the
|
||||||
target user
|
target user
|
||||||
|
|
||||||
PATH Set to a sane value if the _s_e_c_u_r_e___p_a_t_h sudoers option
|
PATH Set to a sane value if the _s_e_c_u_r_e___p_a_t_h sudoers option
|
||||||
@@ -565,7 +575,7 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
|||||||
SUDO_EDITOR is not set
|
SUDO_EDITOR is not set
|
||||||
|
|
||||||
FFIILLEESS
|
FFIILLEESS
|
||||||
_/_e_t_c_/_s_u_d_o_._c_o_n_f ssuuddoo plugin configuration
|
_/_e_t_c_/_s_u_d_o_._c_o_n_f ssuuddoo plugin and path configuration
|
||||||
|
|
||||||
_/_e_t_c_/_s_u_d_o_e_r_s List of who can run what
|
_/_e_t_c_/_s_u_d_o_e_r_s List of who can run what
|
||||||
|
|
||||||
@@ -577,16 +587,6 @@ FFIILLEESS
|
|||||||
EEXXAAMMPPLLEESS
|
EEXXAAMMPPLLEESS
|
||||||
Note: the following examples assume suitable _s_u_d_o_e_r_s(4) entries.
|
Note: the following examples assume suitable _s_u_d_o_e_r_s(4) entries.
|
||||||
|
|
||||||
To get a file listing of an unreadable directory:
|
|
||||||
|
|
||||||
$ sudo ls /usr/local/protected
|
|
||||||
|
|
||||||
To list the home directory of user yaz on a machine where the file
|
|
||||||
system holding ~yaz is not exported as root:
|
|
||||||
|
|
||||||
$ sudo -u yaz ls ~yaz
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.8.0a2 June 9, 2010 9
|
1.8.0a2 June 9, 2010 9
|
||||||
@@ -598,6 +598,15 @@ EEXXAAMMPPLLEESS
|
|||||||
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
||||||
|
|
||||||
|
|
||||||
|
To get a file listing of an unreadable directory:
|
||||||
|
|
||||||
|
$ sudo ls /usr/local/protected
|
||||||
|
|
||||||
|
To list the home directory of user yaz on a machine where the file
|
||||||
|
system holding ~yaz is not exported as root:
|
||||||
|
|
||||||
|
$ sudo -u yaz ls ~yaz
|
||||||
|
|
||||||
To edit the _i_n_d_e_x_._h_t_m_l file as user www:
|
To edit the _i_n_d_e_x_._h_t_m_l file as user www:
|
||||||
|
|
||||||
$ sudo -u www vi ~www/htdocs/index.html
|
$ sudo -u www vi ~www/htdocs/index.html
|
||||||
@@ -622,7 +631,7 @@ SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
|||||||
|
|
||||||
SSEEEE AALLSSOO
|
SSEEEE AALLSSOO
|
||||||
_g_r_e_p(1), _s_u(1), _s_t_a_t(2), _l_o_g_i_n___c_a_p(3), _p_a_s_s_w_d(4), _s_u_d_o_e_r_s(4),
|
_g_r_e_p(1), _s_u(1), _s_t_a_t(2), _l_o_g_i_n___c_a_p(3), _p_a_s_s_w_d(4), _s_u_d_o_e_r_s(4),
|
||||||
"_s_u_d_o___p_l_u_g_i_n(1m), "_s_u_d_o_r_e_p_l_a_y(1m), _v_i_s_u_d_o(1m)""
|
_s_u_d_o___p_l_u_g_i_n(1m), _s_u_d_o_r_e_p_l_a_y(1m), _v_i_s_u_d_o(1m)
|
||||||
|
|
||||||
AAUUTTHHOORRSS
|
AAUUTTHHOORRSS
|
||||||
Many people have worked on ssuuddoo over the years; this version consists
|
Many people have worked on ssuuddoo over the years; this version consists
|
||||||
@@ -643,15 +652,6 @@ CCAAVVEEAATTSS
|
|||||||
|
|
||||||
It is not meaningful to run the cd command directly via sudo, e.g.,
|
It is not meaningful to run the cd command directly via sudo, e.g.,
|
||||||
|
|
||||||
$ sudo cd /usr/local/protected
|
|
||||||
|
|
||||||
since when the command exits the parent process (your shell) will still
|
|
||||||
be the same. Please see the EXAMPLES section for more information.
|
|
||||||
|
|
||||||
If users have sudo ALL there is nothing to prevent them from creating
|
|
||||||
their own program that gives them a root shell regardless of any '!'
|
|
||||||
elements in the user specification.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -664,6 +664,15 @@ CCAAVVEEAATTSS
|
|||||||
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
SUDO(1m) MAINTENANCE COMMANDS SUDO(1m)
|
||||||
|
|
||||||
|
|
||||||
|
$ sudo cd /usr/local/protected
|
||||||
|
|
||||||
|
since when the command exits the parent process (your shell) will still
|
||||||
|
be the same. Please see the EXAMPLES section for more information.
|
||||||
|
|
||||||
|
If users have sudo ALL there is nothing to prevent them from creating
|
||||||
|
their own program that gives them a root shell regardless of any '!'
|
||||||
|
elements in the user specification.
|
||||||
|
|
||||||
Running shell scripts via ssuuddoo can expose the same kernel bugs that
|
Running shell scripts via ssuuddoo can expose the same kernel bugs that
|
||||||
make setuid shell scripts unsafe on some operating systems (if your OS
|
make setuid shell scripts unsafe on some operating systems (if your OS
|
||||||
has a /dev/fd/ directory, setuid shell scripts are generally safe).
|
has a /dev/fd/ directory, setuid shell scripts are generally safe).
|
||||||
@@ -684,15 +693,6 @@ DDIISSCCLLAAIIMMEERR
|
|||||||
See the LICENSE file distributed with ssuuddoo or
|
See the LICENSE file distributed with ssuuddoo or
|
||||||
http://www.sudo.ws/sudo/license.html for complete details.
|
http://www.sudo.ws/sudo/license.html for complete details.
|
||||||
|
|
||||||
PPOODD EERRRROORRSS
|
|
||||||
Hey! TThhee aabboovvee ddooccuummeenntt hhaadd ssoommee ccooddiinngg eerrrroorrss,, wwhhiicchh aarree eexxppllaaiinneedd
|
|
||||||
bbeellooww::
|
|
||||||
|
|
||||||
Around line 442:
|
|
||||||
Unterminated L<...> sequence
|
|
||||||
|
|
||||||
Around line 678:
|
|
||||||
Unterminated L<L<...>> sequence
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -241,11 +241,19 @@ or via the \fIsudoers\fR file.
|
|||||||
.IX Item "-A"
|
.IX Item "-A"
|
||||||
Normally, if \fBsudo\fR requires a password, it will read it from the
|
Normally, if \fBsudo\fR requires a password, it will read it from the
|
||||||
current terminal. If the \fB\-A\fR (\fIaskpass\fR) option is specified,
|
current terminal. If the \fB\-A\fR (\fIaskpass\fR) option is specified,
|
||||||
a (possibly graphical) helper program is executed to read the
|
a (possibly graphical) helper program is executed to read the user's
|
||||||
user's password and output the password to the standard output. If
|
password and output the password to the standard output. If the
|
||||||
the \f(CW\*(C`SUDO_ASKPASS\*(C'\fR environment variable is set, it specifies the
|
\&\f(CW\*(C`SUDO_ASKPASS\*(C'\fR environment variable is set, it specifies the path
|
||||||
path to the helper program. Otherwise, the value specified by the
|
to the helper program. Otherwise, if \fI@sysconfdir@/sudo.conf\fR
|
||||||
\&\fIaskpass\fR option in \fIsudoers\fR\|(@mansectform@) is used.
|
contains a line specifying the askpass program that value will be
|
||||||
|
used. For example:
|
||||||
|
.Sp
|
||||||
|
.Vb 2
|
||||||
|
\& # Path to askpass helper program
|
||||||
|
\& Path askpass /usr/X11R6/bin/ssh\-askpass
|
||||||
|
.Ve
|
||||||
|
.Sp
|
||||||
|
If no askpass program is available, sudo will exit with an error.
|
||||||
.if \n(BA \{\
|
.if \n(BA \{\
|
||||||
.IP "\-a \fItype\fR" 12
|
.IP "\-a \fItype\fR" 12
|
||||||
.IX Item "-a type"
|
.IX Item "-a type"
|
||||||
@@ -521,6 +529,7 @@ policy and I/O logging, which corresponds to the following
|
|||||||
\& #
|
\& #
|
||||||
\& # Format:
|
\& # Format:
|
||||||
\& # Plugin plugin_name plugin_path
|
\& # Plugin plugin_name plugin_path
|
||||||
|
\& # Path askpass path/to/askpass
|
||||||
\& #
|
\& #
|
||||||
\& # The plugin_path is relative to @prefix@/libexec unless
|
\& # The plugin_path is relative to @prefix@/libexec unless
|
||||||
\& # fully qualified.
|
\& # fully qualified.
|
||||||
@@ -536,10 +545,11 @@ A \f(CW\*(C`Plugin\*(C'\fR line consists of the \f(CW\*(C`Plugin\*(C'\fR keyword
|
|||||||
plugin. The \fIsymbol_name\fR is the name of the \f(CW\*(C`struct policy_plugin\*(C'\fR
|
plugin. The \fIsymbol_name\fR is the name of the \f(CW\*(C`struct policy_plugin\*(C'\fR
|
||||||
or \f(CW\*(C`struct io_plugin\*(C'\fR in the plugin shared object. The \fIpath\fR
|
or \f(CW\*(C`struct io_plugin\*(C'\fR in the plugin shared object. The \fIpath\fR
|
||||||
may be fully qualified or relative. If not fully qualified it is
|
may be fully qualified or relative. If not fully qualified it is
|
||||||
relative to the \fI@prefix@/libexec\fR directory. Any additional parameters
|
relative to the \fI@prefix@/libexec\fR directory. Any additional
|
||||||
after the \fIpath\fR are ignored.
|
parameters after the \fIpath\fR are ignored. Lines that don't begin
|
||||||
|
with \f(CW\*(C`Plugin\*(C'\fR or \f(CW\*(C`Path\*(C'\fR are silently ignored
|
||||||
.PP
|
.PP
|
||||||
For more information, see the \*(L"\fIsudo_plugin\fR\|(@mansectsu@) manual.\*(R"
|
For more information, see the \fIsudo_plugin\fR\|(@mansectsu@) manual.
|
||||||
.SH "RETURN VALUES"
|
.SH "RETURN VALUES"
|
||||||
.IX Header "RETURN VALUES"
|
.IX Header "RETURN VALUES"
|
||||||
Upon successful execution of a program, the exit status from \fBsudo\fR
|
Upon successful execution of a program, the exit status from \fBsudo\fR
|
||||||
@@ -713,7 +723,7 @@ is not set
|
|||||||
.ie n .IP "\fI@sysconfdir@/sudo.conf\fR" 24
|
.ie n .IP "\fI@sysconfdir@/sudo.conf\fR" 24
|
||||||
.el .IP "\fI@sysconfdir@/sudo.conf\fR" 24
|
.el .IP "\fI@sysconfdir@/sudo.conf\fR" 24
|
||||||
.IX Item "@sysconfdir@/sudo.conf"
|
.IX Item "@sysconfdir@/sudo.conf"
|
||||||
\&\fBsudo\fR plugin configuration
|
\&\fBsudo\fR plugin and path configuration
|
||||||
.ie n .IP "\fI@sysconfdir@/sudoers\fR" 24
|
.ie n .IP "\fI@sysconfdir@/sudoers\fR" 24
|
||||||
.el .IP "\fI@sysconfdir@/sudoers\fR" 24
|
.el .IP "\fI@sysconfdir@/sudoers\fR" 24
|
||||||
.IX Item "@sysconfdir@/sudoers"
|
.IX Item "@sysconfdir@/sudoers"
|
||||||
@@ -777,7 +787,7 @@ to make the \f(CW\*(C`cd\*(C'\fR and file redirection work.
|
|||||||
.IX Header "SEE ALSO"
|
.IX Header "SEE ALSO"
|
||||||
\&\fIgrep\fR\|(1), \fIsu\fR\|(1), \fIstat\fR\|(2),
|
\&\fIgrep\fR\|(1), \fIsu\fR\|(1), \fIstat\fR\|(2),
|
||||||
.if \n(LC \&\fIlogin_cap\fR\|(3),
|
.if \n(LC \&\fIlogin_cap\fR\|(3),
|
||||||
\&\fIpasswd\fR\|(@mansectform@), \fIsudoers\fR\|(@mansectform@), "\fIsudo_plugin\fR\|(@mansectsu@), "\fIsudoreplay\fR\|(@mansectsu@), \fIvisudo\fR\|(@mansectsu@)""
|
\&\fIpasswd\fR\|(@mansectform@), \fIsudoers\fR\|(@mansectform@), \fIsudo_plugin\fR\|(@mansectsu@), \fIsudoreplay\fR\|(@mansectsu@), \fIvisudo\fR\|(@mansectsu@)
|
||||||
.SH "AUTHORS"
|
.SH "AUTHORS"
|
||||||
.IX Header "AUTHORS"
|
.IX Header "AUTHORS"
|
||||||
Many people have worked on \fBsudo\fR over the years; this
|
Many people have worked on \fBsudo\fR over the years; this
|
||||||
@@ -832,12 +842,3 @@ including, but not limited to, the implied warranties of merchantability
|
|||||||
and fitness for a particular purpose are disclaimed. See the \s-1LICENSE\s0
|
and fitness for a particular purpose are disclaimed. See the \s-1LICENSE\s0
|
||||||
file distributed with \fBsudo\fR or http://www.sudo.ws/sudo/license.html
|
file distributed with \fBsudo\fR or http://www.sudo.ws/sudo/license.html
|
||||||
for complete details.
|
for complete details.
|
||||||
.SH "POD ERRORS"
|
|
||||||
.IX Header "POD ERRORS"
|
|
||||||
Hey! \fBThe above document had some coding errors, which are explained below:\fR
|
|
||||||
.IP "Around line 442:" 4
|
|
||||||
.IX Item "Around line 442:"
|
|
||||||
Unterminated L<...> sequence
|
|
||||||
.IP "Around line 678:" 4
|
|
||||||
.IX Item "Around line 678:"
|
|
||||||
Unterminated L<L<...>> sequence
|
|
||||||
|
28
doc/sudo.pod
28
doc/sudo.pod
@@ -115,11 +115,17 @@ B<sudo> accepts the following command line options:
|
|||||||
|
|
||||||
Normally, if B<sudo> requires a password, it will read it from the
|
Normally, if B<sudo> requires a password, it will read it from the
|
||||||
current terminal. If the B<-A> (I<askpass>) option is specified,
|
current terminal. If the B<-A> (I<askpass>) option is specified,
|
||||||
a (possibly graphical) helper program is executed to read the
|
a (possibly graphical) helper program is executed to read the user's
|
||||||
user's password and output the password to the standard output. If
|
password and output the password to the standard output. If the
|
||||||
the C<SUDO_ASKPASS> environment variable is set, it specifies the
|
C<SUDO_ASKPASS> environment variable is set, it specifies the path
|
||||||
path to the helper program. Otherwise, the value specified by the
|
to the helper program. Otherwise, if F<@sysconfdir@/sudo.conf>
|
||||||
I<askpass> option in L<sudoers(5)> is used.
|
contains a line specifying the askpass program that value will be
|
||||||
|
used. For example:
|
||||||
|
|
||||||
|
# Path to askpass helper program
|
||||||
|
Path askpass /usr/X11R6/bin/ssh-askpass
|
||||||
|
|
||||||
|
If no askpass program is available, sudo will exit with an error.
|
||||||
|
|
||||||
=item -a I<type>
|
=item -a I<type>
|
||||||
|
|
||||||
@@ -422,6 +428,7 @@ F<@sysconfdir@/sudo.conf> file.
|
|||||||
#
|
#
|
||||||
# Format:
|
# Format:
|
||||||
# Plugin plugin_name plugin_path
|
# Plugin plugin_name plugin_path
|
||||||
|
# Path askpass path/to/askpass
|
||||||
#
|
#
|
||||||
# The plugin_path is relative to @prefix@/libexec unless
|
# The plugin_path is relative to @prefix@/libexec unless
|
||||||
# fully qualified.
|
# fully qualified.
|
||||||
@@ -436,10 +443,11 @@ I<symbol_name> and the I<path> to the shared object containing the
|
|||||||
plugin. The I<symbol_name> is the name of the C<struct policy_plugin>
|
plugin. The I<symbol_name> is the name of the C<struct policy_plugin>
|
||||||
or C<struct io_plugin> in the plugin shared object. The I<path>
|
or C<struct io_plugin> in the plugin shared object. The I<path>
|
||||||
may be fully qualified or relative. If not fully qualified it is
|
may be fully qualified or relative. If not fully qualified it is
|
||||||
relative to the F<@prefix@/libexec> directory. Any additional parameters
|
relative to the F<@prefix@/libexec> directory. Any additional
|
||||||
after the I<path> are ignored.
|
parameters after the I<path> are ignored. Lines that don't begin
|
||||||
|
with C<Plugin> or C<Path> are silently ignored
|
||||||
|
|
||||||
For more information, see the L<sudo_plugin(8) manual.
|
For more information, see the L<sudo_plugin(8)> manual.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
@@ -622,7 +630,7 @@ is not set
|
|||||||
|
|
||||||
=item F<@sysconfdir@/sudo.conf>
|
=item F<@sysconfdir@/sudo.conf>
|
||||||
|
|
||||||
B<sudo> plugin configuration
|
B<sudo> plugin and path configuration
|
||||||
|
|
||||||
=item F<@sysconfdir@/sudoers>
|
=item F<@sysconfdir@/sudoers>
|
||||||
|
|
||||||
@@ -677,7 +685,7 @@ to make the C<cd> and file redirection work.
|
|||||||
|
|
||||||
L<grep(1)>, L<su(1)>, L<stat(2)>,
|
L<grep(1)>, L<su(1)>, L<stat(2)>,
|
||||||
L<login_cap(3)>,
|
L<login_cap(3)>,
|
||||||
L<passwd(5)>, L<sudoers(5)>, L<sudo_plugin(8), L<sudoreplay(8), L<visudo(8)>
|
L<passwd(5)>, L<sudoers(5)>, L<sudo_plugin(8)>, L<sudoreplay(8)>, L<visudo(8)>
|
||||||
|
|
||||||
=head1 AUTHORS
|
=head1 AUTHORS
|
||||||
|
|
||||||
|
@@ -31,7 +31,8 @@ SSuuddoo PPlluuggiinn AAPPII
|
|||||||
io_plugin in the plugin shared object. The _p_a_t_h may be fully qualified
|
io_plugin in the plugin shared object. The _p_a_t_h may be fully qualified
|
||||||
or relative. If not fully qualified it is relative to the
|
or relative. If not fully qualified it is relative to the
|
||||||
_/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c directory. Any additional parameters after the _p_a_t_h
|
_/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c directory. Any additional parameters after the _p_a_t_h
|
||||||
are ignored.
|
are ignored. Lines that don't begin with Plugin or Path are silently
|
||||||
|
ignored.
|
||||||
|
|
||||||
The same shared object may contain multiple plugins, each with a
|
The same shared object may contain multiple plugins, each with a
|
||||||
different symbol name. The shared object file must be owned by uid 0
|
different symbol name. The shared object file must be owned by uid 0
|
||||||
@@ -44,6 +45,7 @@ SSuuddoo PPlluuggiinn AAPPII
|
|||||||
#
|
#
|
||||||
# Format:
|
# Format:
|
||||||
# Plugin plugin_name plugin_path
|
# Plugin plugin_name plugin_path
|
||||||
|
# Path askpass /path/to/askpass
|
||||||
#
|
#
|
||||||
# The plugin_path is relative to /usr/local/libexec unless
|
# The plugin_path is relative to /usr/local/libexec unless
|
||||||
# fully qualified.
|
# fully qualified.
|
||||||
@@ -56,8 +58,6 @@ SSuuddoo PPlluuggiinn AAPPII
|
|||||||
PPoolliiccyy PPlluuggiinn AAPPII
|
PPoolliiccyy PPlluuggiinn AAPPII
|
||||||
A policy plugin must declare and populate a policy_plugin struct in the
|
A policy plugin must declare and populate a policy_plugin struct in the
|
||||||
global scope. This structure contains pointers to the functions that
|
global scope. This structure contains pointers to the functions that
|
||||||
implement the ssuuddoo policy checks. The name of the symbol should be
|
|
||||||
specified in _/_e_t_c_/_s_u_d_o_._c_o_n_f along with a path to the plugin so that
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -70,6 +70,8 @@ SSuuddoo PPlluuggiinn AAPPII
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
implement the ssuuddoo policy checks. The name of the symbol should be
|
||||||
|
specified in _/_e_t_c_/_s_u_d_o_._c_o_n_f along with a path to the plugin so that
|
||||||
ssuuddoo can load it.
|
ssuuddoo can load it.
|
||||||
|
|
||||||
struct policy_plugin {
|
struct policy_plugin {
|
||||||
@@ -121,9 +123,7 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
the major and minor version number of the plugin API supported
|
the major and minor version number of the plugin API supported
|
||||||
by ssuuddoo.
|
by ssuuddoo.
|
||||||
|
|
||||||
conversation
|
|
||||||
A pointer to the conversation function that can be used by the
|
|
||||||
plugin to interact with the user (see below).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -136,6 +136,10 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
conversation
|
||||||
|
A pointer to the conversation function that can be used by the
|
||||||
|
plugin to interact with the user (see below).
|
||||||
|
|
||||||
plugin_printf
|
plugin_printf
|
||||||
A pointer to a printf-style function that may be used to
|
A pointer to a printf-style function that may be used to
|
||||||
display informational or error messages (see below).
|
display informational or error messages (see below).
|
||||||
@@ -186,10 +190,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
set _i_m_p_l_i_e_d___s_h_e_l_l to true. This allows ssuuddoo with no
|
set _i_m_p_l_i_e_d___s_h_e_l_l to true. This allows ssuuddoo with no
|
||||||
arguments to be used similarly to _s_u(1). If the plugin
|
arguments to be used similarly to _s_u(1). If the plugin
|
||||||
does not to support this usage, it may return a value of -2
|
does not to support this usage, it may return a value of -2
|
||||||
from the check_policy function, which will cause ssuuddoo to
|
|
||||||
print a usage message and exit.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -202,6 +202,9 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
from the check_policy function, which will cause ssuuddoo to
|
||||||
|
print a usage message and exit.
|
||||||
|
|
||||||
preserve_groups=bool
|
preserve_groups=bool
|
||||||
Set to true if the user specified the -P flag, indicating
|
Set to true if the user specified the -P flag, indicating
|
||||||
that the user wishes to preserve the group vector instead
|
that the user wishes to preserve the group vector instead
|
||||||
@@ -254,9 +257,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
Additional settings may be added in the future so the plugin
|
Additional settings may be added in the future so the plugin
|
||||||
should silently ignore settings that it does not recognize.
|
should silently ignore settings that it does not recognize.
|
||||||
|
|
||||||
user_info
|
|
||||||
A vector of information about the user running the command in
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.8.0a2 June 9, 2010 4
|
1.8.0a2 June 9, 2010 4
|
||||||
@@ -268,6 +268,8 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
user_info
|
||||||
|
A vector of information about the user running the command in
|
||||||
the form of "name=value" strings. The vector is terminated by
|
the form of "name=value" strings. The vector is terminated by
|
||||||
a NULL pointer.
|
a NULL pointer.
|
||||||
|
|
||||||
@@ -321,8 +323,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
close
|
close
|
||||||
void (*close)(int exit_status, int error);
|
void (*close)(int exit_status, int error);
|
||||||
|
|
||||||
The close function is called when the command being run by ssuuddoo
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.8.0a2 June 9, 2010 5
|
1.8.0a2 June 9, 2010 5
|
||||||
@@ -334,6 +334,7 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
The close function is called when the command being run by ssuuddoo
|
||||||
finishes.
|
finishes.
|
||||||
|
|
||||||
The function arguments are as follows:
|
The function arguments are as follows:
|
||||||
@@ -387,7 +388,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
not allowed, -1 for a general error, or -2 for a usage error or if
|
not allowed, -1 for a general error, or -2 for a usage error or if
|
||||||
ssuuddooeeddiitt was specified but is unsupported by the plugin. In the
|
ssuuddooeeddiitt was specified but is unsupported by the plugin. In the
|
||||||
latter case, ssuuddoo will print a usage message before it exits. If
|
latter case, ssuuddoo will print a usage message before it exits. If
|
||||||
an error occurs, the plugin may optionally call the conversation or
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -400,6 +400,7 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
an error occurs, the plugin may optionally call the conversation or
|
||||||
plugin_printf function with SUDO_CONF_ERROR_MSG to present
|
plugin_printf function with SUDO_CONF_ERROR_MSG to present
|
||||||
additional error information to the user.
|
additional error information to the user.
|
||||||
|
|
||||||
@@ -453,7 +454,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
runas_groups=list
|
runas_groups=list
|
||||||
The supplementary group vector to use for the command in
|
The supplementary group vector to use for the command in
|
||||||
the form of a comma-separated list of group IDs. If
|
the form of a comma-separated list of group IDs. If
|
||||||
_p_r_e_s_e_r_v_e___g_r_o_u_p_s is set, this option is ignored.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -466,6 +466,8 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
_p_r_e_s_e_r_v_e___g_r_o_u_p_s is set, this option is ignored.
|
||||||
|
|
||||||
login_class=login_class
|
login_class=login_class
|
||||||
BSD login class to use when setting resource limits and
|
BSD login class to use when setting resource limits and
|
||||||
nice value (optional). This option is only set on systems
|
nice value (optional). This option is only set on systems
|
||||||
@@ -518,8 +520,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
|
|
||||||
argv_out
|
argv_out
|
||||||
The NULL-terminated argument vector to pass to the _e_x_e_c_v_e_(_)
|
The NULL-terminated argument vector to pass to the _e_x_e_c_v_e_(_)
|
||||||
system call when executing the command. The plugin is
|
|
||||||
responsible for allocating and populating the vector.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -532,6 +532,9 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
system call when executing the command. The plugin is
|
||||||
|
responsible for allocating and populating the vector.
|
||||||
|
|
||||||
user_env_out
|
user_env_out
|
||||||
The NULL-terminated environment vector to use when executing
|
The NULL-terminated environment vector to use when executing
|
||||||
the command. The plugin is responsible for allocating and
|
the command. The plugin is responsible for allocating and
|
||||||
@@ -583,9 +586,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
Returns 1 on success, 0 on failure and -1 on error. On error, the
|
Returns 1 on success, 0 on failure and -1 on error. On error, the
|
||||||
plugin may optionally call the conversation or plugin_printf
|
plugin may optionally call the conversation or plugin_printf
|
||||||
function with SUDO_CONF_ERROR_MSG to present additional error
|
function with SUDO_CONF_ERROR_MSG to present additional error
|
||||||
information to the user.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -598,6 +598,8 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
information to the user.
|
||||||
|
|
||||||
invalidate
|
invalidate
|
||||||
void (*invalidate)(int remove);
|
void (*invalidate)(int remove);
|
||||||
|
|
||||||
@@ -651,8 +653,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
const char *msg;
|
const char *msg;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sudo_conv_reply {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.8.0a2 June 9, 2010 10
|
1.8.0a2 June 9, 2010 10
|
||||||
@@ -664,6 +664,8 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct sudo_conv_reply {
|
||||||
char *reply;
|
char *reply;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -716,8 +718,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
I/O for logging before passing it on.
|
I/O for logging before passing it on.
|
||||||
|
|
||||||
The log_ttyin function receives the raw user input from the terminal
|
The log_ttyin function receives the raw user input from the terminal
|
||||||
device (note that this will include input even when echo is disabled,
|
|
||||||
such as when a password is read). The log_ttyout function receives
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -730,6 +730,8 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
device (note that this will include input even when echo is disabled,
|
||||||
|
such as when a password is read). The log_ttyout function receives
|
||||||
output from the pseudo-tty that is suitable for replaying the user's
|
output from the pseudo-tty that is suitable for replaying the user's
|
||||||
session at a later time. The log_stdin, log_stdout and log_stderr
|
session at a later time. The log_stdin, log_stdout and log_stderr
|
||||||
functions are only called if the standard input, standard output or
|
functions are only called if the standard input, standard output or
|
||||||
@@ -782,8 +784,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
plugin_printf
|
plugin_printf
|
||||||
A pointer to a printf-style function that may be used by the
|
A pointer to a printf-style function that may be used by the
|
||||||
_s_h_o_w___v_e_r_s_i_o_n function to display version information (see
|
_s_h_o_w___v_e_r_s_i_o_n function to display version information (see
|
||||||
show_version below). The plugin_printf function may also be
|
|
||||||
used to display additional error message to the user.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -796,6 +796,9 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
show_version below). The plugin_printf function may also be
|
||||||
|
used to display additional error message to the user.
|
||||||
|
|
||||||
settings
|
settings
|
||||||
A vector of user-supplied ssuuddoo settings in the form of
|
A vector of user-supplied ssuuddoo settings in the form of
|
||||||
"name=value" strings. The vector is terminated by a NULL
|
"name=value" strings. The vector is terminated by a NULL
|
||||||
@@ -847,9 +850,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
|
|
||||||
The function arguments are as follows:
|
The function arguments are as follows:
|
||||||
|
|
||||||
exit_status
|
|
||||||
The command's exit status, as returned by the _w_a_i_t(2) system
|
|
||||||
call. The value of exit_status is undefined if error is non-
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -862,6 +862,9 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
exit_status
|
||||||
|
The command's exit status, as returned by the _w_a_i_t(2) system
|
||||||
|
call. The value of exit_status is undefined if error is non-
|
||||||
zero.
|
zero.
|
||||||
|
|
||||||
error
|
error
|
||||||
@@ -913,9 +916,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
log_stdin
|
log_stdin
|
||||||
int (*log_stdin)(const char *buf, unsigned int len);
|
int (*log_stdin)(const char *buf, unsigned int len);
|
||||||
|
|
||||||
The _l_o_g___s_t_d_i_n function is only used if the standard input does not
|
|
||||||
correspond to a tty device. It is called whenever data can be read
|
|
||||||
from the standard input but before it is passed to the running
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -928,6 +928,9 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
||||||
|
|
||||||
|
|
||||||
|
The _l_o_g___s_t_d_i_n function is only used if the standard input does not
|
||||||
|
correspond to a tty device. It is called whenever data can be read
|
||||||
|
from the standard input but before it is passed to the running
|
||||||
command. This allows the plugin to reject data if it chooses to
|
command. This allows the plugin to reject data if it chooses to
|
||||||
(for instance if the input contains banned content). Returns 1 if
|
(for instance if the input contains banned content). Returns 1 if
|
||||||
the data should be passed to the command, 0 if the data is rejected
|
the data should be passed to the command, 0 if the data is rejected
|
||||||
@@ -982,9 +985,6 @@ SUDO_PLUGIN(1m) MAINTENANCE COMMANDS SUDO_PLUGIN(1m)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.8.0a2 June 9, 2010 15
|
1.8.0a2 June 9, 2010 15
|
||||||
|
|
||||||
|
|
||||||
|
@@ -171,8 +171,9 @@ A \f(CW\*(C`Plugin\*(C'\fR line consists of the \f(CW\*(C`Plugin\*(C'\fR keyword
|
|||||||
plugin. The \fIsymbol_name\fR is the name of the \f(CW\*(C`struct policy_plugin\*(C'\fR
|
plugin. The \fIsymbol_name\fR is the name of the \f(CW\*(C`struct policy_plugin\*(C'\fR
|
||||||
or \f(CW\*(C`struct io_plugin\*(C'\fR in the plugin shared object. The \fIpath\fR
|
or \f(CW\*(C`struct io_plugin\*(C'\fR in the plugin shared object. The \fIpath\fR
|
||||||
may be fully qualified or relative. If not fully qualified it is
|
may be fully qualified or relative. If not fully qualified it is
|
||||||
relative to the \fI@prefix@/libexec\fR directory. Any additional parameters
|
relative to the \fI@prefix@/libexec\fR directory. Any additional
|
||||||
after the \fIpath\fR are ignored.
|
parameters after the \fIpath\fR are ignored. Lines that don't begin
|
||||||
|
with \f(CW\*(C`Plugin\*(C'\fR or \f(CW\*(C`Path\*(C'\fR are silently ignored.
|
||||||
.PP
|
.PP
|
||||||
The same shared object may contain multiple plugins, each with a
|
The same shared object may contain multiple plugins, each with a
|
||||||
different symbol name. The shared object file must be owned by uid
|
different symbol name. The shared object file must be owned by uid
|
||||||
@@ -186,6 +187,7 @@ This limitation does not apply to I/O plugins.
|
|||||||
\& #
|
\& #
|
||||||
\& # Format:
|
\& # Format:
|
||||||
\& # Plugin plugin_name plugin_path
|
\& # Plugin plugin_name plugin_path
|
||||||
|
\& # Path askpass /path/to/askpass
|
||||||
\& #
|
\& #
|
||||||
\& # The plugin_path is relative to @prefix@/libexec unless
|
\& # The plugin_path is relative to @prefix@/libexec unless
|
||||||
\& # fully qualified.
|
\& # fully qualified.
|
||||||
|
@@ -43,8 +43,9 @@ I<symbol_name> and the I<path> to the shared object containing the
|
|||||||
plugin. The I<symbol_name> is the name of the C<struct policy_plugin>
|
plugin. The I<symbol_name> is the name of the C<struct policy_plugin>
|
||||||
or C<struct io_plugin> in the plugin shared object. The I<path>
|
or C<struct io_plugin> in the plugin shared object. The I<path>
|
||||||
may be fully qualified or relative. If not fully qualified it is
|
may be fully qualified or relative. If not fully qualified it is
|
||||||
relative to the F<@prefix@/libexec> directory. Any additional parameters
|
relative to the F<@prefix@/libexec> directory. Any additional
|
||||||
after the I<path> are ignored.
|
parameters after the I<path> are ignored. Lines that don't begin
|
||||||
|
with C<Plugin> or C<Path> are silently ignored.
|
||||||
|
|
||||||
The same shared object may contain multiple plugins, each with a
|
The same shared object may contain multiple plugins, each with a
|
||||||
different symbol name. The shared object file must be owned by uid
|
different symbol name. The shared object file must be owned by uid
|
||||||
@@ -57,6 +58,7 @@ This limitation does not apply to I/O plugins.
|
|||||||
#
|
#
|
||||||
# Format:
|
# Format:
|
||||||
# Plugin plugin_name plugin_path
|
# Plugin plugin_name plugin_path
|
||||||
|
# Path askpass /path/to/askpass
|
||||||
#
|
#
|
||||||
# The plugin_path is relative to @prefix@/libexec unless
|
# The plugin_path is relative to @prefix@/libexec unless
|
||||||
# fully qualified.
|
# fully qualified.
|
||||||
|
@@ -136,27 +136,8 @@ check_user(int validated, int mode)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 /* XXX - checks need to be done in main driver */
|
/* XXX - should not lecture if askpass help is being used. */
|
||||||
/* If user specified -A, make sure we have an askpass helper. */
|
lecture(status);
|
||||||
if (ISSET(tgetpass_flags, TGP_ASKPASS)) {
|
|
||||||
if (user_askpass == NULL)
|
|
||||||
log_error(NO_MAIL,
|
|
||||||
"no askpass program specified, try setting SUDO_ASKPASS");
|
|
||||||
} else if (!ISSET(tgetpass_flags, TGP_STDIN)) {
|
|
||||||
/* If no tty but DISPLAY is set, use askpass if we have it. */
|
|
||||||
if (!user_ttypath && !tty_present()) {
|
|
||||||
if (user_askpass && user_display && *user_display != '\0') {
|
|
||||||
SET(tgetpass_flags, TGP_ASKPASS);
|
|
||||||
} else if (!def_visiblepw) {
|
|
||||||
log_error(NO_MAIL,
|
|
||||||
"no tty present and no askpass program specified");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ISSET(tgetpass_flags, TGP_ASKPASS))
|
|
||||||
#endif
|
|
||||||
lecture(status);
|
|
||||||
|
|
||||||
/* Expand any escapes in the prompt. */
|
/* Expand any escapes in the prompt. */
|
||||||
prompt = expand_prompt(user_prompt ? user_prompt : def_passprompt,
|
prompt = expand_prompt(user_prompt ? user_prompt : def_passprompt,
|
||||||
|
@@ -286,10 +286,6 @@ struct sudo_defs_types sudo_defs_table[] = {
|
|||||||
"type", T_STR,
|
"type", T_STR,
|
||||||
"SELinux type to use in the new security context: %s",
|
"SELinux type to use in the new security context: %s",
|
||||||
NULL,
|
NULL,
|
||||||
}, {
|
|
||||||
"askpass", T_STR|T_PATH|T_BOOL,
|
|
||||||
"Path to the askpass helper program: %s",
|
|
||||||
NULL,
|
|
||||||
}, {
|
}, {
|
||||||
"env_file", T_STR|T_PATH|T_BOOL,
|
"env_file", T_STR|T_PATH|T_BOOL,
|
||||||
"Path to the sudo-specific environment file: %s",
|
"Path to the sudo-specific environment file: %s",
|
||||||
|
@@ -130,28 +130,26 @@
|
|||||||
#define I_ROLE 64
|
#define I_ROLE 64
|
||||||
#define def_type (sudo_defs_table[65].sd_un.str)
|
#define def_type (sudo_defs_table[65].sd_un.str)
|
||||||
#define I_TYPE 65
|
#define I_TYPE 65
|
||||||
#define def_askpass (sudo_defs_table[66].sd_un.str)
|
#define def_env_file (sudo_defs_table[66].sd_un.str)
|
||||||
#define I_ASKPASS 66
|
#define I_ENV_FILE 66
|
||||||
#define def_env_file (sudo_defs_table[67].sd_un.str)
|
#define def_sudoers_locale (sudo_defs_table[67].sd_un.str)
|
||||||
#define I_ENV_FILE 67
|
#define I_SUDOERS_LOCALE 67
|
||||||
#define def_sudoers_locale (sudo_defs_table[68].sd_un.str)
|
#define def_visiblepw (sudo_defs_table[68].sd_un.flag)
|
||||||
#define I_SUDOERS_LOCALE 68
|
#define I_VISIBLEPW 68
|
||||||
#define def_visiblepw (sudo_defs_table[69].sd_un.flag)
|
#define def_pwfeedback (sudo_defs_table[69].sd_un.flag)
|
||||||
#define I_VISIBLEPW 69
|
#define I_PWFEEDBACK 69
|
||||||
#define def_pwfeedback (sudo_defs_table[70].sd_un.flag)
|
#define def_fast_glob (sudo_defs_table[70].sd_un.flag)
|
||||||
#define I_PWFEEDBACK 70
|
#define I_FAST_GLOB 70
|
||||||
#define def_fast_glob (sudo_defs_table[71].sd_un.flag)
|
#define def_umask_override (sudo_defs_table[71].sd_un.flag)
|
||||||
#define I_FAST_GLOB 71
|
#define I_UMASK_OVERRIDE 71
|
||||||
#define def_umask_override (sudo_defs_table[72].sd_un.flag)
|
#define def_log_input (sudo_defs_table[72].sd_un.flag)
|
||||||
#define I_UMASK_OVERRIDE 72
|
#define I_LOG_INPUT 72
|
||||||
#define def_log_input (sudo_defs_table[73].sd_un.flag)
|
#define def_log_output (sudo_defs_table[73].sd_un.flag)
|
||||||
#define I_LOG_INPUT 73
|
#define I_LOG_OUTPUT 73
|
||||||
#define def_log_output (sudo_defs_table[74].sd_un.flag)
|
#define def_compress_io (sudo_defs_table[74].sd_un.flag)
|
||||||
#define I_LOG_OUTPUT 74
|
#define I_COMPRESS_IO 74
|
||||||
#define def_compress_io (sudo_defs_table[75].sd_un.flag)
|
#define def_use_pty (sudo_defs_table[75].sd_un.flag)
|
||||||
#define I_COMPRESS_IO 75
|
#define I_USE_PTY 75
|
||||||
#define def_use_pty (sudo_defs_table[76].sd_un.flag)
|
|
||||||
#define I_USE_PTY 76
|
|
||||||
|
|
||||||
enum def_tupple {
|
enum def_tupple {
|
||||||
never,
|
never,
|
||||||
|
@@ -211,9 +211,6 @@ role
|
|||||||
type
|
type
|
||||||
T_STR
|
T_STR
|
||||||
"SELinux type to use in the new security context: %s"
|
"SELinux type to use in the new security context: %s"
|
||||||
askpass
|
|
||||||
T_STR|T_PATH|T_BOOL
|
|
||||||
"Path to the askpass helper program: %s"
|
|
||||||
env_file
|
env_file
|
||||||
T_STR|T_PATH|T_BOOL
|
T_STR|T_PATH|T_BOOL
|
||||||
"Path to the sudo-specific environment file: %s"
|
"Path to the sudo-specific environment file: %s"
|
||||||
|
@@ -444,9 +444,6 @@ init_defaults(void)
|
|||||||
#endif
|
#endif
|
||||||
#ifdef ENV_EDITOR
|
#ifdef ENV_EDITOR
|
||||||
def_env_editor = TRUE;
|
def_env_editor = TRUE;
|
||||||
#endif
|
|
||||||
#ifdef _PATH_SUDO_ASKPASS
|
|
||||||
def_askpass = estrdup(_PATH_SUDO_ASKPASS);
|
|
||||||
#endif
|
#endif
|
||||||
def_sudoers_locale = estrdup("C");
|
def_sudoers_locale = estrdup("C");
|
||||||
def_env_reset = TRUE;
|
def_env_reset = TRUE;
|
||||||
|
@@ -718,10 +718,6 @@ init_vars(char * const envp[])
|
|||||||
for (ep = envp; *ep; ep++) {
|
for (ep = envp; *ep; ep++) {
|
||||||
/* XXX - don't fill in if empty string */
|
/* XXX - don't fill in if empty string */
|
||||||
switch (**ep) {
|
switch (**ep) {
|
||||||
case 'D':
|
|
||||||
if (strncmp("DISPLAY=", *ep, 8) == 0)
|
|
||||||
user_display = *ep + 8;
|
|
||||||
break;
|
|
||||||
case 'K':
|
case 'K':
|
||||||
if (strncmp("KRB5CCNAME=", *ep, 11) == 0)
|
if (strncmp("KRB5CCNAME=", *ep, 11) == 0)
|
||||||
user_ccname = *ep + 11;
|
user_ccname = *ep + 11;
|
||||||
@@ -735,8 +731,6 @@ init_vars(char * const envp[])
|
|||||||
user_prompt = *ep + 12;
|
user_prompt = *ep + 12;
|
||||||
else if (strncmp("SUDO_USER=", *ep, 10) == 0)
|
else if (strncmp("SUDO_USER=", *ep, 10) == 0)
|
||||||
prev_user = *ep + 10;
|
prev_user = *ep + 10;
|
||||||
else if (strncmp("SUDO_ASKPASS=", *ep, 13) == 0)
|
|
||||||
user_askpass = *ep + 13;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -60,8 +60,6 @@ struct sudo_user {
|
|||||||
char *cmnd_safe;
|
char *cmnd_safe;
|
||||||
char *class_name;
|
char *class_name;
|
||||||
char *krb5_ccname;
|
char *krb5_ccname;
|
||||||
char *display;
|
|
||||||
char *askpass;
|
|
||||||
int closefrom;
|
int closefrom;
|
||||||
int ngroups;
|
int ngroups;
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
@@ -171,8 +169,6 @@ struct sudo_user {
|
|||||||
#define user_host (sudo_user.host)
|
#define user_host (sudo_user.host)
|
||||||
#define user_shost (sudo_user.shost)
|
#define user_shost (sudo_user.shost)
|
||||||
#define user_ccname (sudo_user.krb5_ccname)
|
#define user_ccname (sudo_user.krb5_ccname)
|
||||||
#define user_display (sudo_user.display)
|
|
||||||
#define user_askpass (sudo_user.askpass)
|
|
||||||
#define safe_cmnd (sudo_user.cmnd_safe)
|
#define safe_cmnd (sudo_user.cmnd_safe)
|
||||||
#define login_class (sudo_user.class_name)
|
#define login_class (sudo_user.class_name)
|
||||||
#define runas_pw (sudo_user._runas_pw)
|
#define runas_pw (sudo_user._runas_pw)
|
||||||
|
@@ -82,22 +82,35 @@ sudo_read_conf(const char *conf_file)
|
|||||||
if (*cp == '\0')
|
if (*cp == '\0')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Look for a line starting with "Plugin" */
|
/* Look for a line starting with "Path" */
|
||||||
if (strncasecmp(cp, "Plugin", 6) != 0)
|
if (strncasecmp(cp, "Path", 4) == 0) {
|
||||||
continue;
|
/* Parse line */
|
||||||
|
if ((name = strtok(cp + 4, " \t")) == NULL ||
|
||||||
/* Parse line */
|
(path = strtok(NULL, " \t")) == NULL) {
|
||||||
if ((name = strtok(cp + 6, " \t")) == NULL ||
|
continue;
|
||||||
(path = strtok(NULL, " \t")) == NULL) {
|
}
|
||||||
|
if (strcasecmp(name, "askpass") != 0)
|
||||||
|
continue;
|
||||||
|
/* XXX - Just set in environment for now */
|
||||||
|
setenv("SUDO_ASKPASS", path, 0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
info = emalloc(sizeof(*info));
|
/* Look for a line starting with "Plugin" */
|
||||||
info->symbol_name = estrdup(name);
|
if (strncasecmp(cp, "Plugin", 6) == 0) {
|
||||||
info->path = estrdup(path);
|
/* Parse line */
|
||||||
info->prev = info;
|
if ((name = strtok(cp + 6, " \t")) == NULL ||
|
||||||
info->next = NULL;
|
(path = strtok(NULL, " \t")) == NULL) {
|
||||||
tq_append(&pil, info);
|
continue;
|
||||||
|
}
|
||||||
|
info = emalloc(sizeof(*info));
|
||||||
|
info->symbol_name = estrdup(name);
|
||||||
|
info->path = estrdup(path);
|
||||||
|
info->prev = info;
|
||||||
|
info->next = NULL;
|
||||||
|
tq_append(&pil, info);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
@@ -367,6 +367,11 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
|
|||||||
sudo_settings[ARG_IMPLIED_SHELL].value = "true";
|
sudo_settings[ARG_IMPLIED_SHELL].value = "true";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _PATH_SUDO_ASKPASS
|
||||||
|
if (ISSET(tgetpass_flags, TGP_ASKPASS) && !getenv("SUDO_ASKPASS"))
|
||||||
|
errorx(1, "no askpass program specified, try setting SUDO_ASKPASS");
|
||||||
|
#endif
|
||||||
|
|
||||||
if (mode == MODE_HELP)
|
if (mode == MODE_HELP)
|
||||||
usage(0);
|
usage(0);
|
||||||
|
|
||||||
|
@@ -79,16 +79,25 @@ tgetpass(const char *prompt, int timeout, int flags)
|
|||||||
|
|
||||||
(void) fflush(stdout);
|
(void) fflush(stdout);
|
||||||
|
|
||||||
/* If using a helper program to get the password, run it instead. */
|
if (askpass == NULL) {
|
||||||
/* XXX - askpass may be set by policy */
|
askpass = getenv("SUDO_ASKPASS");
|
||||||
if (ISSET(flags, TGP_ASKPASS)) {
|
|
||||||
if (!askpass) {
|
|
||||||
askpass = getenv("SUDO_ASKPASS");
|
|
||||||
#ifdef _PATH_SUDO_ASKPASS
|
#ifdef _PATH_SUDO_ASKPASS
|
||||||
if (!askpass)
|
if (askpass == NULL)
|
||||||
askpass = _PATH_SUDO_ASKPASS;
|
askpass = _PATH_SUDO_ASKPASS;
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If no tty present and we need to disable echo, try askpass. */
|
||||||
|
if (!ISSET(flags, TGP_STDIN|TGP_ECHO|TGP_ASKPASS) && !tty_present()) {
|
||||||
|
if (askpass == NULL || getenv("DISPLAY") == NULL) {
|
||||||
|
warningx("no tty present and no askpass program specified");
|
||||||
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
SET(flags, TGP_ASKPASS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If using a helper program to get the password, run it instead. */
|
||||||
|
if (ISSET(flags, TGP_ASKPASS)) {
|
||||||
if (askpass && *askpass)
|
if (askpass && *askpass)
|
||||||
return(sudo_askpass(askpass, prompt));
|
return(sudo_askpass(askpass, prompt));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user