static char *getln(int, char *, size_t, int);
static char *sudo_askpass(const char *, const char *);
-#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.
*/
static const char *askpass;
static char buf[SUDO_PASS_MAX + 1];
int i, input, output, save_errno, neednl = 0, need_restart;
+ debug_decl(tgetpass, SUDO_DEBUG_CONV)
(void) fflush(stdout);
if (askpass == NULL) {
- askpass = getenv("SUDO_ASKPASS");
+ askpass = getenv_unhooked("SUDO_ASKPASS");
if (askpass == NULL || *askpass == '\0')
- askpass = askpass_path;
+ askpass = sudo_conf_askpass_path();
}
/* If no tty present and we need to disable echo, try askpass. */
if (!ISSET(flags, TGP_STDIN|TGP_ECHO|TGP_ASKPASS|TGP_NOECHO_TRY) &&
!tty_present()) {
- if (askpass == NULL || getenv("DISPLAY") == NULL) {
+ if (askpass == NULL || getenv_unhooked("DISPLAY") == NULL) {
warningx(_("no tty present and no askpass program specified"));
- return NULL;
+ debug_return_str(NULL);
}
SET(flags, TGP_ASKPASS);
}
if (ISSET(flags, TGP_ASKPASS)) {
if (askpass == NULL || *askpass == '\0')
errorx(1, _("no askpass program specified, try setting SUDO_ASKPASS"));
- return sudo_askpass(askpass, prompt);
+ debug_return_str_masked(sudo_askpass(askpass, prompt));
}
restart:
if (save_errno)
errno = save_errno;
- return pass;
+
+ debug_return_str_masked(pass);
}
/*
sigaction_t sa, saved_sa_pipe;
int pfd[2];
pid_t pid;
+ debug_decl(sudo_askpass, SUDO_DEBUG_CONV)
if (pipe(pfd) == -1)
error(1, _("unable to create pipe"));
(void) close(pfd[0]);
(void) sigaction(SIGPIPE, &saved_sa_pipe, NULL);
- return pass;
+ if (pass == NULL)
+ errno = EINTR; /* make cancel button simulate ^C */
+
+ debug_return_str_masked(pass);
}
extern int term_erase, term_kill;
ssize_t nr = -1;
char *cp = buf;
char c = '\0';
+ debug_decl(getln, SUDO_DEBUG_CONV)
if (left == 0) {
errno = EINVAL;
- return NULL; /* sanity */
+ debug_return_str(NULL); /* sanity */
}
while (--left) {
}
continue;
}
- if (write(fd, "*", 1) == -1)
- /* shut up glibc */;
+ ignore_result(write(fd, "*", 1));
}
*cp++ = c;
}
}
}
- return nr == 1 ? buf : NULL;
+ debug_return_str_masked(nr == 1 ? buf : NULL);
}
static void
tty_present(void)
{
int fd;
+ debug_decl(tty_present, SUDO_DEBUG_UTIL)
if ((fd = open(_PATH_TTY, O_RDWR|O_NOCTTY)) != -1)
close(fd);
- return fd != -1;
+ debug_return_bool(fd != -1);
}