Browse Source

wpa_cli: fix readline history cleaning

First of all, the history had not been written to the disk, since almost
all commands were cleaned up due to the error in the history cleaning:
the return value of the last os_strncasecmp() call was not compared to
zero, but was rather used as is.  So the condition was almost always
true and most commands were removed from the history.

The second problem was that the evaluation of the potentially sensitive
commands was started at the entry number 1, instead of very first entry.
Eygene Ryabinkin 16 years ago
parent
commit
413653e839
1 changed files with 6 additions and 8 deletions
  1. 6 8
      wpa_supplicant/wpa_cli.c

+ 6 - 8
wpa_supplicant/wpa_cli.c

@@ -1519,24 +1519,22 @@ static void wpa_cli_interactive(void)
 		 * passwords. */
 		HIST_ENTRY *h;
 		history_set_pos(0);
-		h = next_history();
-		while (h) {
+		while ((h = current_history())) {
 			char *p = h->line;
 			while (*p == ' ' || *p == '\t')
 				p++;
 			if (os_strncasecmp(p, "pa", 2) == 0 ||
 			    os_strncasecmp(p, "o", 1) == 0 ||
-			    os_strncasecmp(p, "n", 1)) {
+			    os_strncasecmp(p, "n", 1) == 0) {
 				h = remove_history(where_history());
 				if (h) {
 					os_free(h->line);
 					os_free(h->data);
 					os_free(h);
-				}
-				h = current_history();
-			} else {
-				h = next_history();
-			}
+				} else
+					next_history();
+			} else
+				next_history();
 		}
 		write_history(hfile);
 		os_free(hfile);