summaryrefslogtreecommitdiff
path: root/daemon/gdm-simple-slave.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/gdm-simple-slave.c')
-rw-r--r--daemon/gdm-simple-slave.c186
1 files changed, 141 insertions, 45 deletions
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index c905636f..f27ade28 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -136,10 +136,99 @@ add_user_authorization (GdmSimpleSlave *slave,
return ret;
}
+static gboolean
+greeter_reset_timeout (GdmSimpleSlave *slave)
+{
+ gdm_greeter_server_reset (slave->priv->greeter_server);
+ slave->priv->greeter_reset_id = 0;
+ return FALSE;
+}
+
+static void
+queue_greeter_reset (GdmSimpleSlave *slave)
+{
+ if (slave->priv->greeter_reset_id > 0) {
+ return;
+ }
+
+ slave->priv->greeter_reset_id = g_timeout_add_seconds (2, (GSourceFunc)greeter_reset_timeout, slave);
+}
+
+static void
+on_session_setup_complete (GdmSession *session,
+ GdmSimpleSlave *slave)
+{
+ gdm_session_authenticate (session);
+}
+
+static void
+on_session_setup_failed (GdmSession *session,
+ const char *message,
+ GdmSimpleSlave *slave)
+{
+ gdm_greeter_server_problem (slave->priv->greeter_server, _("Unable to initialize login system"));
+
+ queue_greeter_reset (slave);
+}
+
+static void
+on_session_reset_complete (GdmSession *session,
+ GdmSimpleSlave *slave)
+{
+ g_debug ("GdmSimpleSlave: PAM reset");
+}
+
+static void
+on_session_reset_failed (GdmSession *session,
+ const char *message,
+ GdmSimpleSlave *slave)
+{
+ g_critical ("Unable to reset PAM");
+}
+
static void
-on_session_user_verified (GdmSession *session,
+on_session_authenticated (GdmSession *session,
GdmSimpleSlave *slave)
{
+ gdm_session_authorize (session);
+}
+
+static void
+on_session_authentication_failed (GdmSession *session,
+ const char *message,
+ GdmSimpleSlave *slave)
+{
+ gdm_greeter_server_problem (slave->priv->greeter_server, _("Unable to authenticate user"));
+
+ queue_greeter_reset (slave);
+}
+
+static void
+on_session_authorized (GdmSession *session,
+ GdmSimpleSlave *slave)
+{
+ int flag;
+
+ /* FIXME: check for migration? */
+ flag = GDM_SESSION_CRED_ESTABLISH;
+
+ gdm_session_accredit (session, flag);
+}
+
+static void
+on_session_authorization_failed (GdmSession *session,
+ const char *message,
+ GdmSimpleSlave *slave)
+{
+ gdm_greeter_server_problem (slave->priv->greeter_server, _("Unable to authorize user"));
+
+ queue_greeter_reset (slave);
+}
+
+static void
+on_session_accredited (GdmSession *session,
+ GdmSimpleSlave *slave)
+{
char *auth_file;
gdm_greeter_session_stop (slave->priv->greeter);
@@ -157,30 +246,12 @@ on_session_user_verified (GdmSession *session,
gdm_session_start_session (session);
}
-static gboolean
-greeter_reset_timeout (GdmSimpleSlave *slave)
-{
- gdm_greeter_server_reset (slave->priv->greeter_server);
- slave->priv->greeter_reset_id = 0;
- return FALSE;
-}
-
-static void
-queue_greeter_reset (GdmSimpleSlave *slave)
-{
- if (slave->priv->greeter_reset_id > 0) {
- return;
- }
-
- slave->priv->greeter_reset_id = g_timeout_add_seconds (2, (GSourceFunc)greeter_reset_timeout, slave);
-}
-
static void
-on_session_user_verification_error (GdmSession *session,
- const char *message,
- GdmSimpleSlave *slave)
+on_session_accreditation_failed (GdmSession *session,
+ const char *message,
+ GdmSimpleSlave *slave)
{
- gdm_greeter_server_problem (slave->priv->greeter_server, _("Unable to authenticate user"));
+ gdm_greeter_server_problem (slave->priv->greeter_server, _("Unable establish credentials"));
queue_greeter_reset (slave);
}
@@ -279,42 +350,62 @@ create_new_session (GdmSimpleSlave *slave)
"opened",
G_CALLBACK (on_session_opened),
slave);
-#if 0
g_signal_connect (slave->priv->session,
- "closed",
- G_CALLBACK (on_session_closed),
+ "setup-complete",
+ G_CALLBACK (on_session_setup_complete),
+ slave);
+ g_signal_connect (slave->priv->session,
+ "setup-failed",
+ G_CALLBACK (on_session_setup_failed),
+ slave);
+ g_signal_connect (slave->priv->session,
+ "reset-complete",
+ G_CALLBACK (on_session_reset_complete),
+ slave);
+ g_signal_connect (slave->priv->session,
+ "reset-failed",
+ G_CALLBACK (on_session_reset_failed),
+ slave);
+ g_signal_connect (slave->priv->session,
+ "authenticated",
+ G_CALLBACK (on_session_authenticated),
+ slave);
+ g_signal_connect (slave->priv->session,
+ "authentication-failed",
+ G_CALLBACK (on_session_authentication_failed),
+ slave);
+ g_signal_connect (slave->priv->session,
+ "authorized",
+ G_CALLBACK (on_session_authorized),
+ slave);
+ g_signal_connect (slave->priv->session,
+ "authorization-failed",
+ G_CALLBACK (on_session_authorization_failed),
+ slave);
+ g_signal_connect (slave->priv->session,
+ "accredited",
+ G_CALLBACK (on_session_accredited),
+ slave);
+ g_signal_connect (slave->priv->session,
+ "accreditation-failed",
+ G_CALLBACK (on_session_accreditation_failed),
slave);
-#endif
g_signal_connect (slave->priv->session,
"info",
G_CALLBACK (on_session_info),
slave);
-
g_signal_connect (slave->priv->session,
"problem",
G_CALLBACK (on_session_problem),
slave);
-
g_signal_connect (slave->priv->session,
"info-query",
G_CALLBACK (on_session_info_query),
slave);
-
g_signal_connect (slave->priv->session,
"secret-info-query",
G_CALLBACK (on_session_secret_info_query),
slave);
-
- g_signal_connect (slave->priv->session,
- "user-verified",
- G_CALLBACK (on_session_user_verified),
- slave);
-
- g_signal_connect (slave->priv->session,
- "user-verification-error",
- G_CALLBACK (on_session_user_verification_error),
- slave);
-
g_signal_connect (slave->priv->session,
"session-started",
G_CALLBACK (on_session_started),
@@ -327,7 +418,12 @@ create_new_session (GdmSimpleSlave *slave)
"session-died",
G_CALLBACK (on_session_died),
slave);
-
+#if 0
+ g_signal_connect (slave->priv->session,
+ "closed",
+ G_CALLBACK (on_session_closed),
+ slave);
+#endif
g_signal_connect (slave->priv->session,
"selected-user-changed",
G_CALLBACK (on_session_selected_user_changed),
@@ -353,7 +449,7 @@ on_greeter_begin_verification (GdmGreeterServer *greeter_server,
GdmSimpleSlave *slave)
{
g_debug ("GdmSimpleSlave: begin verification");
- gdm_session_begin_verification (GDM_SESSION (slave->priv->session));
+ gdm_session_setup (GDM_SESSION (slave->priv->session));
}
static void
@@ -362,8 +458,8 @@ on_greeter_begin_verification_for_user (GdmGreeterServer *greeter_server,
GdmSimpleSlave *slave)
{
g_debug ("GdmSimpleSlave: begin verification");
- gdm_session_begin_verification_for_user (GDM_SESSION (slave->priv->session),
- username);
+ gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
+ username);
}
static void