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