diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2012-06-12 15:08:14 +1200 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2012-06-12 15:08:14 +1200 |
commit | 5e97a3946008a89aef8576f40afbdfb8eb07ea47 (patch) | |
tree | 75c2a2a8099a6f4e8b3935c8cd191785ec0d9c2a | |
parent | c7abeb222f1e7980b6af0dc8a5a30c2e6f8b057f (diff) | |
download | lightdm-5e97a3946008a89aef8576f40afbdfb8eb07ea47.tar.gz |
Run greeters inside the "lightdm-greeter" PAM service
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | src/display.c | 27 |
2 files changed, 12 insertions, 16 deletions
@@ -7,6 +7,7 @@ Overview of changes in lightdm 1.3.1 to disk. * Write utmp records for sessions * Install PAM configuration + * Run greeters inside the "lightdm-greeter" PAM service Overview of changes in lightdm 1.2.0 diff --git a/src/display.c b/src/display.c index 523467e2..9078c9f5 100644 --- a/src/display.c +++ b/src/display.c @@ -67,12 +67,6 @@ struct DisplayPrivate /* Program to run sessions through */ gchar *session_wrapper; - /* PAM service to authenticate against */ - gchar *pam_service; - - /* PAM service to authenticate against for automatic logins */ - gchar *pam_autologin_service; - /* TRUE if in a user session */ gboolean in_user_session; @@ -110,6 +104,11 @@ struct DisplayPrivate gboolean stopped; }; +/* PAM services to use */ +#define GREETER_SERVICE "lightdm-greeter" +#define USER_SERVICE "lightdm" +#define AUTOLOGIN_SERVICE "lightdm-autologin" + G_DEFINE_TYPE (Display, display, G_TYPE_OBJECT); static void greeter_session_stopped_cb (Session *session, Display *display); @@ -402,7 +401,7 @@ start_greeter (Display *display) g_signal_connect (display->priv->session, "authentication-complete", G_CALLBACK (greeter_authentication_complete_cb), display); /* Make communication link to greeter that will run on this session */ - display->priv->greeter = greeter_new (display->priv->session, display->priv->pam_service); + display->priv->greeter = greeter_new (display->priv->session, USER_SERVICE); g_signal_connect (G_OBJECT (display->priv->greeter), "connected", G_CALLBACK (greeter_connected_cb), display); g_signal_connect (G_OBJECT (display->priv->greeter), "start-authentication", G_CALLBACK (greeter_start_authentication_cb), display); g_signal_connect (G_OBJECT (display->priv->greeter), "start-session", G_CALLBACK (greeter_start_session_cb), display); @@ -448,7 +447,7 @@ start_greeter (Display *display) } g_signal_connect_after (display->priv->session, "stopped", G_CALLBACK (greeter_session_stopped_cb), display); - result = greeter_start (display->priv->greeter, display->priv->pam_service, greeter_user); + result = greeter_start (display->priv->greeter, GREETER_SERVICE, greeter_user); g_free (greeter_user); if (!result) @@ -605,7 +604,7 @@ greeter_session_stopped_cb (Session *session, Display *display) { /* If guest, then start a new autologin guest session (so can setup account) */ if (greeter_get_guest_authenticated (display->priv->greeter)) - result = autologin_guest (display, display->priv->pam_autologin_service, FALSE); + result = autologin_guest (display, AUTOLOGIN_SERVICE, FALSE); /* Otherwise, use the session the greeter has authenticated */ else { @@ -773,17 +772,17 @@ display_server_ready_cb (DisplayServer *display_server, Display *display) if (display->priv->autologin_guest) { g_debug ("Automatically logging in as guest"); - result = autologin_guest (display, display->priv->pam_autologin_service, TRUE); + result = autologin_guest (display, AUTOLOGIN_SERVICE, TRUE); } else if (display->priv->autologin_user) { g_debug ("Automatically logging in user %s", display->priv->autologin_user); - result = autologin (display, display->priv->autologin_user, display->priv->pam_autologin_service, TRUE); + result = autologin (display, display->priv->autologin_user, AUTOLOGIN_SERVICE, TRUE); } else if (display->priv->select_user_hint) { g_debug ("Logging in user %s", display->priv->select_user_hint); - result = autologin (display, display->priv->select_user_hint, display->priv->pam_service, TRUE); + result = autologin (display, display->priv->select_user_hint, USER_SERVICE, TRUE); } /* If no session started, start a greeter */ @@ -909,8 +908,6 @@ static void display_init (Display *display) { display->priv = G_TYPE_INSTANCE_GET_PRIVATE (display, DISPLAY_TYPE, DisplayPrivate); - display->priv->pam_service = g_strdup ("lightdm"); - display->priv->pam_autologin_service = g_strdup ("lightdm-autologin"); } static void @@ -932,8 +929,6 @@ display_finalize (GObject *object) g_object_unref (self->priv->greeter); } g_free (self->priv->session_wrapper); - g_free (self->priv->pam_service); - g_free (self->priv->pam_autologin_service); if (self->priv->session) { g_signal_handlers_disconnect_matched (self->priv->session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self); |