static void gdm_display_dispose (GObject *object) { GdmDisplay *display; display = GDM_DISPLAY (object); g_debug ("GdmDisplay: Disposing display"); if (display->priv->finish_idle_id > 0) { g_source_remove (display->priv->finish_idle_id); display->priv->finish_idle_id = 0; } if (display->priv->slave_proxy != NULL) { g_object_unref (display->priv->slave_proxy); display->priv->slave_proxy = NULL; } if (display->priv->user_access_file != NULL) { gdm_display_access_file_close (display->priv->user_access_file); g_object_unref (display->priv->user_access_file); display->priv->user_access_file = NULL; } if (display->priv->access_file != NULL) { gdm_display_access_file_close (display->priv->access_file); g_object_unref (display->priv->access_file); display->priv->access_file = NULL; } G_OBJECT_CLASS (gdm_display_parent_class)->dispose (object); }
static gboolean gdm_display_real_unmanage (GdmDisplay *display) { gdouble elapsed; g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE); g_debug ("GdmDisplay: unmanage display"); g_timer_stop (display->priv->slave_timer); if (display->priv->slave_proxy != NULL) { gdm_slave_proxy_stop (display->priv->slave_proxy); g_object_unref (display->priv->slave_proxy); display->priv->slave_proxy = NULL; } if (display->priv->user_access_file != NULL) { gdm_display_access_file_close (display->priv->user_access_file); g_object_unref (display->priv->user_access_file); display->priv->user_access_file = NULL; } if (display->priv->access_file != NULL) { gdm_display_access_file_close (display->priv->access_file); g_object_unref (display->priv->access_file); display->priv->access_file = NULL; } elapsed = g_timer_elapsed (display->priv->slave_timer, NULL); if (elapsed < 3) { g_warning ("GdmDisplay: display lasted %lf seconds", elapsed); _gdm_display_set_status (display, GDM_DISPLAY_FAILED); } else { _gdm_display_set_status (display, GDM_DISPLAY_UNMANAGED); } if (display->priv->slave_name_id > 0) { g_bus_unwatch_name (display->priv->slave_name_id); display->priv->slave_name_id = 0; } return TRUE; }
static gboolean gdm_display_real_remove_user_authorization (GdmDisplay *display, const char *username, GError **error) { gdm_display_access_file_close (display->priv->user_access_file); return TRUE; }
static gboolean gdm_display_real_add_user_authorization (GdmDisplay *display, const char *username, char **filename, GError **error) { GdmDisplayAccessFile *access_file; GError *access_file_error; gboolean res; g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE); g_return_val_if_fail (display->priv->access_file != NULL, FALSE); g_debug ("GdmDisplay: Adding user authorization for %s", username); access_file_error = NULL; access_file = _create_access_file_for_user (display, username, &access_file_error); if (access_file == NULL) { g_propagate_error (error, access_file_error); return FALSE; } res = gdm_display_access_file_add_display_with_cookie (access_file, display, display->priv->x11_cookie, display->priv->x11_cookie_size, &access_file_error); if (! res) { g_debug ("GdmDisplay: Unable to add user authorization for %s: %s", username, access_file_error->message); g_propagate_error (error, access_file_error); gdm_display_access_file_close (access_file); g_object_unref (access_file); return FALSE; } *filename = gdm_display_access_file_get_path (access_file); display->priv->user_access_file = access_file; g_debug ("GdmDisplay: Added user authorization for %s: %s", username, *filename); return TRUE; }
static gboolean gdm_display_real_create_authority (GdmDisplay *display) { GdmDisplayAccessFile *access_file; GError *error; gboolean res; g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE); g_return_val_if_fail (display->priv->access_file == NULL, FALSE); error = NULL; access_file = _create_access_file_for_user (display, GDM_USERNAME, &error); if (access_file == NULL) { g_critical ("could not create display access file: %s", error->message); g_error_free (error); return FALSE; } g_free (display->priv->x11_cookie); display->priv->x11_cookie = NULL; res = gdm_display_access_file_add_display (access_file, display, &display->priv->x11_cookie, &display->priv->x11_cookie_size, &error); if (! res) { g_critical ("could not add display to access file: %s", error->message); g_error_free (error); gdm_display_access_file_close (access_file); g_object_unref (access_file); return FALSE; } display->priv->access_file = access_file; return TRUE; }