Diff for /embedaddon/sudo/src/tgetpass.c between versions 1.1.1.1 and 1.1.1.3

version 1.1.1.1, 2012/02/21 16:23:02 version 1.1.1.3, 2012/10/09 09:29:52
Line 61  static void handler(int); Line 61  static void handler(int);
 static char *getln(int, char *, size_t, int);  static char *getln(int, char *, size_t, int);
 static char *sudo_askpass(const char *, const char *);  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.   * Like getpass(3) but with timeout and echo flags.
  */   */
Line 79  tgetpass(const char *prompt, int timeout, int flags) Line 73  tgetpass(const char *prompt, int timeout, int flags)
     static const char *askpass;      static const char *askpass;
     static char buf[SUDO_PASS_MAX + 1];      static char buf[SUDO_PASS_MAX + 1];
     int i, input, output, save_errno, neednl = 0, need_restart;      int i, input, output, save_errno, neednl = 0, need_restart;
       debug_decl(tgetpass, SUDO_DEBUG_CONV)
   
     (void) fflush(stdout);      (void) fflush(stdout);
   
     if (askpass == NULL) {      if (askpass == NULL) {
        askpass = getenv("SUDO_ASKPASS");        askpass = getenv_unhooked("SUDO_ASKPASS");
         if (askpass == NULL || *askpass == '\0')          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 no tty present and we need to disable echo, try askpass. */
     if (!ISSET(flags, TGP_STDIN|TGP_ECHO|TGP_ASKPASS|TGP_NOECHO_TRY) &&      if (!ISSET(flags, TGP_STDIN|TGP_ECHO|TGP_ASKPASS|TGP_NOECHO_TRY) &&
         !tty_present()) {          !tty_present()) {
        if (askpass == NULL || getenv("DISPLAY") == NULL) {        if (askpass == NULL || getenv_unhooked("DISPLAY") == NULL) {
             warningx(_("no tty present and no askpass program specified"));              warningx(_("no tty present and no askpass program specified"));
            return NULL;            debug_return_str(NULL);
         }          }
         SET(flags, TGP_ASKPASS);          SET(flags, TGP_ASKPASS);
     }      }
Line 102  tgetpass(const char *prompt, int timeout, int flags) Line 97  tgetpass(const char *prompt, int timeout, int flags)
     if (ISSET(flags, TGP_ASKPASS)) {      if (ISSET(flags, TGP_ASKPASS)) {
         if (askpass == NULL || *askpass == '\0')          if (askpass == NULL || *askpass == '\0')
             errorx(1, _("no askpass program specified, try setting SUDO_ASKPASS"));              errorx(1, _("no askpass program specified, try setting SUDO_ASKPASS"));
        return sudo_askpass(askpass, prompt);        debug_return_str_masked(sudo_askpass(askpass, prompt));
     }      }
   
 restart:  restart:
Line 203  restore: Line 198  restore:
   
     if (save_errno)      if (save_errno)
         errno = save_errno;          errno = save_errno;
    return pass;
     debug_return_str_masked(pass);
 }  }
   
 /*  /*
Line 216  sudo_askpass(const char *askpass, const char *prompt) Line 212  sudo_askpass(const char *askpass, const char *prompt)
     sigaction_t sa, saved_sa_pipe;      sigaction_t sa, saved_sa_pipe;
     int pfd[2];      int pfd[2];
     pid_t pid;      pid_t pid;
       debug_decl(sudo_askpass, SUDO_DEBUG_CONV)
   
     if (pipe(pfd) == -1)      if (pipe(pfd) == -1)
         error(1, _("unable to create pipe"));          error(1, _("unable to create pipe"));
Line 257  sudo_askpass(const char *askpass, const char *prompt) Line 254  sudo_askpass(const char *askpass, const char *prompt)
     (void) close(pfd[0]);      (void) close(pfd[0]);
     (void) sigaction(SIGPIPE, &saved_sa_pipe, NULL);      (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;  extern int term_erase, term_kill;
Line 269  getln(int fd, char *buf, size_t bufsiz, int feedback) Line 269  getln(int fd, char *buf, size_t bufsiz, int feedback)
     ssize_t nr = -1;      ssize_t nr = -1;
     char *cp = buf;      char *cp = buf;
     char c = '\0';      char c = '\0';
       debug_decl(getln, SUDO_DEBUG_CONV)
   
     if (left == 0) {      if (left == 0) {
         errno = EINVAL;          errno = EINVAL;
        return NULL;                       /* sanity */        debug_return_str(NULL);                /* sanity */
     }      }
   
     while (--left) {      while (--left) {
Line 297  getln(int fd, char *buf, size_t bufsiz, int feedback) Line 298  getln(int fd, char *buf, size_t bufsiz, int feedback)
                 }                  }
                 continue;                  continue;
             }              }
            if (write(fd, "*", 1) == -1)            ignore_result(write(fd, "*", 1));
                /* shut up glibc */; 
         }          }
         *cp++ = c;          *cp++ = c;
     }      }
Line 312  getln(int fd, char *buf, size_t bufsiz, int feedback) Line 312  getln(int fd, char *buf, size_t bufsiz, int feedback)
         }          }
     }      }
   
    return nr == 1 ? buf : NULL;    debug_return_str_masked(nr == 1 ? buf : NULL);
 }  }
   
 static void  static void
Line 326  int Line 326  int
 tty_present(void)  tty_present(void)
 {  {
     int fd;      int fd;
       debug_decl(tty_present, SUDO_DEBUG_UTIL)
   
     if ((fd = open(_PATH_TTY, O_RDWR|O_NOCTTY)) != -1)      if ((fd = open(_PATH_TTY, O_RDWR|O_NOCTTY)) != -1)
         close(fd);          close(fd);
    return fd != -1;    debug_return_bool(fd != -1);
 }  }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>