From 3cd9894747b651d0bfacfa685fea8e8e577e09e2 Mon Sep 17 00:00:00 2001 From: Valera Cogut Date: Thu, 18 Oct 2018 12:58:14 +0300 Subject: [PATCH] Added example for hiding secret information --- examples/cli.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/examples/cli.c b/examples/cli.c index 9cd900b..2733209 100644 --- a/examples/cli.c +++ b/examples/cli.c @@ -21,6 +21,7 @@ #include "editline.h" #include +#include #define HISTORY "/tmp/.cli-history" @@ -116,6 +117,33 @@ el_status_t do_suspend(void) return CSstay; } +static int my_rl_check_secret(const char* source) +{ + const char* pattern = (char *)"^unlock\\s"; + regex_t regex; + + int reti; + int rez = 0; + + if (!pattern || !source) + return rez; + + /* Compile regular expression */ + reti = regcomp(®ex, pattern, 0); + if (reti) // If couldn't compile regex + return rez; + + /* Execute regular expression */ + reti = regexec(®ex, source, 0, NULL, 0); + if (!reti) // If regex match + rez = 1; + + /* Free memory allocated to the pattern buffer by regcomp() */ + regfree(®ex); + + return rez; +} + int main(void) { char *line; @@ -124,6 +152,7 @@ int main(void) /* Setup callbacks */ rl_set_complete_func(&my_rl_complete); rl_set_list_possib_func(&my_rl_list_possib); + rl_set_check_secret_func(&my_rl_check_secret); el_bind_key('?', list_possible); el_bind_key(CTL('C'), do_break); el_bind_key(CTL('D'), do_exit);