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:
parent
7ee6258f7c
commit
413653e839
1 changed files with 6 additions and 8 deletions
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue