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

Reply via email to