From 4fb8a83e6fd41284804ce23c47ca5e8e6496529a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 15 Jun 2010 15:11:10 -0400 Subject: [PATCH] Fix -A flag when askpass is specified in sudo.conf or if sudo doesn't need to read a password. --- src/load_plugins.c | 3 --- src/parse_args.c | 5 ----- src/sudo.c | 6 +++--- src/sudo.h | 1 + src/tgetpass.c | 5 +++-- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/load_plugins.c b/src/load_plugins.c index d33134ac0..9b783d847 100644 --- a/src/load_plugins.c +++ b/src/load_plugins.c @@ -45,9 +45,6 @@ #include "sudo_plugin.h" #include "sudo_plugin_int.h" -/* tgetpass.c */ -extern const char *askpass_path; - /* * Read in /etc/sudo.conf * Returns a list of plugins. diff --git a/src/parse_args.c b/src/parse_args.c index 932bfbd7f..3fca61347 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -363,11 +363,6 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp, 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) usage(0); diff --git a/src/sudo.c b/src/sudo.c index 93d52966d..c9e7a797d 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -138,12 +138,12 @@ main(int argc, char *argv[], char *envp[]) memset(&user_details, 0, sizeof(user_details)); user_info = get_user_info(&user_details); - /* Parse command line arguments. */ - sudo_mode = parse_args(argc, argv, &nargc, &nargv, &settings, &env_add); - /* Read sudo.conf and load plugins. */ sudo_load_plugins(_PATH_SUDO_CONF, &policy_plugin, &io_plugins); + /* Parse command line arguments. */ + sudo_mode = parse_args(argc, argv, &nargc, &nargv, &settings, &env_add); + /* Open policy plugin. */ ok = policy_plugin.u.policy->open(SUDO_API_VERSION, sudo_conversation, _sudo_printf, settings, user_info, envp); diff --git a/src/sudo.h b/src/sudo.h index 5db596c5b..25f42e9cc 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -157,6 +157,7 @@ void cleanup(int); /* tgetpass.c */ char *tgetpass(const char *, int, int); int tty_present(void); +extern const char *askpass_path; /* zero_bytes.c */ void zero_bytes(volatile void *, size_t); diff --git a/src/tgetpass.c b/src/tgetpass.c index dbffe4879..f2fae5dfe 100644 --- a/src/tgetpass.c +++ b/src/tgetpass.c @@ -101,8 +101,9 @@ tgetpass(const char *prompt, int timeout, int flags) /* If using a helper program to get the password, run it instead. */ if (ISSET(flags, TGP_ASKPASS)) { - if (askpass && *askpass) - return(sudo_askpass(askpass, prompt)); + if (askpass == NULL || *askpass == '\0') + errorx(1, "no askpass program specified, try setting SUDO_ASKPASS"); + return(sudo_askpass(askpass, prompt)); } restart: