summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2008-02-20 18:41:49 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2008-02-20 18:41:49 +0000
commit9400160560215c509759efca6fb365f12e4a8bc5 (patch)
tree3653a68ebba12afe5864ddc8737fd1f491bda275 /daemon
parent7ded9b2049a472b9fb5f6f2f70e270e14fcee656 (diff)
downloadgdm-9400160560215c509759efca6fb365f12e4a8bc5.tar.gz
Add initial support for timed login.
2008-02-20 William Jon McCann <jmccann@redhat.com> * common/gdm-settings-client.c: (gdm_settings_client_get_string): * common/gdm-settings-keys.h: * daemon/gdm-factory-slave.c: (on_greeter_begin_verification), (on_greeter_begin_verification_for_user): * daemon/gdm-greeter-server.c: (handle_begin_timed_login), (greeter_handle_child_message), (do_introspect), (gdm_greeter_server_class_init): * daemon/gdm-greeter-server.h: * daemon/gdm-product-slave.c: (on_relay_setup), (on_relay_setup_for_user): * daemon/gdm-session-direct.c: (gdm_session_direct_init), (send_setup), (send_setup_for_user), (gdm_session_direct_setup), (gdm_session_direct_setup_for_user), (gdm_session_direct_set_property), (gdm_session_direct_get_property), (gdm_session_direct_dispose), (gdm_session_direct_class_init): * daemon/gdm-session-relay.c: (send_dbus_string_string_signal), (gdm_session_relay_setup), (gdm_session_relay_setup_for_user), (do_introspect): * daemon/gdm-session.c: (gdm_session_setup), (gdm_session_setup_for_user): * daemon/gdm-session.h: * daemon/gdm-simple-slave.c: (on_greeter_begin_verification), (on_greeter_begin_timed_login), (on_greeter_begin_verification_for_user), (run_greeter): * daemon/simple-slave-main.c: (main): * daemon/test-session.c: (on_open): * gui/simple-greeter/gdm-greeter-client.c: (emit_string_signal_for_message), (gdm_greeter_client_call_begin_timed_login): * gui/simple-greeter/gdm-greeter-client.h: * gui/simple-greeter/gdm-greeter-login-window.c: (remove_timed_login_timeout), (timed_login_timer), (restart_timed_login_timeout), (on_login_button_clicked_answer_query), (on_login_button_clicked_timed_login), (set_log_in_button_mode), (switch_mode), (do_cancel), (reset_dialog), (gdm_greeter_login_window_info_query), (gdm_greeter_login_window_secret_info_query), (on_user_chosen), (load_theme), (read_configuration), (gdm_greeter_login_window_constructor), (gdm_greeter_login_window_class_init), (gdm_greeter_login_window_init): * gui/simple-greeter/gdm-greeter-login-window.h: * gui/simple-greeter/gdm-greeter-session.c: (on_begin_timed_login), (toggle_login_window): * gui/simple-greeter/gdm-user-chooser-dialog.c: (gdm_user_chooser_dialog_set_show_other_user), (gdm_user_chooser_dialog_set_show_guest_user), (gdm_user_chooser_dialog_set_show_auto_user), (gdm_user_chooser_dialog_init): * gui/simple-greeter/gdm-user-chooser-dialog.h: * gui/simple-greeter/gdm-user-chooser-widget.c: (add_user_other), (add_user_guest), (add_user_auto), (remove_user_other), (remove_user_guest), (remove_user_auto), (gdm_user_chooser_widget_set_show_other_user), (gdm_user_chooser_widget_set_show_guest_user), (gdm_user_chooser_widget_set_show_auto_user), (gdm_user_chooser_widget_constructor), (gdm_user_chooser_widget_init): * gui/simple-greeter/gdm-user-chooser-widget.h: * gui/simple-greeter/greeter-main.c: (main): * gui/simple-greeter/test-greeter-login-window.c: (main): * gui/simple-greeter/test-user-chooser.c: (main): Add initial support for timed login. svn path=/trunk/; revision=5820
Diffstat (limited to 'daemon')
-rw-r--r--daemon/gdm-factory-slave.c4
-rw-r--r--daemon/gdm-greeter-server.c31
-rw-r--r--daemon/gdm-greeter-server.h3
-rw-r--r--daemon/gdm-product-slave.c33
-rw-r--r--daemon/gdm-session-direct.c53
-rw-r--r--daemon/gdm-session-relay.c44
-rw-r--r--daemon/gdm-session.c8
-rw-r--r--daemon/gdm-session.h8
-rw-r--r--daemon/gdm-simple-slave.c40
-rw-r--r--daemon/simple-slave-main.c7
-rw-r--r--daemon/test-session.c2
11 files changed, 173 insertions, 60 deletions
diff --git a/daemon/gdm-factory-slave.c b/daemon/gdm-factory-slave.c
index 8791d5b7..14a1a689 100644
--- a/daemon/gdm-factory-slave.c
+++ b/daemon/gdm-factory-slave.c
@@ -375,7 +375,8 @@ on_greeter_begin_verification (GdmGreeterServer *greeter_server,
GdmFactorySlave *slave)
{
g_debug ("GdmFactorySlave: begin verification");
- gdm_session_setup (GDM_SESSION (slave->priv->session));
+ gdm_session_setup (GDM_SESSION (slave->priv->session),
+ "gdm");
}
static void
@@ -385,6 +386,7 @@ on_greeter_begin_verification_for_user (GdmGreeterServer *greeter_server,
{
g_debug ("GdmFactorySlave: begin verification for user");
gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
+ "gdm",
username);
}
diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c
index e1f672c3..b3ab8bf8 100644
--- a/daemon/gdm-greeter-server.c
+++ b/daemon/gdm-greeter-server.c
@@ -69,6 +69,7 @@ enum {
};
enum {
+ BEGIN_TIMED_LOGIN,
BEGIN_VERIFICATION,
BEGIN_VERIFICATION_FOR_USER,
QUERY_ANSWER,
@@ -281,6 +282,23 @@ handle_begin_verification (GdmGreeterServer *greeter_server,
return DBUS_HANDLER_RESULT_HANDLED;
}
+static DBusHandlerResult
+handle_begin_timed_login (GdmGreeterServer *greeter_server,
+ DBusConnection *connection,
+ DBusMessage *message)
+{
+ DBusMessage *reply;
+
+ g_debug ("GreeterServer: BeginTimedLogin");
+
+ reply = dbus_message_new_method_return (message);
+ dbus_connection_send (connection, reply, NULL);
+ dbus_message_unref (reply);
+
+ g_signal_emit (greeter_server, signals [BEGIN_TIMED_LOGIN], 0);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+}
static DBusHandlerResult
handle_begin_verification_for_user (GdmGreeterServer *greeter_server,
@@ -504,6 +522,8 @@ greeter_handle_child_message (DBusConnection *connection,
return handle_begin_verification (greeter_server, connection, message);
} else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "BeginVerificationForUser")) {
return handle_begin_verification_for_user (greeter_server, connection, message);
+ } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "BeginTimedLogin")) {
+ return handle_begin_timed_login (greeter_server, connection, message);
} else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "AnswerQuery")) {
return handle_answer_query (greeter_server, connection, message);
} else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "SelectSession")) {
@@ -549,6 +569,7 @@ do_introspect (DBusConnection *connection,
xml = g_string_append (xml,
" <interface name=\"org.gnome.DisplayManager.GreeterServer\">\n"
" <method name=\"BeginVerification\">\n"
+ " <method name=\"BeginTimedLogin\">\n"
" </method>\n"
" <method name=\"BeginVerificationForUser\">\n"
" <arg name=\"username\" direction=\"in\" type=\"s\"/>\n"
@@ -967,6 +988,16 @@ gdm_greeter_server_class_init (GdmGreeterServerClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
+ signals [BEGIN_TIMED_LOGIN] =
+ g_signal_new ("begin-timed-login",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GdmGreeterServerClass, begin_timed_login),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
signals [BEGIN_VERIFICATION_FOR_USER] =
g_signal_new ("begin-verification-for-user",
G_OBJECT_CLASS_TYPE (object_class),
diff --git a/daemon/gdm-greeter-server.h b/daemon/gdm-greeter-server.h
index c37a43ab..7432df40 100644
--- a/daemon/gdm-greeter-server.h
+++ b/daemon/gdm-greeter-server.h
@@ -45,9 +45,10 @@ typedef struct
{
GObjectClass parent_class;
+ void (* begin_timed_login) (GdmGreeterServer *greeter_server);
+ void (* begin_verification) (GdmGreeterServer *greeter_server);
void (* begin_verification_for_user)(GdmGreeterServer *greeter_server,
const char *username);
- void (* begin_verification) (GdmGreeterServer *greeter_server);
void (* query_answer) (GdmGreeterServer *greeter_server,
const char *text);
void (* session_selected) (GdmGreeterServer *greeter_server,
diff --git a/daemon/gdm-product-slave.c b/daemon/gdm-product-slave.c
index f7991c2f..0430e059 100644
--- a/daemon/gdm-product-slave.c
+++ b/daemon/gdm-product-slave.c
@@ -547,9 +547,25 @@ static void
on_relay_setup (GdmProductSlave *slave,
DBusMessage *message)
{
- g_debug ("GdmProductSlave: Relay Setup");
+ DBusError error;
+ const char *service_name;
+ dbus_bool_t res;
- gdm_session_setup (GDM_SESSION (slave->priv->session));
+ service_name = NULL;
+
+ dbus_error_init (&error);
+ res = dbus_message_get_args (message,
+ &error,
+ DBUS_TYPE_STRING, &service_name,
+ DBUS_TYPE_INVALID);
+ if (res) {
+ g_debug ("GdmProductSlave: Relay Setup");
+ gdm_session_setup (GDM_SESSION (slave->priv->session),
+ service_name);
+ } else {
+ g_warning ("Unable to get arguments: %s", error.message);
+ dbus_error_free (&error);
+ }
}
static void
@@ -557,17 +573,24 @@ on_relay_setup_for_user (GdmProductSlave *slave,
DBusMessage *message)
{
DBusError error;
- const char *text;
+ const char *service_name;
+ const char *username;
dbus_bool_t res;
+ username = NULL;
+ service_name = NULL;
+
dbus_error_init (&error);
res = dbus_message_get_args (message,
&error,
- DBUS_TYPE_STRING, &text,
+ DBUS_TYPE_STRING, &service_name,
+ DBUS_TYPE_STRING, &username,
DBUS_TYPE_INVALID);
if (res) {
g_debug ("GdmProductSlave: Relay SetupForUser");
- gdm_session_setup_for_user (GDM_SESSION (slave->priv->session), text);
+ gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
+ service_name,
+ username);
} else {
g_warning ("Unable to get arguments: %s", error.message);
dbus_error_free (&error);
diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
index 2488668b..c16554ef 100644
--- a/daemon/gdm-session-direct.c
+++ b/daemon/gdm-session-direct.c
@@ -78,7 +78,6 @@ struct _GdmSessionDirectPrivate
guint32 is_running : 1;
/* object lifetime scope */
- char *service_name;
char *display_name;
char *display_hostname;
char *display_device;
@@ -92,7 +91,6 @@ struct _GdmSessionDirectPrivate
enum {
PROP_0,
- PROP_SERVICE_NAME,
PROP_DISPLAY_NAME,
PROP_DISPLAY_HOSTNAME,
PROP_DISPLAY_IS_LOCAL,
@@ -1227,7 +1225,6 @@ gdm_session_direct_init (GdmSessionDirect *session)
session->priv->session_pid = -1;
session->priv->selected_session = g_strdup ("gnome.desktop");
- session->priv->service_name = g_strdup ("gdm");
session->priv->environment = g_hash_table_new_full (g_str_hash,
g_str_equal,
@@ -1343,7 +1340,8 @@ gdm_session_direct_open (GdmSession *session)
}
static void
-send_setup (GdmSessionDirect *session)
+send_setup (GdmSessionDirect *session,
+ const char *service_name)
{
DBusMessage *message;
DBusMessageIter iter;
@@ -1352,6 +1350,8 @@ send_setup (GdmSessionDirect *session)
const char *display_hostname;
const char *display_x11_authority_file;
+ g_assert (service_name != NULL);
+
if (session->priv->display_name != NULL) {
display_name = session->priv->display_name;
} else {
@@ -1380,7 +1380,7 @@ send_setup (GdmSessionDirect *session)
"Setup");
dbus_message_iter_init_append (message, &iter);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &session->priv->service_name);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &service_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_device);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_hostname);
@@ -1394,7 +1394,8 @@ send_setup (GdmSessionDirect *session)
}
static void
-send_setup_for_user (GdmSessionDirect *session)
+send_setup_for_user (GdmSessionDirect *session,
+ const char *service_name)
{
DBusMessage *message;
DBusMessageIter iter;
@@ -1404,6 +1405,8 @@ send_setup_for_user (GdmSessionDirect *session)
const char *display_x11_authority_file;
const char *selected_user;
+ g_assert (service_name != NULL);
+
if (session->priv->display_name != NULL) {
display_name = session->priv->display_name;
} else {
@@ -1437,7 +1440,7 @@ send_setup_for_user (GdmSessionDirect *session)
"SetupForUser");
dbus_message_iter_init_append (message, &iter);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &session->priv->service_name);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &service_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_device);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_hostname);
@@ -1452,19 +1455,21 @@ send_setup_for_user (GdmSessionDirect *session)
}
static void
-gdm_session_direct_setup (GdmSession *session)
+gdm_session_direct_setup (GdmSession *session,
+ const char *service_name)
{
GdmSessionDirect *impl = GDM_SESSION_DIRECT (session);
g_return_if_fail (session != NULL);
g_return_if_fail (dbus_connection_get_is_connected (impl->priv->worker_connection));
- send_setup (impl);
+ send_setup (impl, service_name);
}
static void
-gdm_session_direct_setup_for_user (GdmSession *session,
- const char *username)
+gdm_session_direct_setup_for_user (GdmSession *session,
+ const char *service_name,
+ const char *username)
{
GdmSessionDirect *impl = GDM_SESSION_DIRECT (session);
@@ -1474,7 +1479,7 @@ gdm_session_direct_setup_for_user (GdmSession *session,
gdm_session_direct_select_user (session, username);
- send_setup_for_user (impl);
+ send_setup_for_user (impl, service_name);
}
static void
@@ -1921,14 +1926,6 @@ gdm_session_direct_select_language (GdmSession *session,
impl->priv->selected_language = g_strdup (text);
}
-static void
-_gdm_session_direct_set_service_name (GdmSessionDirect *session,
- const char *name)
-{
- g_free (session->priv->service_name);
- session->priv->service_name = g_strdup (name);
-}
-
/* At some point we may want to read these right from
* the slave but for now I don't want the dependency */
static void
@@ -1990,9 +1987,6 @@ gdm_session_direct_set_property (GObject *object,
self = GDM_SESSION_DIRECT (object);
switch (prop_id) {
- case PROP_SERVICE_NAME:
- _gdm_session_direct_set_service_name (self, g_value_get_string (value));
- break;
case PROP_DISPLAY_NAME:
_gdm_session_direct_set_display_name (self, g_value_get_string (value));
break;
@@ -2028,9 +2022,6 @@ gdm_session_direct_get_property (GObject *object,
self = GDM_SESSION_DIRECT (object);
switch (prop_id) {
- case PROP_SERVICE_NAME:
- g_value_set_string (value, self->priv->service_name);
- break;
case PROP_DISPLAY_NAME:
g_value_set_string (value, self->priv->display_name);
break;
@@ -2066,9 +2057,6 @@ gdm_session_direct_dispose (GObject *object)
gdm_session_direct_close (GDM_SESSION (session));
- g_free (session->priv->service_name);
- session->priv->service_name = NULL;
-
g_free (session->priv->display_name);
session->priv->display_name = NULL;
@@ -2148,13 +2136,6 @@ gdm_session_direct_class_init (GdmSessionDirectClass *session_class)
g_type_class_add_private (session_class, sizeof (GdmSessionDirectPrivate));
g_object_class_install_property (object_class,
- PROP_SERVICE_NAME,
- g_param_spec_string ("service-name",
- "service name",
- "service name",
- "gdm",
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- g_object_class_install_property (object_class,
PROP_DISPLAY_NAME,
g_param_spec_string ("display-name",
"display name",
diff --git a/daemon/gdm-session-relay.c b/daemon/gdm-session-relay.c
index bdce1603..7e7d3547 100644
--- a/daemon/gdm-session-relay.c
+++ b/daemon/gdm-session-relay.c
@@ -132,8 +132,36 @@ send_dbus_string_signal (GdmSessionRelay *session_relay,
}
static void
+send_dbus_string_string_signal (GdmSessionRelay *session_relay,
+ const char *name,
+ const char *text1,
+ const char *text2)
+{
+ DBusMessage *message;
+ DBusMessageIter iter;
+
+ g_return_if_fail (session_relay != NULL);
+
+ g_debug ("GdmSessionRelay: sending signal %s", name);
+ message = dbus_message_new_signal (GDM_SESSION_RELAY_DBUS_PATH,
+ GDM_SESSION_RELAY_DBUS_INTERFACE,
+ name);
+
+ dbus_message_iter_init_append (message, &iter);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &text1);
+ dbus_message_iter_init_append (message, &iter);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &text2);
+
+ if (! send_dbus_message (session_relay->priv->session_connection, message)) {
+ g_debug ("GdmSessionRelay: Could not send %s signal", name);
+ }
+
+ dbus_message_unref (message);
+}
+
+static void
send_dbus_void_signal (GdmSessionRelay *session_relay,
- const char *name)
+ const char *name)
{
DBusMessage *message;
@@ -166,18 +194,20 @@ gdm_session_relay_close (GdmSession *session)
}
static void
-gdm_session_relay_setup (GdmSession *session)
+gdm_session_relay_setup (GdmSession *session,
+ const char *service_name)
{
GdmSessionRelay *impl = GDM_SESSION_RELAY (session);
- send_dbus_void_signal (impl, "Setup");
+ send_dbus_string_signal (impl, "Setup", service_name);
}
static void
gdm_session_relay_setup_for_user (GdmSession *session,
+ const char *service_name,
const char *username)
{
GdmSessionRelay *impl = GDM_SESSION_RELAY (session);
- send_dbus_string_signal (impl, "SetupForUser", username);
+ send_dbus_string_string_signal (impl, "SetupForUser", service_name, username);
}
static void
@@ -742,15 +772,9 @@ do_introspect (DBusConnection *connection,
" </signal>\n"
" <signal name=\"Setup\">\n"
" <arg name=\"service_name\" type=\"s\"/>\n"
- " <arg name=\"x11_display_name\" type=\"s\"/>\n"
- " <arg name=\"display_device\" type=\"s\"/>\n"
- " <arg name=\"hostname\" type=\"s\"/>\n"
" </signal>\n"
" <signal name=\"SetupForUser\">\n"
" <arg name=\"service_name\" type=\"s\"/>\n"
- " <arg name=\"x11_display_name\" type=\"s\"/>\n"
- " <arg name=\"display_device\" type=\"s\"/>\n"
- " <arg name=\"hostname\" type=\"s\"/>\n"
" <arg name=\"username\" type=\"s\"/>\n"
" </signal>\n"
" <signal name=\"Authenticate\">\n"
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 34ae9392..9834e7cf 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -93,20 +93,22 @@ gdm_session_close (GdmSession *session)
}
void
-gdm_session_setup (GdmSession *session)
+gdm_session_setup (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- GDM_SESSION_GET_IFACE (session)->setup (session);
+ GDM_SESSION_GET_IFACE (session)->setup (session, service_name);
}
void
gdm_session_setup_for_user (GdmSession *session,
+ const char *service_name,
const char *username)
{
g_return_if_fail (GDM_IS_SESSION (session));
- GDM_SESSION_GET_IFACE (session)->setup_for_user (session, username);
+ GDM_SESSION_GET_IFACE (session)->setup_for_user (session, service_name, username);
}
void
diff --git a/daemon/gdm-session.h b/daemon/gdm-session.h
index 579f2590..b8168c34 100644
--- a/daemon/gdm-session.h
+++ b/daemon/gdm-session.h
@@ -46,8 +46,10 @@ struct _GdmSessionIface
/* Methods */
void (* open) (GdmSession *session);
- void (* setup) (GdmSession *session);
+ void (* setup) (GdmSession *session,
+ const char *service_name);
void (* setup_for_user) (GdmSession *session,
+ const char *service_name,
const char *username);
void (* reset) (GdmSession *session);
void (* authenticate) (GdmSession *session);
@@ -111,8 +113,10 @@ struct _GdmSessionIface
GType gdm_session_get_type (void) G_GNUC_CONST;
void gdm_session_open (GdmSession *session);
-void gdm_session_setup (GdmSession *session);
+void gdm_session_setup (GdmSession *session,
+ const char *service_name);
void gdm_session_setup_for_user (GdmSession *session,
+ const char *service_name,
const char *username);
void gdm_session_reset (GdmSession *session);
void gdm_session_authenticate (GdmSession *session);
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index bb85ad91..20813f85 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -42,6 +42,9 @@
#include "gdm-common.h"
+#include "gdm-settings-client.h"
+#include "gdm-settings-keys.h"
+
#include "gdm-simple-slave.h"
#include "gdm-simple-slave-glue.h"
@@ -557,7 +560,37 @@ on_greeter_begin_verification (GdmGreeterServer *greeter_server,
GdmSimpleSlave *slave)
{
g_debug ("GdmSimpleSlave: begin verification");
- gdm_session_setup (GDM_SESSION (slave->priv->session));
+ gdm_session_setup (GDM_SESSION (slave->priv->session),
+ "gdm");
+}
+
+static void
+on_greeter_begin_timed_login (GdmGreeterServer *greeter_server,
+ GdmSimpleSlave *slave)
+{
+ char *username;
+ gboolean enabled;
+ gboolean res;
+
+ g_debug ("GdmSimpleSlave: begin timed login");
+
+ enabled = FALSE;
+ res = gdm_settings_client_get_boolean (GDM_KEY_TIMED_LOGIN_ENABLE, &enabled);
+ if (! enabled) {
+ g_warning ("GdmSimpleSlave: timed login requested but disabled in configuration");
+ return;
+ }
+
+ username = NULL;
+ res = gdm_settings_client_get_string (GDM_KEY_TIMED_LOGIN_USER, &username);
+ if (username == NULL) {
+ g_warning ("GdmSimpleSlave: timed login requested but username not specified in configuration");
+ return;
+ }
+
+ gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
+ "gdm-autologin",
+ username);
}
static void
@@ -567,6 +600,7 @@ on_greeter_begin_verification_for_user (GdmGreeterServer *greeter_server,
{
g_debug ("GdmSimpleSlave: begin verification");
gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
+ "gdm",
username);
}
@@ -693,6 +727,10 @@ run_greeter (GdmSimpleSlave *slave)
slave->priv->greeter_server = gdm_greeter_server_new (display_id);
g_signal_connect (slave->priv->greeter_server,
+ "begin-timed-login",
+ G_CALLBACK (on_greeter_begin_timed_login),
+ slave);
+ g_signal_connect (slave->priv->greeter_server,
"begin-verification",
G_CALLBACK (on_greeter_begin_verification),
slave);
diff --git a/daemon/simple-slave-main.c b/daemon/simple-slave-main.c
index 952b2275..cf0e9a34 100644
--- a/daemon/simple-slave-main.c
+++ b/daemon/simple-slave-main.c
@@ -44,6 +44,8 @@
#include "gdm-common.h"
#include "gdm-simple-slave.h"
+#include "gdm-settings-client.h"
+
static int gdm_return_code = 0;
static DBusGConnection *
@@ -188,6 +190,11 @@ main (int argc,
exit (1);
}
+ if (! gdm_settings_client_init (GDMCONFDIR "/gdm.schemas", "/")) {
+ g_critical ("Unable to initialize settings client");
+ exit (1);
+ }
+
main_loop = g_main_loop_new (NULL, FALSE);
signal_handler = gdm_signal_handler_new ();
diff --git a/daemon/test-session.c b/daemon/test-session.c
index d9dff3ec..fd927e76 100644
--- a/daemon/test-session.c
+++ b/daemon/test-session.c
@@ -38,7 +38,7 @@ on_open (GdmSession *session,
{
g_debug ("Got opened: calling setup...");
- gdm_session_setup (session);
+ gdm_session_setup (session, "gdm");
}
static void