diff options
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | info/libpassphrase.texinfo | 23 | ||||
-rw-r--r-- | src/passphrase.c | 18 | ||||
-rw-r--r-- | src/passphrase_helper.h | 3 |
4 files changed, 40 insertions, 9 deletions
@@ -50,8 +50,11 @@ PASSPHRASE_STAR_CHAR = * PASSPHRASE_TEXT_EMPTY = (empty) # Text to use instead of "(not empty)" PASSPHRASE_TEXT_NOT_EMPTY = (not empty) +# Text to use instead of "Strength:" +PASSPHRASE_TEXT_STRENGTH = Strength: -QUOTED_OPTIONS = PASSPHRASE_STAR_CHAR PASSPHRASE_TEXT_EMPTY PASSPHRASE_TEXT_NOT_EMPTY +QUOTED_OPTIONS = PASSPHRASE_STAR_CHAR PASSPHRASE_TEXT_EMPTY PASSPHRASE_TEXT_NOT_EMPTY \ + PASSPHRASE_TEXT_STRENGTH # Optimisation settings for C code compilation diff --git a/info/libpassphrase.texinfo b/info/libpassphrase.texinfo index 475b50f..8b76067 100644 --- a/info/libpassphrase.texinfo +++ b/info/libpassphrase.texinfo @@ -165,6 +165,10 @@ the the screen. This is only used if combined with will create make a line below the new current line and use that line to draw the passphrase strength meter if such capability is available. + +The label for the passphrase strength meter can +be modified by setting the environment variable +@env{LIBPASSPHRASE_STRENGTH_LABEL}. @item PASSPHRASE_READ_BELOW_FREE @code{passphrase_read2} may do as it please with the line below the current line. This is only used @@ -414,9 +418,6 @@ escape sequence, followed by a new line or whitespace; the rest of the is ignored. The program must also accept the flag @code{-r}, telling it not to discard any input. - - - @end table @@ -426,7 +427,7 @@ In addition, you may use the follow flags. @item @code{PASSPHRASE_STAR_CHAR} The text to print instead of the character `*' when -@code{PASSPHRASE_STAR} is used. For example you may run +@code{PASSPHRASE_STAR} is used. For example, you may run @example make OPTIONS=PASSPHRASE_STAR \ PASSPHRASE_STAR_CHAR="#" @@ -434,7 +435,7 @@ make OPTIONS=PASSPHRASE_STAR \ @item @code{PASSPHRASE_TEXT_EMPTY} The text to print instead of the `(empty)' when -@code{PASSPHRASE_TEXT} is used. For example you may run +@code{PASSPHRASE_TEXT} is used. For example, you may run @example make OPTIONS=PASSPHRASE_TEXT \ PASSPHRASE_TEXT_EMPTY="there is nothing here" @@ -442,12 +443,22 @@ make OPTIONS=PASSPHRASE_TEXT \ @item @code{PASSPHRASE_TEXT_NOT_EMPTY} The text to print instead of the `(not empty)' when -@code{PASSPHRASE_TEXT} is used. For example you may run +@code{PASSPHRASE_TEXT} is used. For example, you may run @example make OPTIONS=PASSPHRASE_TEXT \ PASSPHRASE_TEXT_NOT_EMPTY="there is something here" @end example +@item @code{LIBPASSPHRASE_STRENGTH_LABEL} +The text to print instead of the `Strength:' when +@code{PASSPHRASE_METER} is used and a new passphrase +is being entered. For example, you may run +@example +make OPTIONS=PASSPHRASE_METER \ + LIBPASSPHRASE_STRENGTH_LABEL="Hope meter:" +@end example + + @end table diff --git a/src/passphrase.c b/src/passphrase.c index 2978c80..33c7276 100644 --- a/src/passphrase.c +++ b/src/passphrase.c @@ -43,6 +43,7 @@ #ifdef PASSPHRASE_METER struct passcheck_state { + const char* label; int pipe_rw[2]; pid_t pid; int flags; @@ -93,6 +94,10 @@ static void passcheck_start(struct passcheck_state* state, int flags) if (!command || !*command) command = DEFAULT_PASSPHRASE_METER; + state->label = getenv("LIBPASSPHRASE_STRENGTH_LABEL"); + if (!(state->label) || !*(state->label)) + state->label = PASSPHRASE_TEXT_STRENGTH; + xpipe(state->pipe_rw); xpipe(pipe_rw); xpipe(exec_rw); @@ -230,6 +235,7 @@ static void passcheck_update(struct passcheck_state* state, const char* passphra void* new; char* p; unsigned long long int value; + const char* desc; if (state->flags == 0) return; @@ -301,10 +307,18 @@ static void passcheck_update(struct passcheck_state* state, const char* passphra } strength_ptr = 0; + /* TODO locale */ + if (value == 0) desc = "1;31m" "Well-known common password"; + else if (value <= 150) desc = "31m" "Extremely week"; + else if (value <= 200) desc = "33m" "Week"; + else if (value <= 250) desc = "32m" "Good"; + else if (value <= 350) desc = "1;32m" "Strong"; + else desc = "1;7;32m" "Perfect"; + if (state->flags & PASSPHRASE_READ_SCREEN_FREE) - fprintf(stderr, "\033[s\033[E\033[0K%s%lli\033[u", /*TODO locale*/"Strength: ", value); + fprintf(stderr, "\033[s\033[E\033[0K%s \033[%s\033[m (%lli)\033[u", state->label, desc, value); else - fprintf(stderr, "\033[B\033[s\033[0K%lli\033[u\033[A", value); + fprintf(stderr, "\033[B\033[s\033[0K\033[%s\033[m (%lli)\033[u\033[A", desc, value); fflush(stderr); return; diff --git a/src/passphrase_helper.h b/src/passphrase_helper.h index b8abb3a..e41ca0c 100644 --- a/src/passphrase_helper.h +++ b/src/passphrase_helper.h @@ -45,6 +45,9 @@ #ifndef PASSPHRASE_TEXT_NOT_EMPTY # define PASSPHRASE_TEXT_NOT_EMPTY "(not empty)" #endif +#ifndef PASSPHRASE_TEXT_STRENGTH +# define PASSPHRASE_TEXT_STRENGTH "Strength:" +#endif |