diff options
author | Ray Strode <rstrode@redhat.com> | 2015-03-17 09:06:48 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2015-03-19 20:26:35 -0400 |
commit | a21fbb4acf8503dc552c74942a601c91d803939e (patch) | |
tree | b725ca266cbb00e70ee690d8aa0476b1b3f5bc00 | |
parent | c6674e7bcc940207969b2dcee5ab83356abf3404 (diff) | |
download | gdm-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.c | 92 | ||||
-rw-r--r-- | daemon/gdm-display.h | 4 | ||||
-rw-r--r-- | daemon/gdm-manager.c | 107 |
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; } |