]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add the openssh 6.8p1 readpassphrase implementation
authorNick Mathewson <nickm@torproject.org>
Wed, 17 Jun 2015 14:41:22 +0000 (10:41 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 17 Jun 2015 14:41:22 +0000 (10:41 -0400)
This way glibc users don't have to fall back to getpass.

Windows users are still out of luck

configure.ac
src/common/compat.c
src/common/include.am
src/ext/readpassphrase.c
src/ext/readpassphrase.h

index 195e56fc93795cad79d794d5eb8ec84a6e7e4d95..23d4c98f5d807d44ecd674203578874ed1151055 100644 (file)
@@ -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?
 
index 701027523ef5a35b55064cf66b2cf25e5ee2d23c..a931f0a229aa13ecfb32afc6a027fb83506fe99b 100644 (file)
@@ -69,6 +69,8 @@
 #endif
 #ifdef HAVE_READPASSPHRASE_H
 #include <readpassphrase.h>
+#elif !defined(_WIN32)
+#include "readpassphrase.h"
 #endif
 
 #ifndef HAVE_GETTIMEOFDAY
index b7823106636f784d0f6a90a23dcd7837a347085f..789f4003c9c989501229e177f50cf0be1f1d27b1 100644 (file)
@@ -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
 
index d63cdf2f0e33f00841a9a5a7d2adf450cab861d8..7bdecaf63769826f2297cd7a5489236c18cdb3b9 100644 (file)
@@ -22,7 +22,7 @@
 
 /* OPENBSD ORIGINAL: lib/libc/gen/readpassphrase.c */
 
-#include "includes.h"
+#include "orconfig.h"
 
 #ifndef HAVE_READPASSPHRASE
 
 #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 &&
index 5fd7c5d77abae60c782359031f79956f10248840..83ae1f20a811343e87d6a74b692b620753a1e4e7 100644 (file)
@@ -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_ */