]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Make read_passphrase utility more universal
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 20 May 2023 14:37:30 +0000 (15:37 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 20 May 2023 14:37:30 +0000 (15:37 +0100)
src/libutil/util.c
src/libutil/util.h

index 253b651ad89b4cb3d977daf9b73ae4bf9b4a276a..f9fef347f2ddba50fefe4a410812969f58991580 100644 (file)
@@ -1351,10 +1351,11 @@ read_pass_tmp_sig_handler (int s)
 #endif
 
 gint
-rspamd_read_passphrase (gchar *buf, gint size, gint rwflag, gpointer key)
+rspamd_read_passphrase_with_prompt (const gchar *prompt, gchar *buf, gint size, bool echo, gpointer key)
 {
 #ifdef HAVE_READPASSPHRASE_H
-       if (readpassphrase ("Enter passphrase: ", buf, size, RPP_ECHO_OFF |
+       int flags = echo ? RPP_ECHO_ON : RPP_ECHO_OFF;
+       if (readpassphrase (prompt, buf, size, flags |
                RPP_REQUIRE_TTY) == NULL) {
                return 0;
        }
@@ -1383,7 +1384,10 @@ restart:
        }
 
        memcpy (&term, &oterm, sizeof(term));
-       term.c_lflag &= ~(ECHO | ECHONL);
+
+       if (!echo) {
+               term.c_lflag &= ~(ECHO | ECHONL);
+       }
 
        if (tcsetattr (input, TCSAFLUSH, &term) == -1) {
                errno = ENOTTY;
@@ -1391,7 +1395,7 @@ restart:
                return 0;
        }
 
-       g_assert (write (output, "Enter passphrase: ", sizeof ("Enter passphrase: ") -
+       g_assert (write (output, prompt, sizeof ("Enter passphrase: ") -
                1) != -1);
 
        /* Save the current sighandler */
index ccc642adbe12eaefcfa7dce37def569f7367a1d6..907bcd33fcf15d603266741f48b1638e331186f3 100644 (file)
@@ -281,11 +281,22 @@ void rspamd_hash_table_copy (GHashTable *src, GHashTable *dst,
  * Read passphrase from tty
  * @param buf buffer to fill with a password
  * @param size size of the buffer
- * @param rwflag unused flag
+ * @param echo turn echo on or off
  * @param key unused key
  * @return size of password read
  */
-gint rspamd_read_passphrase (gchar *buf, gint size, gint rwflag, gpointer key);
+#define rspamd_read_passphrase(buf, size, echo, key) (rspamd_read_passphrase_with_prompt("Enter passphrase: ", (buf), (size), (echo), (key)))
+
+/**
+ * Read passphrase from tty with prompt
+ * @param prompt
+ * @param buf
+ * @param size
+ * @param echo
+ * @param key
+ * @return
+ */
+gint rspamd_read_passphrase_with_prompt (const gchar *prompt, gchar *buf, gint size, bool echo, gpointer key);
 
 /**
  * Portably return the current clock ticks as seconds