summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2015-03-17 09:06:48 -0400
committerRay Strode <rstrode@redhat.com>2015-03-19 20:26:35 -0400
commita21fbb4acf8503dc552c74942a601c91d803939e (patch)
treeb725ca266cbb00e70ee690d8aa0476b1b3f5bc00
parentc6674e7bcc940207969b2dcee5ab83356abf3404 (diff)
downloadgdm-a21fbb4acf8503dc552c74942a601c91d803939e.tar.gz
display: move gdm_display_get_timed_login_details to manager
The function is no longer virtualized among the display types, and it doesn't actually have a full picture of whether or not the display should do automatic/timed login so move it up to the manager, where all the information is. https://bugzilla.gnome.org/show_bug.cgi?id=746492
-rw-r--r--daemon/gdm-display.c92
-rw-r--r--daemon/gdm-display.h4
-rw-r--r--daemon/gdm-manager.c107
3 files changed, 104 insertions, 99 deletions
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
index b2a53a2d..20cda938 100644
--- a/daemon/gdm-display.c
+++ b/daemon/gdm-display.c
@@ -395,98 +395,6 @@ gdm_display_add_user_authorization (GdmDisplay *self,
return TRUE;
}
-void
-gdm_display_get_timed_login_details (GdmDisplay *self,
- gboolean *enabledp,
- char **usernamep,
- int *delayp)
-{
- gboolean res;
- gboolean enabled;
- int delay;
- char *username = NULL;
-
- enabled = FALSE;
- username = NULL;
- delay = 0;
-
- if (!self->priv->allow_timed_login) {
- goto out;
- }
-
-#ifdef WITH_SYSTEMD
- /* FIXME: More careful thought needs to happen before we
- * can support auto/timed login on auxilliary seats in the
- * systemd path.
- */
- if (LOGIND_RUNNING()) {
- if (g_strcmp0 (self->priv->seat_id, "seat0") != 0) {
- goto out;
- }
- }
-#endif
-
- res = gdm_settings_direct_get_boolean (GDM_KEY_AUTO_LOGIN_ENABLE, &enabled);
- if (res && enabled) {
- res = gdm_settings_direct_get_string (GDM_KEY_AUTO_LOGIN_USER, &username);
- }
-
- if (enabled && res && username != NULL && username[0] != '\0') {
- goto out;
- }
-
- g_free (username);
- username = NULL;
- enabled = FALSE;
-
- res = gdm_settings_direct_get_boolean (GDM_KEY_TIMED_LOGIN_ENABLE, &enabled);
- if (res && ! enabled) {
- goto out;
- }
-
- res = gdm_settings_direct_get_string (GDM_KEY_TIMED_LOGIN_USER, &username);
- if (res && (username == NULL || username[0] == '\0')) {
- enabled = FALSE;
- g_free (username);
- username = NULL;
- goto out;
- }
-
- delay = 0;
- res = gdm_settings_direct_get_int (GDM_KEY_TIMED_LOGIN_DELAY, &delay);
-
- if (res && delay <= 0) {
- /* we don't allow the timed login to have a zero delay */
- delay = 10;
- }
-
- out:
- if (enabled) {
- g_debug ("GdmDisplay: Got timed login details for display %s (seat %s): %d %s %d",
- self->priv->x11_display_name? self->priv->x11_display_name : "",
- self->priv->seat_id,
- enabled,
- username,
- delay);
- } else {
- g_debug ("GdmDisplay: Got timed login details for display %s (seat %s): 0",
- self->priv->x11_display_name? self->priv->x11_display_name : "",
- self->priv->seat_id);
- }
-
- if (enabledp != NULL) {
- *enabledp = enabled;
- }
- if (usernamep != NULL) {
- *usernamep = username;
- } else {
- g_free (username);
- }
- if (delayp != NULL) {
- *delayp = delay;
- }
-}
-
gboolean
gdm_display_remove_user_authorization (GdmDisplay *self,
const char *username,
diff --git a/daemon/gdm-display.h b/daemon/gdm-display.h
index e95dd8f3..6d5e88df 100644
--- a/daemon/gdm-display.h
+++ b/daemon/gdm-display.h
@@ -113,10 +113,6 @@ gboolean gdm_display_get_seat_id (GdmDisplay *disp
gboolean gdm_display_is_local (GdmDisplay *display,
gboolean *local,
GError **error);
-void gdm_display_get_timed_login_details (GdmDisplay *display,
- gboolean *enabled,
- char **username,
- int *delay);
gboolean gdm_display_is_initial (GdmDisplay *display,
gboolean *initial,
GError **error);
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index b6dd7a95..367cdcf9 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -49,6 +49,8 @@
#include "gdm-local-display-factory.h"
#include "gdm-session.h"
#include "gdm-session-record.h"
+#include "gdm-settings-direct.h"
+#include "gdm-settings-keys.h"
#include "gdm-xdmcp-display-factory.h"
#define GDM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_MANAGER, GdmManagerPrivate))
@@ -1443,6 +1445,104 @@ manager_interface_init (GdmDBusManagerIface *interface)
interface->handle_open_reauthentication_channel = gdm_manager_handle_open_reauthentication_channel;
}
+static void
+get_timed_login_details_for_display (GdmManager *manager,
+ GdmDisplay *display,
+ gboolean *enabledp,
+ char **usernamep,
+ int *delayp)
+{
+ gboolean res;
+ gboolean enabled;
+ gboolean allow_timed_login = FALSE;
+ char *seat_id;
+ int delay;
+ char *username = NULL;
+
+ enabled = FALSE;
+ username = NULL;
+ delay = 0;
+
+ g_object_get (G_OBJECT (display), "allow-timed-login", &allow_timed_login, NULL);
+
+ if (!allow_timed_login) {
+ goto out;
+ }
+
+ g_object_get (G_OBJECT (display), "seat-id", &seat_id, NULL);
+
+#ifdef WITH_SYSTEMD
+ /* FIXME: More careful thought needs to happen before we
+ * can support auto/timed login on auxilliary seats
+ */
+ if (LOGIND_RUNNING()) {
+ if (g_strcmp0 (seat_id, "seat0") != 0) {
+ goto out;
+ }
+ }
+#endif
+
+ res = gdm_settings_direct_get_boolean (GDM_KEY_AUTO_LOGIN_ENABLE, &enabled);
+ if (res && enabled) {
+ res = gdm_settings_direct_get_string (GDM_KEY_AUTO_LOGIN_USER, &username);
+ }
+
+ if (enabled && res && username != NULL && username[0] != '\0') {
+ goto out;
+ }
+
+ g_free (username);
+ username = NULL;
+ enabled = FALSE;
+
+ res = gdm_settings_direct_get_boolean (GDM_KEY_TIMED_LOGIN_ENABLE, &enabled);
+ if (res && ! enabled) {
+ goto out;
+ }
+
+ res = gdm_settings_direct_get_string (GDM_KEY_TIMED_LOGIN_USER, &username);
+ if (res && (username == NULL || username[0] == '\0')) {
+ enabled = FALSE;
+ g_free (username);
+ username = NULL;
+ goto out;
+ }
+
+ delay = 0;
+ res = gdm_settings_direct_get_int (GDM_KEY_TIMED_LOGIN_DELAY, &delay);
+
+ if (res && delay <= 0) {
+ /* we don't allow the timed login to have a zero delay */
+ delay = 10;
+ }
+
+ out:
+ if (enabled) {
+ g_debug ("GdmDisplay: Got timed login details for display (seat %s): %d %s %d",
+ seat_id,
+ enabled,
+ username,
+ delay);
+ } else {
+ g_debug ("GdmDisplay: Got timed login details for display (seat %s): 0",
+ seat_id);
+ }
+
+ g_free (seat_id);
+
+ if (enabledp != NULL) {
+ *enabledp = enabled;
+ }
+ if (usernamep != NULL) {
+ *usernamep = username;
+ } else {
+ g_free (username);
+ }
+ if (delayp != NULL) {
+ *delayp = delay;
+ }
+}
+
static gboolean
display_should_autologin (GdmManager *manager,
GdmDisplay *display)
@@ -1454,7 +1554,7 @@ display_should_autologin (GdmManager *manager,
return FALSE;
}
- gdm_display_get_timed_login_details (display, &enabled, NULL, &delay);
+ get_timed_login_details_for_display (manager, display, &enabled, NULL, &delay);
return enabled && delay == 0;
}
@@ -2030,7 +2130,7 @@ on_session_client_connected (GdmSession *session,
}
enabled = FALSE;
- gdm_display_get_timed_login_details (display, &enabled, &username, &delay);
+ get_timed_login_details_for_display (manager, display, &enabled, &username, &delay);
if (! enabled) {
return;
@@ -2150,7 +2250,8 @@ on_session_conversation_started (GdmSession *session,
}
enabled = FALSE;
- gdm_display_get_timed_login_details (display, &enabled, &username, &delay);
+ get_timed_login_details_for_display (manager, display, &enabled, &username, &delay);
+
if (! enabled) {
return;
}