mirror of
https://github.com/troglobit/editline.git
synced 2025-05-06 04:21:24 +08:00
examples: Refactor CLI unlock gimmick to fix possible Coverity issue
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
parent
d9f725f20a
commit
1305d05b75
@ -64,7 +64,10 @@ static int my_rl_list_possib(char *token, char ***av)
|
|||||||
for (num = 0; list[num]; num++)
|
for (num = 0; list[num]; num++)
|
||||||
;
|
;
|
||||||
|
|
||||||
copy = (char **) malloc (num * sizeof(char *));
|
if (!num)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
copy = malloc(num * sizeof(char *));
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
if (!strncmp(list[i], token, strlen (token))) {
|
if (!strncmp(list[i], token, strlen (token))) {
|
||||||
copy[total] = strdup(list[i]);
|
copy[total] = strdup(list[i]);
|
||||||
@ -106,14 +109,41 @@ el_status_t do_suspend(void)
|
|||||||
|
|
||||||
static void breakit(int signo)
|
static void breakit(int signo)
|
||||||
{
|
{
|
||||||
|
(void)signo;
|
||||||
puts("Got SIGINT");
|
puts("Got SIGINT");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Use el_no_echo when reading passwords and similar */
|
||||||
|
static int unlock(const char *passwd)
|
||||||
|
{
|
||||||
|
char *prompt = "Enter password: ";
|
||||||
|
char *line;
|
||||||
|
int rc = 1;
|
||||||
|
|
||||||
|
el_no_echo = 1;
|
||||||
|
|
||||||
|
while ((line = readline(prompt))) {
|
||||||
|
rc = strncmp(line, passwd, strlen(passwd));
|
||||||
|
free(line);
|
||||||
|
|
||||||
|
if (rc) {
|
||||||
|
printf("\nWrong password, please try again, it's secret.\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\nAchievement unlocked!\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
el_no_echo = 0;
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
char *line;
|
char *line;
|
||||||
char *prompt = "cli> ";
|
char *prompt = "cli> ";
|
||||||
char *passwd = "Enter password: ";
|
|
||||||
|
|
||||||
signal(SIGINT, breakit);
|
signal(SIGINT, breakit);
|
||||||
|
|
||||||
@ -126,29 +156,11 @@ int main(void)
|
|||||||
read_history(HISTORY);
|
read_history(HISTORY);
|
||||||
|
|
||||||
while ((line = readline(prompt))) {
|
while ((line = readline(prompt))) {
|
||||||
int next = 0;
|
if (!strncmp(line, "unlock", 6) && unlock("secret")) {
|
||||||
|
|
||||||
/* Use el_no_echo when reading passwords and similar */
|
|
||||||
if (!strncmp(line, "unlock", 6)) {
|
|
||||||
el_no_echo = 1;
|
|
||||||
while ((line = readline(passwd))) {
|
|
||||||
if (strncmp(line, "secret", 6)) {
|
|
||||||
printf("\nWrong password, please try again, it's secret.\n");
|
|
||||||
free(line);
|
free(line);
|
||||||
continue;
|
fprintf(stderr, "\nSecurity breach, user logged out!\n");
|
||||||
}
|
|
||||||
|
|
||||||
el_no_echo = 0;
|
|
||||||
|
|
||||||
printf("\nAchievement unlocked!\n");
|
|
||||||
free(line);
|
|
||||||
next = 1;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (next)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (*line != '\0')
|
if (*line != '\0')
|
||||||
printf("\t\t\t|%s|\n", line);
|
printf("\t\t\t|%s|\n", line);
|
||||||
|
Loading…
Reference in New Issue
Block a user