--- embedaddon/sudo/src/tgetpass.c 2012/10/09 09:29:52 1.1.1.3 +++ embedaddon/sudo/src/tgetpass.c 2013/07/22 10:46:13 1.1.1.4 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2007-2011 + * Copyright (c) 1996, 1998-2005, 2007-2013 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -26,7 +26,6 @@ #include #include -#include #include #ifdef STDC_HEADERS # include @@ -57,7 +56,7 @@ static volatile sig_atomic_t signo[NSIG]; -static void handler(int); +static void tgetpass_handler(int); static char *getln(int, char *, size_t, int); static char *sudo_askpass(const char *, const char *); @@ -96,7 +95,7 @@ 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 == NULL || *askpass == '\0') - errorx(1, _("no askpass program specified, try setting SUDO_ASKPASS")); + fatalx(_("no askpass program specified, try setting SUDO_ASKPASS")); debug_return_str_masked(sudo_askpass(askpass, prompt)); } @@ -131,7 +130,7 @@ restart: zero_bytes(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_flags = SA_INTERRUPT; /* don't restart system calls */ - sa.sa_handler = handler; + sa.sa_handler = tgetpass_handler; (void) sigaction(SIGALRM, &sa, &savealrm); (void) sigaction(SIGINT, &sa, &saveint); (void) sigaction(SIGHUP, &sa, &savehup); @@ -215,10 +214,10 @@ sudo_askpass(const char *askpass, const char *prompt) debug_decl(sudo_askpass, SUDO_DEBUG_CONV) if (pipe(pfd) == -1) - error(1, _("unable to create pipe")); + fatal(_("unable to create pipe")); if ((pid = fork()) == -1) - error(1, _("unable to fork")); + fatal(_("unable to fork")); if (pid == 0) { /* child, point stdout to output side of the pipe and exec askpass */ @@ -226,7 +225,8 @@ sudo_askpass(const char *askpass, const char *prompt) warning("dup2"); _exit(255); } - (void) setuid(ROOT_UID); + if (setuid(ROOT_UID) == -1) + warning("setuid(%d)", ROOT_UID); if (setgid(user_details.gid)) { warning(_("unable to set gid to %u"), (unsigned int)user_details.gid); _exit(255); @@ -316,7 +316,7 @@ getln(int fd, char *buf, size_t bufsiz, int feedback) } static void -handler(int s) +tgetpass_handler(int s) { if (s != SIGALRM) signo[s] = 1;