Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/crypto/external/bsd/openssh/dist use getpassfd()



details:   https://anonhg.NetBSD.org/src/rev/c7fd950a36dd
branches:  trunk
changeset: 778801:c7fd950a36dd
user:      christos <christos%NetBSD.org@localhost>
date:      Fri Apr 13 23:57:08 2012 +0000

description:
use getpassfd()

diffstat:

 crypto/external/bsd/openssh/dist/readpassphrase.c |  47 ++++++++++++++++++----
 1 files changed, 37 insertions(+), 10 deletions(-)

diffs (79 lines):

diff -r 1b19f42e16d5 -r c7fd950a36dd crypto/external/bsd/openssh/dist/readpassphrase.c
--- a/crypto/external/bsd/openssh/dist/readpassphrase.c Fri Apr 13 23:29:14 2012 +0000
+++ b/crypto/external/bsd/openssh/dist/readpassphrase.c Fri Apr 13 23:57:08 2012 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: readpassphrase.c,v 1.1 2009/06/07 22:38:47 christos Exp $      */
+/*     $NetBSD: readpassphrase.c,v 1.2 2012/04/13 23:57:08 christos Exp $      */
 /*
  * Copyright (c) 2000 Todd C. Miller <Todd.Miller%courtesan.com@localhost>
  * All rights reserved.
@@ -43,16 +43,14 @@
 #include <readpassphrase.h>
 
 char *
-readpassphrase(prompt, buf, bufsiz, flags)
-       const char *prompt;
-       char *buf;
-       size_t bufsiz;
-       int flags;
+readpassphrase(
+       const char *prompt,
+       char *buf,
+       size_t bufsiz,
+       int flags)
 {
-       struct termios term, oterm;
-       char ch, *p, *end;
        int input, output;
-       sigset_t oset, nset;
+       char *ret;
 
        /* I suppose we could alloc on demand in this case (XXX). */
        if (bufsiz == 0) {
@@ -73,6 +71,11 @@
                output = STDERR_FILENO;
        }
 
+#ifndef GETPASS_ECHO
+       struct termios term, oterm;
+       char ch, *p, *end;
+       sigset_t oset, nset;
+
        /*
         * We block SIGINT and SIGTSTP so the terminal is not left
         * in an inconsistent state (ie: no echo).  It would probably
@@ -119,9 +122,33 @@
        if (memcmp(&term, &oterm, sizeof(term)) != 0)
                (void)tcsetattr(input, TCSAFLUSH|TCSASOFT, &oterm);
        (void)sigprocmask(SIG_SETMASK, &oset, NULL);
+       ret = buf;
+#else
+       int gflags = 0;
+       int fd[3];
+
+       if (flags & RPP_ECHO_ON)
+               gflags |= GETPASS_ECHO;
+       if (flags & RPP_REQUIRE_TTY)
+               gflags |= GETPASS_NEED_TTY;
+       if (flags & RPP_FORCELOWER)
+               gflags |= GETPASS_FORCE_LOWER;
+       if (flags & RPP_FORCEUPPER)
+               gflags |= GETPASS_FORCE_UPPER;
+       if (flags & RPP_SEVENBIT)
+               gflags |= GETPASS_7BIT;
+
+       fd[0] = input;
+       fd[1] = fd[2] = output;
+       ret = getpassfd(prompt, buf, bufsiz, fd, gflags, 0);
+       if ((gflags & GETPASS_ECHO) == 0)
+               (void)write(output, "\n", 1);
+
+#endif
        if (input != STDIN_FILENO)
                (void)close(input);
-       return(buf);
+       
+       return ret;
 }
 
 char *



Home | Main Index | Thread Index | Old Index