Add the openssh 6.8p1 readpassphrase implementation
This way glibc users don't have to fall back to getpass. Windows users are still out of luck
This commit is contained in:
parent
8d44ce910d
commit
b9b658e727
|
@ -423,6 +423,8 @@ if test "$bwin32" != true; then
|
|||
AC_CHECK_FUNCS(pthread_create)
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(BUILD_READPASSPHRASE_C, test x$ac_cv_func_readpassphrase = xno && test $bwin32 = false)
|
||||
|
||||
dnl ------------------------------------------------------
|
||||
dnl Where do you live, libevent? And how do we call you?
|
||||
|
||||
|
|
|
@ -69,6 +69,8 @@
|
|||
#endif
|
||||
#ifdef HAVE_READPASSPHRASE_H
|
||||
#include <readpassphrase.h>
|
||||
#elif !defined(_WIN32)
|
||||
#include "readpassphrase.h"
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_GETTIMEOFDAY
|
||||
|
|
|
@ -51,6 +51,12 @@ if THREADS_WIN32
|
|||
threads_impl_source=src/common/compat_winthreads.c
|
||||
endif
|
||||
|
||||
if BUILD_READPASSPHRASE_C
|
||||
readpassphrase_source=src/ext/readpassphrase.c
|
||||
else
|
||||
readpassphrase_source=
|
||||
endif
|
||||
|
||||
LIBOR_A_SOURCES = \
|
||||
src/common/address.c \
|
||||
src/common/backtrace.c \
|
||||
|
@ -67,7 +73,8 @@ LIBOR_A_SOURCES = \
|
|||
src/ext/csiphash.c \
|
||||
src/ext/trunnel/trunnel.c \
|
||||
$(libor_extra_source) \
|
||||
$(threads_impl_source)
|
||||
$(threads_impl_source) \
|
||||
$(readpassphrase_source)
|
||||
|
||||
src/common/log.o: micro-revision.i
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
/* OPENBSD ORIGINAL: lib/libc/gen/readpassphrase.c */
|
||||
|
||||
#include "includes.h"
|
||||
#include "orconfig.h"
|
||||
|
||||
#ifndef HAVE_READPASSPHRASE
|
||||
|
||||
|
@ -35,6 +35,10 @@
|
|||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifndef _PATH_TTY
|
||||
# define _PATH_TTY "/dev/tty"
|
||||
#endif
|
||||
|
||||
#ifdef TCSASOFT
|
||||
# define _T_FLUSH (TCSAFLUSH|TCSASOFT)
|
||||
#else
|
||||
|
@ -61,6 +65,7 @@ static void handler(int);
|
|||
char *
|
||||
readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
|
||||
{
|
||||
ssize_t bytes_written = 0;
|
||||
ssize_t nr;
|
||||
int input, output, save_errno, i, need_restart;
|
||||
char ch, *p, *end;
|
||||
|
@ -132,7 +137,7 @@ restart:
|
|||
/* No I/O if we are already backgrounded. */
|
||||
if (signo[SIGTTOU] != 1 && signo[SIGTTIN] != 1) {
|
||||
if (!(flags & RPP_STDIN))
|
||||
(void)write(output, prompt, strlen(prompt));
|
||||
bytes_written = write(output, prompt, strlen(prompt));
|
||||
end = buf + bufsiz - 1;
|
||||
p = buf;
|
||||
while ((nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r') {
|
||||
|
@ -151,9 +156,11 @@ restart:
|
|||
*p = '\0';
|
||||
save_errno = errno;
|
||||
if (!(term.c_lflag & ECHO))
|
||||
(void)write(output, "\n", 1);
|
||||
bytes_written = write(output, "\n", 1);
|
||||
}
|
||||
|
||||
(void) bytes_written;
|
||||
|
||||
/* Restore old terminal settings and signals. */
|
||||
if (memcmp(&term, &oterm, sizeof(term)) != 0) {
|
||||
while (tcsetattr(input, _T_FLUSH, &oterm) == -1 &&
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#ifndef _READPASSPHRASE_H_
|
||||
#define _READPASSPHRASE_H_
|
||||
|
||||
#include "includes.h"
|
||||
#include "orconfig.h"
|
||||
|
||||
#ifndef HAVE_READPASSPHRASE
|
||||
|
||||
|
@ -39,6 +39,8 @@
|
|||
|
||||
char * readpassphrase(const char *, char *, size_t, int);
|
||||
|
||||
#define HAVE_READPASSPHRASE
|
||||
|
||||
#endif /* HAVE_READPASSPHRASE */
|
||||
|
||||
#endif /* !_READPASSPHRASE_H_ */
|
||||
|
|
Loading…
Reference in New Issue