]> granicus.if.org Git - mutt/commitdiff
The attached patch prevents mutt from reading the push buffer when
authorBrendan Cully <brendan@kublai.com>
Mon, 14 Jul 2003 12:17:43 +0000 (12:17 +0000)
committerBrendan Cully <brendan@kublai.com>
Mon, 14 Jul 2003 12:17:43 +0000 (12:17 +0000)
asking for passwords. This is a proper fix for bug 1312. I think
it's uncontroversial.

account.c
curs_lib.c
enter.c
keymap.c
keymap.h
mutt.h
mutt_curses.h

index 5a7fe790f41fd0f710aa5d7427a1da0762337b00..3fda792be4679ed097d188f6d13a706499eeeef8 100644 (file)
--- a/account.c
+++ b/account.c
@@ -172,7 +172,7 @@ int mutt_account_getpass (ACCOUNT* account)
     snprintf (prompt, sizeof (prompt), _("Password for %s@%s: "),
       account->user, account->host);
     account->pass[0] = '\0';
-    if (mutt_get_field (prompt, account->pass, sizeof (account->pass), M_PASS))
+    if (mutt_get_password (prompt, account->pass, sizeof (account->pass)))
       return -1;
   }
 
index ba120bd4d099a97ad2ef3b0e70d2ea88dcca03a2..5f5247c3a04a1812813dfc53f1231724599834b7 100644 (file)
@@ -57,12 +57,12 @@ void mutt_refresh (void)
   refresh ();
 }
 
-event_t mutt_getch (void)
+event_t _mutt_getch (int flags)
 {
   int ch;
   event_t err = {-1, OP_NULL }, ret;
 
-  if (UngetCount)
+  if (!(flags & M_KM_UNBUFFERED) && UngetCount)
     return (KeyEvent[--UngetCount]);
 
   SigInt = 0;
diff --git a/enter.c b/enter.c
index bd436ba5c0c34b39d5a9c6060aee686946172544..b96eadb279bbd25aa1f94be0187a60834f689710 100644 (file)
--- a/enter.c
+++ b/enter.c
@@ -256,7 +256,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
     }
     mutt_refresh ();
 
-    if ((ch = km_dokey (MENU_EDITOR)) == -1)
+    if ((ch = _km_dokey (MENU_EDITOR, pass ? M_KM_UNBUFFERED : 0)) == -1)
     {
       rv = -1; 
       goto bye;
index 6fa4729ecb626306c757f5cce0b9eefa9c41fa33..f81af2b59cbeea0bf917ad169d6976bf4f9569de 100644 (file)
--- a/keymap.c
+++ b/keymap.c
@@ -357,7 +357,7 @@ static int retry_generic (int menu, keycode_t *keys, int keyslen, int lastkey)
  *     OP_NULL         no function bound to key sequence
  *     -1              error occured while reading input
  */
-int km_dokey (int menu)
+int _km_dokey (int menu, int flags)
 {
   event_t tmp;
   struct keymap_t *map = Keymaps[menu];
@@ -374,7 +374,7 @@ int km_dokey (int menu)
     if (menu != MENU_EDITOR)
       timeout ((Timeout > 0 ? Timeout : 60) * 1000);
 
-    tmp = mutt_getch();
+    tmp = _mutt_getch(flags);
 
     if (menu != MENU_EDITOR)
       timeout (-1); /* restore blocking operation */
index bdbafae63c9f9bddc84f71d6c339099da36bcbb2..392910a5db7ceee43447102f152bde18878fc013 100644 (file)
--- a/keymap.h
+++ b/keymap.h
@@ -27,7 +27,8 @@ typedef short keycode_t;
 
 void km_bind (char *, int, int, char *, char *);
 void km_bindkey (char *, int, int);
-int km_dokey (int);
+#define km_dokey(menu) _km_dokey(menu, 0)
+int _km_dokey (int, int);
 
 /* entry in the keymap tree */
 struct keymap_t
diff --git a/mutt.h b/mutt.h
index 8e1f2dd4db336698d8eb69fe49926c44f5ade82c..d21d107e8c17b2669829c7e1ce0bc6ab37f3eddc 100644 (file)
--- a/mutt.h
+++ b/mutt.h
 #define M_TOKEN_COMMENT                (1<<5)  /* don't reap comments */
 #define M_TOKEN_SEMICOLON      (1<<6)  /* don't treat ; as special */
 
+/* flags for km_dokey() */
+#define M_KM_UNBUFFERED 1 /* don't read from the key buffer */
+
 typedef struct
 {
   char *data;  /* pointer to data */
index b7b1a828950e35a3cf330b7de3f93ad14b5447a5..96668327f6880c5110a1ea5a60c3f52be67b61dd 100644 (file)
@@ -87,7 +87,8 @@ void mutt_curs_set (int);
 #define CI_is_return(c) ((c) == '\r' || (c) == '\n')
 #endif
 
-event_t mutt_getch (void);
+#define mutt_getch() _mutt_getch(0)
+event_t _mutt_getch (int);
 
 void mutt_endwin (const char *);
 void mutt_flushinp (void);