Stop hardcoding it to '*'. Allows setting a resource with no value to to advance the cursor without drawing text (as was previously the default).
Resolves https://bugs.freedesktop.org/show_bug.cgi?id=32794 Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com> --- Replaces patch 2/5 & 3/5 of the previous series, making the empty value activate the former 1-pixel-per-character cursor advancement. greeter/Login.c | 26 ++++++++++++++------------ greeter/Login.h | 2 ++ greeter/LoginP.h | 4 +++- man/xdm.man | 8 ++++++-- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/greeter/Login.c b/greeter/Login.c index 020bfd4..9fd07c4 100644 --- a/greeter/Login.c +++ b/greeter/Login.c @@ -217,7 +217,9 @@ static XtResource resources[] = { {XtNallowRootLogin, XtCAllowRootLogin, XtRBoolean, sizeof(Boolean), offset(allow_root_login), XtRImmediate, (XtPointer) True}, {XtNechoPasswd, XtCEchoPasswd, XtRBoolean, sizeof(Boolean), - offset(echo_passwd), XtRImmediate, (XtPointer) False} + offset(echo_passwd), XtRImmediate, (XtPointer) False}, + {XtNechoPasswdChar, XtCEchoPasswdChar, XtRString, sizeof (char *), + offset(echo_passwd_char), XtRString, (XtPointer) "*" } }; #undef offset @@ -370,7 +372,7 @@ realizeValue (LoginWidget w, int cursor, int promptNum, GC gc) while (i < length) { - text[i++] = '*'; + text[i++] = w->login.echo_passwd_char[0]; } text[i] = 0; @@ -488,16 +490,16 @@ realizeCursor (LoginWidget w, GC gc) break; case LOGIN_PROMPT_ECHO_OFF: if (w->login.echo_passwd == True) { - int len = PROMPT_CURSOR(w, w->login.activePrompt) - - VALUE_SHOW_START(w, w->login.activePrompt); + if (w->login.echo_passwd_char[0] != 0) { + int len = PROMPT_CURSOR(w, w->login.activePrompt) - + VALUE_SHOW_START(w, w->login.activePrompt); - x += len*TEXT_WIDTH(text, "*", 1); - } - else - { - /* Move cursor one pixel per character to give some feedback - without giving away the password length */ - x += PROMPT_CURSOR(w, w->login.activePrompt); + x += len*TEXT_WIDTH(text, w->login.echo_passwd_char, 1); + } else { + /* Move cursor one pixel per character to give some feedback + without giving away the password length */ + x += PROMPT_CURSOR(w, w->login.activePrompt); + } } break; } diff --git a/greeter/Login.h b/greeter/Login.h index 22529a5..9b5212c 100644 --- a/greeter/Login.h +++ b/greeter/Login.h @@ -101,6 +101,7 @@ from The Open Group. # define XtNallowNullPasswd "allowNullPasswd" # define XtNallowRootLogin "allowRootLogin" # define XtNechoPasswd "echoPasswd" +# define XtNechoPasswdChar "echoPasswdChar" # define XtNface "face" # define XtCFace "Face" @@ -142,6 +143,7 @@ from The Open Group. # define XtCAllowNullPasswd "AllowNullPasswd" # define XtCAllowRootLogin "AllowRootLogin" # define XtCEchoPasswd "EchoPasswd" +# define XtCEchoPasswdChar "EchoPasswdChar" # define XtNchangePasswdMessage "changePasswdMessage" # define XtCChangePasswdMessage "ChangePasswdMessage" diff --git a/greeter/LoginP.h b/greeter/LoginP.h index 3279110..ef2151d 100644 --- a/greeter/LoginP.h +++ b/greeter/LoginP.h @@ -130,8 +130,10 @@ typedef struct { Boolean allow_access; /* disable access control on login */ Boolean allow_null_passwd; /* allow null password on login */ Boolean allow_root_login; /* allow root login */ - /* show password as asterisks, i.e. '**...' */ + /* option to display characters such as asterisks, i.e. '**...' + for no-echo prompts like passwords */ Boolean echo_passwd; + char * echo_passwd_char; XIC xic; /* input method of input context */ loginPromptData prompts[NUM_PROMPTS]; time_t msgTimeout; diff --git a/man/xdm.man b/man/xdm.man index 721dade..3c4b385 100644 --- a/man/xdm.man +++ b/man/xdm.man @@ -1062,9 +1062,13 @@ if the account does not require a password at all. The default is ``false'', so only users that have passwords assigned can log in. .IP "\fBxlogin.Login.echoPasswd\fP" -If set to ``true'', stars will be rendered instead of the password itself, -i.e. '***...'. +If set to ``true'', a placeholder character (echoPasswdChar) will be shown +for fields normally set to not echo, such as password input. The default is ``false''. +.IP "\fBxlogin.Login.echoPasswdChar\fP" +Character to display if echoPasswd is true. The default is ``*''. +If set to an empty value, the cursor will advance for each character input, +but no text will be drawn. .IP "\fBxlogin.Login.translations\fP" This specifies the translations used for the login widget. Refer to the X Toolkit documentation for a complete discussion on translations. The default -- 1.7.3.2 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel