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.
This commit is contained in:
Eygene Ryabinkin 2009-01-05 20:48:45 +02:00 committed by Jouni Malinen
parent 7ee6258f7c
commit 413653e839

View file

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