Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 86bd53f85aa342c5dbe1c2d6b36f696d > files > 6

lxdm-0.4.1-1.fc16.src.rpm

From 9dc81f33988cda29627d41d2d09409749b8fe371 Mon Sep 17 00:00:00 2001
From: dgod <dgod.osa@gmail.com>
Date: Fri, 17 Feb 2012 21:29:37 +0800
Subject: [PATCH] add option of not ask password for users who have empty password

---
 data/lxdm.conf.in |    3 +++
 src/greeter.c     |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/lxdm.c        |   19 +++++++++++++++----
 src/ui.c          |    9 +++++++--
 4 files changed, 73 insertions(+), 6 deletions(-)

diff --git a/data/lxdm.conf.in b/data/lxdm.conf.in
index 2de2b94..2ca4851 100644
--- a/data/lxdm.conf.in
+++ b/data/lxdm.conf.in
@@ -15,6 +15,9 @@
 ## set this if you don't want to put xauth file at ~/.Xauthority
 # xauth_path=/tmp
 
+# not ask password for users who have empty password
+# skip_password=1
+
 ## greeter used to welcome the user
 greeter=@FULL_LIBEXECDIR@/lxdm-greeter-gtk
 
diff --git a/src/greeter.c b/src/greeter.c
index 095227b..fd76607 100644
--- a/src/greeter.c
+++ b/src/greeter.c
@@ -120,12 +120,39 @@ static char *get_session_exec(void)
 	return res;
 }
 
+static void switch_to_input_passwd(void)
+{
+	if(user_list!=NULL)
+		gtk_widget_hide(user_list);
+	gtk_label_set_text( GTK_LABEL(prompt), _("Password:") );
+	gtk_entry_set_text(GTK_ENTRY(login_entry), "");
+	gtk_entry_set_visibility(GTK_ENTRY(login_entry), FALSE);
+	gtk_widget_show(login_entry);
+	gtk_widget_grab_focus(login_entry);
+}
+
+static void try_login_user(const char *user)
+{
+	char *session_exec=get_session_exec();
+	char *session_lang=get_session_lang();
+	
+	printf("login user=%s session=%s lang=%s\n",
+			user, session_exec, session_lang);
+			
+	g_free(session_lang);
+	g_free(session_exec);
+			
+}
+	
+
 static void on_entry_activate(GtkEntry* entry)
 {
 	char* tmp;
 	if( !user )
 	{
 		user = g_strdup( gtk_entry_get_text( GTK_ENTRY(entry) ) );
+		
+#if 0
 		gtk_entry_set_text(GTK_ENTRY(entry), "");
 		gtk_label_set_text( GTK_LABEL(prompt), _("Password:") );
 		if(strchr(user, ' '))
@@ -135,6 +162,16 @@ static void on_entry_activate(GtkEntry* entry)
 			return;
 		}
 		gtk_entry_set_visibility(entry, FALSE);
+#endif
+		if(g_key_file_get_integer(config,"base","skip_password",NULL)!=0)
+		{
+			gtk_label_set_text( GTK_LABEL(prompt), "");
+			try_login_user(user);
+		}
+		else
+		{
+			switch_to_input_passwd();
+		}
 	}
 	else
 	{
@@ -825,6 +862,13 @@ static void on_user_select(GtkIconView *iconview)
 			gtk_widget_hide( GTK_WIDGET(login_entry) );
 			return;
 		}
+		if(g_key_file_get_integer(config,"base","skip_password",NULL)!=0)
+		{
+			gtk_label_set_text( GTK_LABEL(prompt), "");
+			user=name;
+			try_login_user(user);
+			return;
+		}
 		gtk_entry_set_text(GTK_ENTRY(login_entry),name);
 		g_free(name);
 		on_entry_activate(GTK_ENTRY(login_entry));
@@ -1166,6 +1210,10 @@ static gboolean on_lxdm_command(GIOChannel *source, GIOCondition condition, gpoi
 			gtk_widget_grab_focus(login_entry);
 		}
 	}
+	else if( !strncmp(str, "password", 8))
+	{
+		switch_to_input_passwd();
+	}
 	g_free(str);
 	return TRUE;
 }
diff --git a/src/lxdm.c b/src/lxdm.c
index 0c84ef9..6d6f18e 100644
--- a/src/lxdm.c
+++ b/src/lxdm.c
@@ -760,7 +760,8 @@ static int do_conv(int num, const struct pam_message **msg,struct pam_response *
 			resp[i]->resp=strdup(user_pass[0]?user_pass[0]:"");
 			break;
 		case PAM_PROMPT_ECHO_OFF:
-			resp[i]->resp=strdup(user_pass[1]?user_pass[1]:"");
+			//resp[i]->resp=strdup(user_pass[1]?user_pass[1]:"");
+			resp[i]->resp=user_pass[1]?strdup(user_pass[1]):NULL;
 			break;
 		case PAM_ERROR_MSG:
 		case PAM_TEXT_INFO:
@@ -801,7 +802,7 @@ int lxdm_auth_user(char *user, char *pass, struct passwd **ppw)
         g_debug("user %s not found\n",user);
         return AUTH_BAD_USER;
     }
-    if( !pass )
+    if( !pass && !g_key_file_get_integer(config,"base","skip_password",NULL))
     {
         *ppw = pw;
         g_debug("user %s auth ok\n",user);
@@ -820,7 +821,7 @@ int lxdm_auth_user(char *user, char *pass, struct passwd **ppw)
     real = sp->sp_pwdp;
     if( !real || !real[0] )
     {
-        if( !pass[0] )
+        if( !pass || !pass[0] )
         {
             *ppw = pw;
             g_debug("user %s auth with no password ok\n",user);
@@ -1463,7 +1464,17 @@ void lxdm_do_login(struct passwd *pw, char *session, char *lang, char *option)
 							  "x11-display", &n,
 							  "is-local",&is_local,
 							  NULL))
-		setenv("XDG_SESSION_COOKIE", ck_connector_get_cookie(s->ckc), 1);
+		{
+			setenv("XDG_SESSION_COOKIE", ck_connector_get_cookie(s->ckc), 1);
+		}
+		else
+		{
+			g_message("create ConsoleKit session fail\n");
+		}
+	}
+	else
+	{
+		g_message("create ConsoleKit connector fail\n");
 	}
 #endif
 	char** env, *path;
diff --git a/src/ui.c b/src/ui.c
index 2691a03..376aca0 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -153,7 +153,7 @@ static gboolean on_greeter_input(GIOChannel *source, GIOCondition condition, gpo
 		char *pass = greeter_param(str, "pass");
 		char *session = greeter_param(str, "session");
 		char *lang = greeter_param(str, "lang");
-		if( user && pass )
+		if( user/* && pass */)
 		{
 			struct passwd *pw;
 			int ret = lxdm_auth_user(user, pass, &pw);
@@ -163,7 +163,12 @@ static gboolean on_greeter_input(GIOChannel *source, GIOCondition condition, gpo
 				lxdm_do_login(pw, session, lang,NULL);
 			}
 			else
-				xwrite(greeter_pipe[0], "reset\n", 6);
+			{
+				if(pass!=NULL)
+					xwrite(greeter_pipe[0], "reset\n", 6);
+				else
+					xwrite(greeter_pipe[0], "password\n", 9);
+			}
 		}
 		g_free(user);
 		g_free(pass);
-- 
1.7.4.1