From 973267fc6f29be809745852a7bfffb2c2c1d53e4 Mon Sep 17 00:00:00 2001 From: Leonid Plyushch Date: Thu, 14 Sep 2017 20:42:44 +0300 Subject: [PATCH] unrar: rewrite getpass() so password will not be echoed --- packages/unrar/build.sh | 2 +- packages/unrar/getpass.patch | 47 +++++++++++++++++++++++++++++++++ packages/unrar/makefile.patch | 5 ++-- packages/unrar/no_getpass.patch | 24 ----------------- 4 files changed, 51 insertions(+), 27 deletions(-) create mode 100644 packages/unrar/getpass.patch delete mode 100644 packages/unrar/no_getpass.patch diff --git a/packages/unrar/build.sh b/packages/unrar/build.sh index a0ffaea35..1f7ed836e 100644 --- a/packages/unrar/build.sh +++ b/packages/unrar/build.sh @@ -3,6 +3,6 @@ TERMUX_PKG_DESCRIPTION="Tool for extracting files from .rar archives" TERMUX_PKG_VERSION=5.5.8 TERMUX_PKG_SRCURL=http://www.rarlab.com/rar/unrarsrc-${TERMUX_PKG_VERSION}.tar.gz TERMUX_PKG_SHA256=9b66e4353a9944bc140eb2a919ff99482dd548f858f5e296d809e8f7cdb2fcf4 -TERMUX_PKG_DEPENDS="libandroid-support" +TERMUX_PKG_DEPENDS="libandroid-support,readline" TERMUX_PKG_FOLDERNAME=unrar TERMUX_PKG_BUILD_IN_SRC=yes diff --git a/packages/unrar/getpass.patch b/packages/unrar/getpass.patch new file mode 100644 index 000000000..7d70b79e6 --- /dev/null +++ b/packages/unrar/getpass.patch @@ -0,0 +1,47 @@ +diff -uNr unrar.mod/consio.cpp unrar.mod2/consio.cpp +--- unrar.mod/consio.cpp 2017-08-11 16:56:22.000000000 +0300 ++++ unrar.mod2/consio.cpp 2017-09-14 20:34:17.247733000 +0300 +@@ -1,6 +1,10 @@ + #include "rar.hpp" + #include "log.cpp" + ++// For getpass() ++#include ++#include ++ + static MESSAGE_TYPE MsgStream=MSG_STDOUT; + static RAR_CHARSET RedirectCharset=RCH_DEFAULT; + +@@ -57,6 +61,32 @@ + + + #ifndef SILENT ++#ifdef __ANDROID__ ++char* getpass(const char *prompt) { ++ struct termios term_old, term_new; ++ int nread; ++ ++ /* Turn echoing off and fail if we can't. */ ++ if (tcgetattr (0, &term_old) != 0) { ++ return NULL; ++ } ++ ++ term_new = term_old; ++ term_new.c_lflag &= ~ECHO; ++ ++ if (tcsetattr (0, TCSAFLUSH, &term_new) != 0) { ++ return NULL; ++ } ++ ++ /* Read the password. */ ++ char *password = readline(prompt); ++ ++ /* Restore terminal. */ ++ (void) tcsetattr (0, TCSAFLUSH, &term_old); ++ ++ return password; ++} ++#endif + static void cvt_wprintf(FILE *dest,const wchar *fmt,va_list arglist) + { + // This buffer is for format string only, not for entire output, diff --git a/packages/unrar/makefile.patch b/packages/unrar/makefile.patch index 66b549f20..06860e0ac 100644 --- a/packages/unrar/makefile.patch +++ b/packages/unrar/makefile.patch @@ -1,7 +1,7 @@ diff -uNr unrar/makefile unrar.mod/makefile --- unrar/makefile 2017-06-13 14:04:49.000000000 +0300 -+++ unrar.mod/makefile 2017-09-14 20:19:46.976412521 +0300 -@@ -2,14 +2,14 @@ ++++ unrar.mod/makefile 2017-09-14 20:40:07.511902817 +0300 +@@ -2,14 +2,15 @@ # Makefile for UNIX - unrar # Linux using GCC @@ -20,6 +20,7 @@ diff -uNr unrar/makefile unrar.mod/makefile +AR?=ar +LDFLAGS?=-pthread +DESTDIR=$(PREFIX) ++LIBS=-lreadline # Linux using LCC #CXX=lcc diff --git a/packages/unrar/no_getpass.patch b/packages/unrar/no_getpass.patch deleted file mode 100644 index dfd956ff7..000000000 --- a/packages/unrar/no_getpass.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -u -r ../unrar/consio.cpp ./consio.cpp ---- ../unrar/consio.cpp 2013-12-01 09:10:14.000000000 +0100 -+++ ./consio.cpp 2014-02-13 00:27:45.000000000 +0100 -@@ -144,6 +144,20 @@ - - - #ifndef SILENT -+#ifdef __ANDROID__ -+static char* getpass(const char* prompt) { -+ static char chars[128]; -+ int len = 0; -+ while (true) { -+ char c = fgetc(stdin); -+ if (c == '\r' || c == '\n' || c == 0) break; -+ chars[len++] = c; -+ if (len == sizeof(chars)-1) break; -+ } -+ chars[len] = 0; -+ return chars; -+} -+#endif - static void GetPasswordText(wchar *Str,uint MaxLength) - { - if (MaxLength==0)