diff options
author | Nick Mathewson <nickm@torproject.org> | 2015-06-17 10:41:22 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2015-06-17 10:41:22 -0400 |
commit | b9b658e727520d947e6c14475ee22e8606e9f062 (patch) | |
tree | 76a1997f4787d5879b2e3a57ac25f865fe426a60 | |
parent | 8d44ce910ddb00d6a9c18b912f2b027f822e5dc1 (diff) | |
download | tor-b9b658e727520d947e6c14475ee22e8606e9f062.tar.gz tor-b9b658e727520d947e6c14475ee22e8606e9f062.zip |
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
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/common/compat.c | 2 | ||||
-rw-r--r-- | src/common/include.am | 9 | ||||
-rw-r--r-- | src/ext/readpassphrase.c | 13 | ||||
-rw-r--r-- | src/ext/readpassphrase.h | 4 |
5 files changed, 25 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac index 195e56fc93..23d4c98f5d 100644 --- a/configure.ac +++ b/configure.ac @@ -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? diff --git a/src/common/compat.c b/src/common/compat.c index 701027523e..a931f0a229 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -69,6 +69,8 @@ #endif #ifdef HAVE_READPASSPHRASE_H #include <readpassphrase.h> +#elif !defined(_WIN32) +#include "readpassphrase.h" #endif #ifndef HAVE_GETTIMEOFDAY diff --git a/src/common/include.am b/src/common/include.am index b782310663..789f4003c9 100644 --- a/src/common/include.am +++ b/src/common/include.am @@ -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 diff --git a/src/ext/readpassphrase.c b/src/ext/readpassphrase.c index d63cdf2f0e..7bdecaf637 100644 --- a/src/ext/readpassphrase.c +++ b/src/ext/readpassphrase.c @@ -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 && diff --git a/src/ext/readpassphrase.h b/src/ext/readpassphrase.h index 5fd7c5d77a..83ae1f20a8 100644 --- a/src/ext/readpassphrase.h +++ b/src/ext/readpassphrase.h @@ -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_ */ |