Skip to content
Snippets Groups Projects
Commit b9b658e7 authored by Nick Mathewson's avatar Nick Mathewson :game_die:
Browse files

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
parent 8d44ce91
No related branches found
No related tags found
No related merge requests found
......@@ -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_ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment