From: Todd C. Miller Date: Thu, 10 Jun 2010 16:03:40 +0000 (-0400) Subject: Store askpass path in a global instead of uses setenv() which many X-Git-Tag: SUDO_1_8_0~497 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b91b65722b6095186a7f012a7a3a292eb7570078;p=sudo Store askpass path in a global instead of uses setenv() which many systems lack. --- diff --git a/src/load_plugins.c b/src/load_plugins.c index 685535dc1..971ef92b6 100644 --- a/src/load_plugins.c +++ b/src/load_plugins.c @@ -45,6 +45,9 @@ #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. @@ -91,8 +94,7 @@ sudo_read_conf(const char *conf_file) } if (strcasecmp(name, "askpass") != 0) continue; - /* XXX - Just set in environment for now */ - setenv("SUDO_ASKPASS", path, 0); + askpass_path = estrdup(path); continue; } diff --git a/src/tgetpass.c b/src/tgetpass.c index 6b2f054e1..81caa29eb 100644 --- a/src/tgetpass.c +++ b/src/tgetpass.c @@ -64,6 +64,12 @@ static char *sudo_askpass(const char *, const char *); extern struct user_details user_details; /* XXX */ +#ifdef _PATH_SUDO_ASKPASS +const char *askpass_path = _PATH_SUDO_ASKPASS; +#else +const char *askpass_path; +#endif + /* * Like getpass(3) but with timeout and echo flags. */ @@ -73,7 +79,7 @@ tgetpass(const char *prompt, int timeout, int flags) sigaction_t sa, savealrm, saveint, savehup, savequit, saveterm; sigaction_t savetstp, savettin, savettou, savepipe; char *pass; - static char *askpass; + static const char *askpass; static char buf[SUDO_PASS_MAX + 1]; int i, input, output, save_errno, neednl = 0, need_restart; @@ -81,10 +87,8 @@ tgetpass(const char *prompt, int timeout, int flags) if (askpass == NULL) { askpass = getenv("SUDO_ASKPASS"); -#ifdef _PATH_SUDO_ASKPASS - if (askpass == NULL) - askpass = _PATH_SUDO_ASKPASS; -#endif + if (askpass == NULL || *askpass == '\0') + askpass = askpass_path; } /* If no tty present and we need to disable echo, try askpass. */