[PATCH v2 2/5] greeter: Add echoPasswdChar resource to set character to display

Alan Coopersmith alan.coopersmith at oracle.com
Mon Feb 21 16:56:27 PST 2011


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.coopersmith at 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



More information about the xorg-devel mailing list