Module Name: src
Committed By: christos
Date: Fri Apr 13 23:57:08 UTC 2012
Modified Files:
src/crypto/external/bsd/openssh/dist: readpassphrase.c
Log Message:
use getpassfd()
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 \
src/crypto/external/bsd/openssh/dist/readpassphrase.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/crypto/external/bsd/openssh/dist/readpassphrase.c
diff -u src/crypto/external/bsd/openssh/dist/readpassphrase.c:1.1 src/crypto/external/bsd/openssh/dist/readpassphrase.c:1.2
--- src/crypto/external/bsd/openssh/dist/readpassphrase.c:1.1 Sun Jun 7 18:38:47 2009
+++ src/crypto/external/bsd/openssh/dist/readpassphrase.c Fri Apr 13 19:57:08 2012
@@ -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 <[email protected]>
* All rights reserved.
@@ -43,16 +43,14 @@ static const char rcsid[] = "$OpenBSD: r
#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 @@ readpassphrase(prompt, buf, bufsiz, flag
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 @@ readpassphrase(prompt, buf, bufsiz, flag
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 *