Move tty checks into check_user() so we only do them if we actually
need a password.
This commit is contained in:
17
check.c
17
check.c
@@ -104,6 +104,23 @@ check_user(validated, interactive)
|
|||||||
if (!interactive)
|
if (!interactive)
|
||||||
errorx(1, "sorry, a password is required to run %s", getprogname());
|
errorx(1, "sorry, a password is required to run %s", getprogname());
|
||||||
|
|
||||||
|
/* If user specified -A, make sure we have an askpass helper. */
|
||||||
|
if (ISSET(tgetpass_flags, TGP_ASKPASS)) {
|
||||||
|
if (user_askpass == NULL)
|
||||||
|
log_error(NO_MAIL,
|
||||||
|
"no askpass program specified, try setting SUDO_ASKPASS");
|
||||||
|
} else {
|
||||||
|
/* If no tty but DISPLAY is set, use askpass if we have it. */
|
||||||
|
if (!user_ttypath && !ISSET(tgetpass_flags, TGP_STDIN)) {
|
||||||
|
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))
|
if (!ISSET(tgetpass_flags, TGP_ASKPASS))
|
||||||
lecture(status);
|
lecture(status);
|
||||||
|
|
||||||
|
27
sudo.c
27
sudo.c
@@ -388,6 +388,10 @@ main(argc, argv, envp)
|
|||||||
(void) close(fd);
|
(void) close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Use askpass value from sudoers unless user specified their own. */
|
||||||
|
if (def_askpass && !user_askpass)
|
||||||
|
user_askpass = def_askpass;
|
||||||
|
|
||||||
/* User may have overridden environment resetting via the -E flag. */
|
/* User may have overridden environment resetting via the -E flag. */
|
||||||
if (ISSET(sudo_mode, MODE_PRESERVE_ENV) && def_setenv)
|
if (ISSET(sudo_mode, MODE_PRESERVE_ENV) && def_setenv)
|
||||||
def_env_reset = FALSE;
|
def_env_reset = FALSE;
|
||||||
@@ -399,29 +403,8 @@ main(argc, argv, envp)
|
|||||||
auth_pw = get_authpw();
|
auth_pw = get_authpw();
|
||||||
|
|
||||||
/* Require a password if sudoers says so. */
|
/* Require a password if sudoers says so. */
|
||||||
if (def_authenticate) {
|
if (def_authenticate)
|
||||||
/* Use askpass value from sudoers unless user specified their own. */
|
|
||||||
if (def_askpass && !user_askpass)
|
|
||||||
user_askpass = def_askpass;
|
|
||||||
|
|
||||||
/* If user specified -A, make sure we have an askpass helper. */
|
|
||||||
if (ISSET(tgetpass_flags, TGP_ASKPASS)) {
|
|
||||||
if (user_askpass == NULL)
|
|
||||||
log_error(NO_MAIL,
|
|
||||||
"no askpass program specified, try setting SUDO_ASKPASS");
|
|
||||||
} else {
|
|
||||||
/* If no tty but DISPLAY is set, use askpass if we have it. */
|
|
||||||
if (!user_ttypath && !ISSET(tgetpass_flags, TGP_STDIN)) {
|
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
check_user(validated, !ISSET(sudo_mode, MODE_NONINTERACTIVE));
|
check_user(validated, !ISSET(sudo_mode, MODE_NONINTERACTIVE));
|
||||||
}
|
|
||||||
|
|
||||||
/* If run as root with SUDO_USER set, set sudo_user.pw to that user. */
|
/* If run as root with SUDO_USER set, set sudo_user.pw to that user. */
|
||||||
/* XXX - causes confusion when root is not listed in sudoers */
|
/* XXX - causes confusion when root is not listed in sudoers */
|
||||||
|
Reference in New Issue
Block a user