chiark / gitweb /
unrar: rewrite getpass() so password will not be echoed
authorLeonid Plyushch <leonid.plyushch@gmail.com>
Thu, 14 Sep 2017 17:42:44 +0000 (20:42 +0300)
committerFredrik Fornwall <fredrik@fornwall.net>
Thu, 14 Sep 2017 18:26:17 +0000 (20:26 +0200)
packages/unrar/build.sh
packages/unrar/getpass.patch [new file with mode: 0644]
packages/unrar/makefile.patch
packages/unrar/no_getpass.patch [deleted file]

index a0ffaea354be18577cebd44f940e91ff98c9d6f0..1f7ed836e1b6d7a3b875a8a5b6f88a4234831902 100644 (file)
@@ -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 (file)
index 0000000..7d70b79
--- /dev/null
@@ -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 <termios.h>
++#include <readline/readline.h>
++
+ 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,
index 66b549f200c77dca5fb487c8b9a325f516843f33..06860e0ac449357d90ac7b44c8a9efe9ec169c91 100644 (file)
@@ -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 (file)
index dfd956f..0000000
+++ /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)