summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2012-06-12 15:08:14 +1200
committerRobert Ancell <robert.ancell@canonical.com>2012-06-12 15:08:14 +1200
commit5e97a3946008a89aef8576f40afbdfb8eb07ea47 (patch)
tree75c2a2a8099a6f4e8b3935c8cd191785ec0d9c2a
parentc7abeb222f1e7980b6af0dc8a5a30c2e6f8b057f (diff)
downloadlightdm-5e97a3946008a89aef8576f40afbdfb8eb07ea47.tar.gz
Run greeters inside the "lightdm-greeter" PAM service
-rw-r--r--NEWS1
-rw-r--r--src/display.c27
2 files changed, 12 insertions, 16 deletions
diff --git a/NEWS b/NEWS
index c1fb2f37..1c0499ea 100644
--- a/NEWS
+++ b/NEWS
@@ -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);