diff --git a/.gdm.metadata b/.gdm.metadata new file mode 100644 index 0000000..bc466e4 --- /dev/null +++ b/.gdm.metadata @@ -0,0 +1 @@ +19582495748efdf3d4a20cf8b0e90d0d17c57558 SOURCES/gdm-3.22.3.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f652268 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/gdm-3.22.3.tar.xz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/0001-Honor-initial-setup-being-disabled-by-distro-install.patch b/SOURCES/0001-Honor-initial-setup-being-disabled-by-distro-install.patch new file mode 100644 index 0000000..96a78f5 --- /dev/null +++ b/SOURCES/0001-Honor-initial-setup-being-disabled-by-distro-install.patch @@ -0,0 +1,82 @@ +From fa5733788ae5f8e8caeb07e956be370e96f9b6b1 Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Mon, 23 Jan 2017 20:19:51 +0100 +Subject: [PATCH] Honor initial setup being disabled by distro installer + +Sysadmins might want to disable any kind of initial setup for their +users, perhaps because they pre-configure their environments. We +already provide a configuration file option for this but distro +installers might have their own way of requesting this. + +At least the anaconda installer provides an option to skip any kind +post-install setup tools so, for now we're only adding support for +that but more might be added in the future. + +https://bugzilla.gnome.org/show_bug.cgi?id=777708 +--- + daemon/Makefile.am | 1 + + daemon/gdm-display.c | 29 +++++++++++++++++++++++++++++ + 2 files changed, 30 insertions(+) + +diff --git a/daemon/Makefile.am b/daemon/Makefile.am +index ab5dda0..786e0c5 100644 +--- a/daemon/Makefile.am ++++ b/daemon/Makefile.am +@@ -14,6 +14,7 @@ AM_CPPFLAGS = \ + -DLOCALSTATEDIR=\"$(localstatedir)\" \ + -DLOGDIR=\"$(logdir)\" \ + -DSBINDIR=\"$(sbindir)\" \ ++ -DSYSCONFDIR=\"$(sysconfdir)\" \ + -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ + -DGDM_RUN_DIR=\"$(GDM_RUN_DIR)\" \ + -DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \ +diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c +index 0057e2c..2af8e13 100644 +--- a/daemon/gdm-display.c ++++ b/daemon/gdm-display.c +@@ -1456,6 +1456,31 @@ can_create_environment (const char *session_id) + } + + static gboolean ++initial_setup_disabled_by_anaconda (void) ++{ ++ GKeyFile *key_file; ++ const gchar *file_name = SYSCONFDIR "/sysconfig/anaconda"; ++ gboolean disabled = FALSE; ++ GError *error = NULL; ++ ++ key_file = g_key_file_new (); ++ if (!g_key_file_load_from_file (key_file, file_name, G_KEY_FILE_NONE, &error)) { ++ if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT) && ++ !g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) { ++ g_warning ("Could not read %s: %s", file_name, error->message); ++ } ++ g_error_free (error); ++ goto out; ++ } ++ ++ disabled = g_key_file_get_boolean (key_file, "General", ++ "post_install_tools_disabled", NULL); ++ out: ++ g_key_file_unref (key_file); ++ return disabled; ++} ++ ++static gboolean + wants_initial_setup (GdmDisplay *self) + { + gboolean enabled = FALSE; +@@ -1480,6 +1505,10 @@ wants_initial_setup (GdmDisplay *self) + return FALSE; + } + ++ if (initial_setup_disabled_by_anaconda ()) { ++ return FALSE; ++ } ++ + return enabled; + } + +-- +2.9.3 + diff --git a/SOURCES/0001-Revert-session-forward-is-initial-from-display-to-wo.patch b/SOURCES/0001-Revert-session-forward-is-initial-from-display-to-wo.patch new file mode 100644 index 0000000..8067b65 --- /dev/null +++ b/SOURCES/0001-Revert-session-forward-is-initial-from-display-to-wo.patch @@ -0,0 +1,1061 @@ +From 6df33bb3293d220bcdff7abc68f61ebad841ffe1 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 12 May 2017 10:11:09 -0400 +Subject: [PATCH] Revert "session: forward is-initial from display to worker" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This reverts commit 7a4e34049c79e907d1a027390c5d3a8dcdc11977. + +It breaks login screen until reboot on 7.3→7.4 upgrade. +--- + daemon/gdm-display.c | 6 ------ + daemon/gdm-session-worker.c | 21 +++++---------------- + daemon/gdm-session-worker.xml | 3 --- + daemon/gdm-session.c | 25 ------------------------- + 4 files changed, 5 insertions(+), 50 deletions(-) + +diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c +index 2af8e13e..c44e4941 100644 +--- a/daemon/gdm-display.c ++++ b/daemon/gdm-display.c +@@ -1488,119 +1488,113 @@ wants_initial_setup (GdmDisplay *self) + /* don't run initial-setup on remote displays + */ + if (!self->priv->is_local) { + return FALSE; + } + + /* don't run if the system has existing users */ + if (self->priv->have_existing_user_accounts) { + return FALSE; + } + + /* don't run if initial-setup is unavailable */ + if (!can_create_environment ("gnome-initial-setup")) { + return FALSE; + } + + if (!gdm_settings_direct_get_boolean (GDM_KEY_INITIAL_SETUP_ENABLE, &enabled)) { + return FALSE; + } + + if (initial_setup_disabled_by_anaconda ()) { + return FALSE; + } + + return enabled; + } + + void + gdm_display_start_greeter_session (GdmDisplay *self) + { +- GdmSession *session; + char *display_name; + char *seat_id; + char *hostname; + char *auth_file = NULL; + + g_return_if_fail (g_strcmp0 (self->priv->session_class, "greeter") == 0); + + g_debug ("GdmDisplay: Running greeter"); + + display_name = NULL; + seat_id = NULL; + hostname = NULL; + + g_object_get (self, + "x11-display-name", &display_name, + "seat-id", &seat_id, + "remote-hostname", &hostname, + NULL); + if (self->priv->access_file != NULL) { + auth_file = gdm_display_access_file_get_path (self->priv->access_file); + } + + g_debug ("GdmDisplay: Creating greeter for %s %s", display_name, hostname); + + g_signal_connect_object (self->priv->launch_environment, + "opened", + G_CALLBACK (on_launch_environment_session_opened), + self, 0); + g_signal_connect_object (self->priv->launch_environment, + "started", + G_CALLBACK (on_launch_environment_session_started), + self, 0); + g_signal_connect_object (self->priv->launch_environment, + "stopped", + G_CALLBACK (on_launch_environment_session_stopped), + self, 0); + g_signal_connect_object (self->priv->launch_environment, + "exited", + G_CALLBACK (on_launch_environment_session_exited), + self, 0); + g_signal_connect_object (self->priv->launch_environment, + "died", + G_CALLBACK (on_launch_environment_session_died), + self, 0); + + if (auth_file != NULL) { + g_object_set (self->priv->launch_environment, + "x11-authority-file", auth_file, + NULL); + } + + gdm_launch_environment_start (self->priv->launch_environment); + +- session = gdm_launch_environment_get_session (self->priv->launch_environment); +- g_object_set (G_OBJECT (session), +- "display-is-initial", self->priv->is_initial, +- NULL); +- + g_free (display_name); + g_free (seat_id); + g_free (hostname); + g_free (auth_file); + } + + static void + chown_initial_setup_home_dir (void) + { + GFile *dir; + GError *error; + char *gis_dir_path; + char *gis_uid_path; + char *gis_uid_contents; + struct passwd *pwe; + uid_t uid; + + if (!gdm_get_pwent_for_name (INITIAL_SETUP_USERNAME, &pwe)) { + g_warning ("Unknown user %s", INITIAL_SETUP_USERNAME); + return; + } + + gis_dir_path = g_strdup (pwe->pw_dir); + + gis_uid_path = g_build_filename (gis_dir_path, + "gnome-initial-setup-uid", + NULL); + if (!g_file_get_contents (gis_uid_path, &gis_uid_contents, NULL, NULL)) { + g_warning ("Unable to read %s", gis_uid_path); + goto out; +diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c +index d97b02b5..dffc8917 100644 +--- a/daemon/gdm-session-worker.c ++++ b/daemon/gdm-session-worker.c +@@ -134,61 +134,60 @@ struct GdmSessionWorkerPrivate + pam_handle_t *pam_handle; + + GPid child_pid; + guint child_watch_id; + + /* from Setup */ + char *service; + char *x11_display_name; + char *x11_authority_file; + char *display_device; + char *display_seat_id; + char *hostname; + char *username; + char *log_file; + char *session_id; + uid_t uid; + gid_t gid; + gboolean password_is_required; + + int cred_flags; + int login_vt; + int session_vt; + int session_tty_fd; + + char **arguments; + guint32 cancelled : 1; + guint32 timed_out : 1; + guint32 is_program_session : 1; + guint32 is_reauth_session : 1; + guint32 display_is_local : 1; +- guint32 display_is_initial : 1; + guint state_change_idle_id; + GdmSessionDisplayMode display_mode; + + char *server_address; + GDBusConnection *connection; + GdmDBusWorkerManager *manager; + + GHashTable *reauthentication_requests; + + GdmSessionAuditor *auditor; + GdmSessionSettings *user_settings; + + GDBusMethodInvocation *pending_invocation; + }; + + enum { + PROP_0, + PROP_SERVER_ADDRESS, + PROP_IS_REAUTH_SESSION, + }; + + static void gdm_session_worker_class_init (GdmSessionWorkerClass *klass); + static void gdm_session_worker_init (GdmSessionWorker *session_worker); + static void gdm_session_worker_finalize (GObject *object); + + static void gdm_session_worker_set_environment_variable (GdmSessionWorker *worker, + const char *key, + const char *value); + + static void queue_state_change (GdmSessionWorker *worker); +@@ -2057,67 +2056,63 @@ gdm_session_worker_start_session (GdmSessionWorker *worker, + g_assert (sizeof (GPid) <= sizeof (int)); + + g_debug ("GdmSessionWorker: state SESSION_STARTED"); + worker->priv->state = GDM_SESSION_WORKER_STATE_SESSION_STARTED; + + gdm_session_worker_watch_child (worker); + + out: + if (error_code != PAM_SUCCESS) { + gdm_session_worker_uninitialize_pam (worker, error_code); + return FALSE; + } + + return TRUE; + } + + static gboolean + set_up_for_new_vt (GdmSessionWorker *worker) + { + int fd; + char vt_string[256], tty_string[256]; + int session_vt = 0; + + fd = open ("/dev/tty0", O_RDWR | O_NOCTTY); + + if (fd < 0) { + g_debug ("GdmSessionWorker: couldn't open VT master: %m"); + return FALSE; + } + +- if (worker->priv->display_is_initial) { +- session_vt = atoi (GDM_INITIAL_VT); +- } else { +- if (ioctl(fd, VT_OPENQRY, &session_vt) < 0) { +- g_debug ("GdmSessionWorker: couldn't open new VT: %m"); +- goto fail; +- } ++ if (ioctl(fd, VT_OPENQRY, &session_vt) < 0) { ++ g_debug ("GdmSessionWorker: couldn't open new VT: %m"); ++ goto fail; + } + + worker->priv->session_vt = session_vt; + + close (fd); + fd = -1; + + g_assert (session_vt > 0); + + g_snprintf (vt_string, sizeof (vt_string), "%d", session_vt); + + /* Set the VTNR. This is used by logind to configure a session in + * the logind-managed case, but it doesn't hurt to set it always. + * When logind gains support for XDG_VTNR=auto, we can make the + * OPENQRY and this whole path only used by the new VT code. */ + gdm_session_worker_set_environment_variable (worker, + "XDG_VTNR", + vt_string); + + g_snprintf (tty_string, 256, "/dev/tty%d", session_vt); + worker->priv->session_tty_fd = open (tty_string, O_RDWR | O_NOCTTY); + pam_set_item (worker->priv->pam_handle, PAM_TTY, tty_string); + + return TRUE; + + fail: + close (fd); + return FALSE; + } + +@@ -2795,166 +2790,160 @@ gdm_session_worker_handle_establish_credentials (GdmDBusWorker *object, + GdmSessionWorker *worker = GDM_SESSION_WORKER (object); + validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_ACCREDITED); + + if (!worker->priv->is_reauth_session) { + worker->priv->cred_flags = PAM_ESTABLISH_CRED; + } else { + worker->priv->cred_flags = PAM_REINITIALIZE_CRED; + } + + return TRUE; + } + + static gboolean + gdm_session_worker_handle_open (GdmDBusWorker *object, + GDBusMethodInvocation *invocation) + { + GdmSessionWorker *worker = GDM_SESSION_WORKER (object); + validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_ACCOUNT_DETAILS_SAVED); + return TRUE; + } + + static gboolean + gdm_session_worker_handle_setup (GdmDBusWorker *object, + GDBusMethodInvocation *invocation, + const char *service, + const char *x11_display_name, + const char *x11_authority_file, + const char *console, + const char *seat_id, + const char *hostname, +- gboolean display_is_local, +- gboolean display_is_initial) ++ gboolean display_is_local) + { + GdmSessionWorker *worker = GDM_SESSION_WORKER (object); + validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE); + + worker->priv->service = g_strdup (service); + worker->priv->x11_display_name = g_strdup (x11_display_name); + worker->priv->x11_authority_file = g_strdup (x11_authority_file); + worker->priv->display_device = g_strdup (console); + worker->priv->display_seat_id = g_strdup (seat_id); + worker->priv->hostname = g_strdup (hostname); + worker->priv->display_is_local = display_is_local; +- worker->priv->display_is_initial = display_is_initial; + worker->priv->username = NULL; + + g_signal_connect_swapped (worker->priv->user_settings, + "notify::language-name", + G_CALLBACK (on_saved_language_name_read), + worker); + + g_signal_connect_swapped (worker->priv->user_settings, + "notify::session-name", + G_CALLBACK (on_saved_session_name_read), + worker); + return TRUE; + } + + static gboolean + gdm_session_worker_handle_setup_for_user (GdmDBusWorker *object, + GDBusMethodInvocation *invocation, + const char *service, + const char *username, + const char *x11_display_name, + const char *x11_authority_file, + const char *console, + const char *seat_id, + const char *hostname, +- gboolean display_is_local, +- gboolean display_is_initial) ++ gboolean display_is_local) + { + GdmSessionWorker *worker = GDM_SESSION_WORKER (object); + + if (!validate_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE)) + return TRUE; + + worker->priv->service = g_strdup (service); + worker->priv->x11_display_name = g_strdup (x11_display_name); + worker->priv->x11_authority_file = g_strdup (x11_authority_file); + worker->priv->display_device = g_strdup (console); + worker->priv->display_seat_id = g_strdup (seat_id); + worker->priv->hostname = g_strdup (hostname); + worker->priv->display_is_local = display_is_local; +- worker->priv->display_is_initial = display_is_initial; + worker->priv->username = g_strdup (username); + + g_signal_connect_swapped (worker->priv->user_settings, + "notify::language-name", + G_CALLBACK (on_saved_language_name_read), + worker); + + g_signal_connect_swapped (worker->priv->user_settings, + "notify::session-name", + G_CALLBACK (on_saved_session_name_read), + worker); + + /* Load settings from accounts daemon before continuing + */ + worker->priv->pending_invocation = invocation; + if (gdm_session_settings_load (worker->priv->user_settings, username)) { + queue_state_change (worker); + } else { + g_signal_connect (G_OBJECT (worker->priv->user_settings), + "notify::is-loaded", + G_CALLBACK (on_settings_is_loaded_changed), + worker); + } + + return TRUE; + } + + static gboolean + gdm_session_worker_handle_setup_for_program (GdmDBusWorker *object, + GDBusMethodInvocation *invocation, + const char *service, + const char *username, + const char *x11_display_name, + const char *x11_authority_file, + const char *console, + const char *seat_id, + const char *hostname, + gboolean display_is_local, +- gboolean display_is_initial, + const char *log_file) + { + GdmSessionWorker *worker = GDM_SESSION_WORKER (object); + validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE); + + worker->priv->service = g_strdup (service); + worker->priv->x11_display_name = g_strdup (x11_display_name); + worker->priv->x11_authority_file = g_strdup (x11_authority_file); + worker->priv->display_device = g_strdup (console); + worker->priv->display_seat_id = g_strdup (seat_id); + worker->priv->hostname = g_strdup (hostname); + worker->priv->display_is_local = display_is_local; +- worker->priv->display_is_initial = display_is_initial; + worker->priv->username = g_strdup (username); + worker->priv->log_file = g_strdup (log_file); + worker->priv->is_program_session = TRUE; + + return TRUE; + } + + static gboolean + gdm_session_worker_handle_start_program (GdmDBusWorker *object, + GDBusMethodInvocation *invocation, + const char *text) + { + GdmSessionWorker *worker = GDM_SESSION_WORKER (object); + GError *parse_error = NULL; + validate_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SESSION_STARTED); + + if (worker->priv->is_reauth_session) { + g_dbus_method_invocation_return_error (invocation, + GDM_SESSION_WORKER_ERROR, + GDM_SESSION_WORKER_ERROR_IN_REAUTH_SESSION, + "Cannot start a program while in a reauth session"); + return TRUE; + } + + g_debug ("GdmSessionWorker: start program: %s", text); + + g_clear_pointer (&worker->priv->arguments, (GDestroyNotify) g_strfreev); + if (! g_shell_parse_argv (text, NULL, &worker->priv->arguments, &parse_error)) { + g_dbus_method_invocation_take_error (invocation, parse_error); + return TRUE; +diff --git a/daemon/gdm-session-worker.xml b/daemon/gdm-session-worker.xml +index 9f6d8b35..f7d1dc2d 100644 +--- a/daemon/gdm-session-worker.xml ++++ b/daemon/gdm-session-worker.xml +@@ -5,83 +5,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +- + + + + + + + + + + +- + + + + + + + + + + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c +index e69291fb..1dfbef64 100644 +--- a/daemon/gdm-session.c ++++ b/daemon/gdm-session.c +@@ -103,74 +103,72 @@ struct _GdmSessionPrivate + GdmDBusUserVerifier *user_verifier_interface; + GdmDBusGreeter *greeter_interface; + GdmDBusRemoteGreeter *remote_greeter_interface; + GdmDBusChooser *chooser_interface; + + GList *pending_worker_connections; + GList *outside_connections; + + GPid session_pid; + + /* object lifetime scope */ + char *session_type; + char *display_name; + char *display_hostname; + char *display_device; + char *display_seat_id; + char *display_x11_authority_file; + gboolean display_is_local; + + GdmSessionVerificationMode verification_mode; + + uid_t allowed_user; + + char *fallback_session_name; + + GDBusServer *worker_server; + GDBusServer *outside_server; + GHashTable *environment; + + guint32 is_program_session : 1; +- guint32 display_is_initial : 1; + #ifdef ENABLE_WAYLAND_SUPPORT + guint32 ignore_wayland : 1; + #endif + }; + + enum { + PROP_0, + PROP_VERIFICATION_MODE, + PROP_ALLOWED_USER, + PROP_DISPLAY_NAME, + PROP_DISPLAY_HOSTNAME, + PROP_DISPLAY_IS_LOCAL, +- PROP_DISPLAY_IS_INITIAL, + PROP_SESSION_TYPE, + PROP_DISPLAY_DEVICE, + PROP_DISPLAY_SEAT_ID, + PROP_DISPLAY_X11_AUTHORITY_FILE, + PROP_USER_X11_AUTHORITY_FILE, + PROP_CONVERSATION_ENVIRONMENT, + #ifdef ENABLE_WAYLAND_SUPPORT + PROP_IGNORE_WAYLAND, + #endif + }; + + enum { + CONVERSATION_STARTED = 0, + CONVERSATION_STOPPED, + SETUP_COMPLETE, + CANCELLED, + HOSTNAME_SELECTED, + CLIENT_REJECTED, + CLIENT_CONNECTED, + CLIENT_DISCONNECTED, + CLIENT_READY_FOR_SESSION_TO_START, + DISCONNECTED, + AUTHENTICATION_FAILED, + VERIFICATION_COMPLETE, + SESSION_OPENED, + SESSION_STARTED, + SESSION_START_FAILED, + SESSION_EXITED, + SESSION_DIED, + REAUTHENTICATION_STARTED, +@@ -2118,61 +2116,60 @@ send_setup (GdmSession *self, + display_hostname = ""; + } + if (self->priv->display_device != NULL) { + display_device = self->priv->display_device; + } else { + display_device = ""; + } + if (self->priv->display_seat_id != NULL) { + display_seat_id = self->priv->display_seat_id; + } else { + display_seat_id = ""; + } + if (self->priv->display_x11_authority_file != NULL) { + display_x11_authority_file = self->priv->display_x11_authority_file; + } else { + display_x11_authority_file = ""; + } + + g_debug ("GdmSession: Beginning setup"); + + conversation = find_conversation_by_name (self, service_name); + if (conversation != NULL) { + gdm_dbus_worker_call_setup (conversation->worker_proxy, + service_name, + display_name, + display_x11_authority_file, + display_device, + display_seat_id, + display_hostname, + self->priv->display_is_local, +- self->priv->display_is_initial, + conversation->worker_cancellable, + (GAsyncReadyCallback) on_setup_complete_cb, + conversation); + } + } + + static void + send_setup_for_user (GdmSession *self, + const char *service_name) + { + const char *display_name; + const char *display_device; + const char *display_seat_id; + const char *display_hostname; + const char *display_x11_authority_file; + const char *selected_user; + GdmSessionConversation *conversation; + + g_assert (service_name != NULL); + + conversation = find_conversation_by_name (self, service_name); + + if (self->priv->display_name != NULL) { + display_name = self->priv->display_name; + } else { + display_name = ""; + } + if (self->priv->display_hostname != NULL) { + display_hostname = self->priv->display_hostname; + } else { +@@ -2184,122 +2181,120 @@ send_setup_for_user (GdmSession *self, + display_device = ""; + } + if (self->priv->display_seat_id != NULL) { + display_seat_id = self->priv->display_seat_id; + } else { + display_seat_id = ""; + } + if (self->priv->display_x11_authority_file != NULL) { + display_x11_authority_file = self->priv->display_x11_authority_file; + } else { + display_x11_authority_file = ""; + } + if (self->priv->selected_user != NULL) { + selected_user = self->priv->selected_user; + } else { + selected_user = ""; + } + + g_debug ("GdmSession: Beginning setup for user %s", self->priv->selected_user); + + if (conversation != NULL) { + gdm_dbus_worker_call_setup_for_user (conversation->worker_proxy, + service_name, + selected_user, + display_name, + display_x11_authority_file, + display_device, + display_seat_id, + display_hostname, + self->priv->display_is_local, +- self->priv->display_is_initial, + conversation->worker_cancellable, + (GAsyncReadyCallback) on_setup_complete_cb, + conversation); + } + } + + static void + send_setup_for_program (GdmSession *self, + const char *service_name, + const char *username, + const char *log_file) + { + const char *display_name; + const char *display_device; + const char *display_seat_id; + const char *display_hostname; + const char *display_x11_authority_file; + GdmSessionConversation *conversation; + + g_assert (service_name != NULL); + + if (self->priv->display_name != NULL) { + display_name = self->priv->display_name; + } else { + display_name = ""; + } + if (self->priv->display_hostname != NULL) { + display_hostname = self->priv->display_hostname; + } else { + display_hostname = ""; + } + if (self->priv->display_device != NULL) { + display_device = self->priv->display_device; + } else { + display_device = ""; + } + if (self->priv->display_seat_id != NULL) { + display_seat_id = self->priv->display_seat_id; + } else { + display_seat_id = ""; + } + if (self->priv->display_x11_authority_file != NULL) { + display_x11_authority_file = self->priv->display_x11_authority_file; + } else { + display_x11_authority_file = ""; + } + + g_debug ("GdmSession: Beginning setup for session for program using PAM service %s", service_name); + + conversation = find_conversation_by_name (self, service_name); + if (conversation != NULL) { + gdm_dbus_worker_call_setup_for_program (conversation->worker_proxy, + service_name, + username, + display_name, + display_x11_authority_file, + display_device, + display_seat_id, + display_hostname, + self->priv->display_is_local, +- self->priv->display_is_initial, + log_file, + conversation->worker_cancellable, + (GAsyncReadyCallback) on_setup_complete_cb, + conversation); + } + } + + void + gdm_session_setup (GdmSession *self, + const char *service_name) + { + + g_return_if_fail (GDM_IS_SESSION (self)); + + send_setup (self, service_name); + gdm_session_defaults_changed (self); + } + + + void + gdm_session_setup_for_user (GdmSession *self, + const char *service_name, + const char *username) + { + + g_return_if_fail (GDM_IS_SESSION (self)); + g_return_if_fail (username != NULL); + + gdm_session_select_user (self, username); + +@@ -3217,67 +3212,60 @@ set_display_seat_id (GdmSession *self, + const char *name) + { + g_free (self->priv->display_seat_id); + self->priv->display_seat_id = g_strdup (name); + } + + static void + set_user_x11_authority_file (GdmSession *self, + const char *name) + { + g_free (self->priv->user_x11_authority_file); + self->priv->user_x11_authority_file = g_strdup (name); + } + + static void + set_display_x11_authority_file (GdmSession *self, + const char *name) + { + g_free (self->priv->display_x11_authority_file); + self->priv->display_x11_authority_file = g_strdup (name); + } + + static void + set_display_is_local (GdmSession *self, + gboolean is_local) + { + self->priv->display_is_local = is_local; + } + + static void +-set_display_is_initial (GdmSession *self, +- gboolean is_initial) +-{ +- self->priv->display_is_initial = is_initial; +-} +- +-static void + set_verification_mode (GdmSession *self, + GdmSessionVerificationMode verification_mode) + { + self->priv->verification_mode = verification_mode; + } + + static void + set_allowed_user (GdmSession *self, + uid_t allowed_user) + { + self->priv->allowed_user = allowed_user; + } + + static void + set_conversation_environment (GdmSession *self, + char **environment) + { + g_strfreev (self->priv->conversation_environment); + self->priv->conversation_environment = g_strdupv (environment); + } + + static void + set_session_type (GdmSession *self, + const char *session_type) + { + + if (g_strcmp0 (self->priv->session_type, session_type) != 0) { + g_debug ("GdmSession: setting session to type '%s'", session_type? session_type : ""); + g_free (self->priv->session_type); + self->priv->session_type = g_strdup (session_type); +@@ -3292,121 +3280,115 @@ gdm_session_set_property (GObject *object, + { + GdmSession *self; + + self = GDM_SESSION (object); + + switch (prop_id) { + case PROP_SESSION_TYPE: + set_session_type (self, g_value_get_string (value)); + break; + case PROP_DISPLAY_NAME: + set_display_name (self, g_value_get_string (value)); + break; + case PROP_DISPLAY_HOSTNAME: + set_display_hostname (self, g_value_get_string (value)); + break; + case PROP_DISPLAY_DEVICE: + set_display_device (self, g_value_get_string (value)); + break; + case PROP_DISPLAY_SEAT_ID: + set_display_seat_id (self, g_value_get_string (value)); + break; + case PROP_USER_X11_AUTHORITY_FILE: + set_user_x11_authority_file (self, g_value_get_string (value)); + break; + case PROP_DISPLAY_X11_AUTHORITY_FILE: + set_display_x11_authority_file (self, g_value_get_string (value)); + break; + case PROP_DISPLAY_IS_LOCAL: + set_display_is_local (self, g_value_get_boolean (value)); + break; +- case PROP_DISPLAY_IS_INITIAL: +- set_display_is_initial (self, g_value_get_boolean (value)); +- break; + case PROP_VERIFICATION_MODE: + set_verification_mode (self, g_value_get_enum (value)); + break; + case PROP_ALLOWED_USER: + set_allowed_user (self, g_value_get_uint (value)); + break; + case PROP_CONVERSATION_ENVIRONMENT: + set_conversation_environment (self, g_value_get_pointer (value)); + break; + #ifdef ENABLE_WAYLAND_SUPPORT + case PROP_IGNORE_WAYLAND: + gdm_session_set_ignore_wayland (self, g_value_get_boolean (value)); + break; + #endif + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } + } + + static void + gdm_session_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) + { + GdmSession *self; + + self = GDM_SESSION (object); + + switch (prop_id) { + case PROP_SESSION_TYPE: + g_value_set_string (value, self->priv->session_type); + break; + case PROP_DISPLAY_NAME: + g_value_set_string (value, self->priv->display_name); + break; + case PROP_DISPLAY_HOSTNAME: + g_value_set_string (value, self->priv->display_hostname); + break; + case PROP_DISPLAY_DEVICE: + g_value_set_string (value, self->priv->display_device); + break; + case PROP_DISPLAY_SEAT_ID: + g_value_set_string (value, self->priv->display_seat_id); + break; + case PROP_USER_X11_AUTHORITY_FILE: + g_value_set_string (value, self->priv->user_x11_authority_file); + break; + case PROP_DISPLAY_X11_AUTHORITY_FILE: + g_value_set_string (value, self->priv->display_x11_authority_file); + break; + case PROP_DISPLAY_IS_LOCAL: + g_value_set_boolean (value, self->priv->display_is_local); + break; +- case PROP_DISPLAY_IS_INITIAL: +- g_value_set_boolean (value, self->priv->display_is_initial); +- break; + case PROP_VERIFICATION_MODE: + g_value_set_enum (value, self->priv->verification_mode); + break; + case PROP_ALLOWED_USER: + g_value_set_uint (value, self->priv->allowed_user); + break; + case PROP_CONVERSATION_ENVIRONMENT: + g_value_set_pointer (value, self->priv->environment); + break; + #ifdef ENABLE_WAYLAND_SUPPORT + case PROP_IGNORE_WAYLAND: + g_value_set_boolean (value, self->priv->ignore_wayland); + break; + #endif + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } + } + + static void + gdm_session_dispose (GObject *object) + { + GdmSession *self; + + self = GDM_SESSION (object); + + g_debug ("GdmSession: Disposing session"); + + gdm_session_close (self); +@@ -3749,67 +3731,60 @@ gdm_session_class_init (GdmSessionClass *session_class) + + g_object_class_install_property (object_class, + PROP_SESSION_TYPE, + g_param_spec_string ("session-type", + NULL, + NULL, + NULL, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_DISPLAY_NAME, + g_param_spec_string ("display-name", + "display name", + "display name", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (object_class, + PROP_DISPLAY_HOSTNAME, + g_param_spec_string ("display-hostname", + "display hostname", + "display hostname", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, + PROP_DISPLAY_IS_LOCAL, + g_param_spec_boolean ("display-is-local", + "display is local", + "display is local", + TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, +- PROP_DISPLAY_IS_INITIAL, +- g_param_spec_boolean ("display-is-initial", +- "display is initial", +- "display is initial", +- FALSE, +- G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); +- g_object_class_install_property (object_class, + PROP_DISPLAY_X11_AUTHORITY_FILE, + g_param_spec_string ("display-x11-authority-file", + "display x11 authority file", + "display x11 authority file", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + /* not construct only */ + g_object_class_install_property (object_class, + PROP_USER_X11_AUTHORITY_FILE, + g_param_spec_string ("user-x11-authority-file", + "", + "", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (object_class, + PROP_DISPLAY_DEVICE, + g_param_spec_string ("display-device", + "display device", + "display device", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property (object_class, + PROP_DISPLAY_SEAT_ID, + g_param_spec_string ("display-seat-id", + "display seat id", + "display seat id", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + +-- +2.12.2 + diff --git a/SOURCES/0001-gdm.conf-custom.in-strip-out-reference-to-wayland.patch b/SOURCES/0001-gdm.conf-custom.in-strip-out-reference-to-wayland.patch new file mode 100644 index 0000000..901c86f --- /dev/null +++ b/SOURCES/0001-gdm.conf-custom.in-strip-out-reference-to-wayland.patch @@ -0,0 +1,33 @@ +From 539b8a08787f86586eabe8fd502ec2faff5a74d9 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Thu, 16 Mar 2017 10:52:41 -0400 +Subject: [PATCH] gdm.conf-custom.in: strip out reference to wayland + +--- + data/gdm.conf-custom.in | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/data/gdm.conf-custom.in b/data/gdm.conf-custom.in +index 67ebca39..73d0b5f4 100644 +--- a/data/gdm.conf-custom.in ++++ b/data/gdm.conf-custom.in +@@ -1,16 +1,14 @@ + # GDM configuration storage + + [daemon] +-# Uncoment the line below to force the login screen to use Xorg +-#WaylandEnable=false + + [security] + + [xdmcp] + + [chooser] + + [debug] + # Uncomment the line below to turn on debugging + #Enable=true + +-- +2.11.1 + diff --git a/SOURCES/0001-legacy-display-ensure-X-server-is-dead-when-respawni.patch b/SOURCES/0001-legacy-display-ensure-X-server-is-dead-when-respawni.patch new file mode 100644 index 0000000..c519086 --- /dev/null +++ b/SOURCES/0001-legacy-display-ensure-X-server-is-dead-when-respawni.patch @@ -0,0 +1,96 @@ +From 6f62469760cfe8b4c798135bba1d9ccaa7f4b0d2 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 12 Jul 2017 10:26:37 -0400 +Subject: [PATCH] legacy-display: ensure X server is dead when respawning + +If the user logs out we may detect the session dying before +we detect the X server dying. If that happens, then we +currently don't wait for the X server to exit before starting +a new X server. + +This commit makes sure to explicitly kill the X server and wait +for its death before proceeding. +--- + daemon/gdm-legacy-display.c | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/daemon/gdm-legacy-display.c b/daemon/gdm-legacy-display.c +index 9c999232..46990ccc 100644 +--- a/daemon/gdm-legacy-display.c ++++ b/daemon/gdm-legacy-display.c +@@ -236,51 +236,72 @@ gdm_legacy_display_manage (GdmDisplay *display) + "server (your graphical environment) " + "due to an internal error. " + "Please contact your system administrator " + "or check your syslog to diagnose. " + "In the meantime this display will be " + "disabled. Please restart GDM when " + "the problem is corrected.")); + gdm_display_unmanage (GDM_DISPLAY (self)); + } + + g_debug ("GdmDisplay: Started X server"); + + } + + static void + gdm_legacy_display_class_init (GdmLegacyDisplayClass *klass) + { + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass); + + object_class->constructor = gdm_legacy_display_constructor; + object_class->finalize = gdm_legacy_display_finalize; + + display_class->prepare = gdm_legacy_display_prepare; + display_class->manage = gdm_legacy_display_manage; + + g_type_class_add_private (klass, sizeof (GdmLegacyDisplayPrivate)); + } + + static void ++on_display_status_changed (GdmLegacyDisplay *self) ++{ ++ int status; ++ ++ status = gdm_display_get_status (self); ++ ++ switch (status) { ++ case GDM_DISPLAY_UNMANAGED: ++ if (self->priv->server != NULL) ++ gdm_server_stop (self->priv->server); ++ break; ++ default: ++ break; ++ } ++} ++ ++static void + gdm_legacy_display_init (GdmLegacyDisplay *legacy_display) + { + + legacy_display->priv = GDM_LEGACY_DISPLAY_GET_PRIVATE (legacy_display); ++ ++ g_signal_connect (legacy_display, "notify::status", ++ G_CALLBACK (on_display_status_changed), ++ NULL); + } + + GdmDisplay * + gdm_legacy_display_new (int display_number) + { + GObject *object; + char *x11_display; + + x11_display = g_strdup_printf (":%d", display_number); + object = g_object_new (GDM_TYPE_LEGACY_DISPLAY, + "x11-display-number", display_number, + "x11-display-name", x11_display, + NULL); + g_free (x11_display); + + return GDM_DISPLAY (object); + } +-- +2.13.0 + diff --git a/SOURCES/0001-local-display-factory-add-missing-comma-to-fix-user-.patch b/SOURCES/0001-local-display-factory-add-missing-comma-to-fix-user-.patch new file mode 100644 index 0000000..6a59dca --- /dev/null +++ b/SOURCES/0001-local-display-factory-add-missing-comma-to-fix-user-.patch @@ -0,0 +1,87 @@ +From 4b07f66e36bb00d022494c9118e4dc12921bce6d Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 3 Apr 2017 13:25:58 -0400 +Subject: [PATCH] local-display-factory: add missing comma to fix user + switching + +commit 4b47633b36a22195e7976a8e597862eff695ca86 refactored some code +and inadvertently dropped an important comma, which broke user +switching. + +This commit reintroduces the comma. + +https://bugzilla.gnome.org/show_bug.cgi?id=780879 +--- + daemon/gdm-local-display-factory.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c +index 70987c71..7a4643d0 100644 +--- a/daemon/gdm-local-display-factory.c ++++ b/daemon/gdm-local-display-factory.c +@@ -192,61 +192,61 @@ store_display (GdmLocalDisplayFactory *factory, + /org/gnome/DisplayManager/Manager \ + org.gnome.DisplayManager.Manager.GetDisplays + */ + gboolean + gdm_local_display_factory_create_transient_display (GdmLocalDisplayFactory *factory, + char **id, + GError **error) + { + gboolean ret; + GdmDisplay *display = NULL; + + g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); + + ret = FALSE; + + g_debug ("GdmLocalDisplayFactory: Creating transient display"); + + #ifdef ENABLE_USER_DISPLAY_SERVER + display = gdm_local_display_new (); + #else + if (display == NULL) { + guint32 num; + + num = take_next_display_number (factory); + + display = gdm_legacy_display_new (num); + } + #endif + + g_object_set (display, +- "seat-id", "seat0" ++ "seat-id", "seat0", + "allow-timed-login", FALSE, + NULL); + + store_display (factory, display); + + if (! gdm_display_manage (display)) { + display = NULL; + goto out; + } + + if (! gdm_display_get_id (display, id, NULL)) { + display = NULL; + goto out; + } + + ret = TRUE; + out: + /* ref either held by store or not at all */ + g_object_unref (display); + + return ret; + } + + static void + on_display_status_changed (GdmDisplay *display, + GParamSpec *arg1, + GdmLocalDisplayFactory *factory) + { + int status; + GdmDisplayStore *store; +-- +2.12.0 + diff --git a/SOURCES/0001-manager-be-more-robust-against-autologin-having-an-i.patch b/SOURCES/0001-manager-be-more-robust-against-autologin-having-an-i.patch new file mode 100644 index 0000000..aeb46c4 --- /dev/null +++ b/SOURCES/0001-manager-be-more-robust-against-autologin-having-an-i.patch @@ -0,0 +1,430 @@ +From 5afc4cd548f3ae8db9fbaab32fe2189efff37677 Mon Sep 17 00:00:00 2001 +From: Michael Catanzaro +Date: Tue, 12 Jan 2016 21:42:15 -0600 +Subject: [PATCH 01/13] manager: be more robust against autologin having an + invalid user + +If the configured autologin user does not exist, fall back to a +greeter session. + +https://bugzilla.gnome.org/show_bug.cgi?id=695250 +--- + configure.ac | 2 +- + daemon/gdm-manager.c | 115 +++++++++++++++++++++++++++++++++++++-------------- + 2 files changed, 86 insertions(+), 31 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 6613097b..119297c5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -36,61 +36,61 @@ AC_SUBST(LT_AGE) + + AC_HEADER_STDC + + AC_SUBST(VERSION) + + AC_CONFIG_HEADERS(config.h) + AC_CONFIG_MACRO_DIR([m4]) + + # Documentation + enable_documentation=no + m4_ifdef([YELP_HELP_INIT],[ + YELP_HELP_INIT + enable_documentation=yes + ]) + AM_CONDITIONAL(ENABLE_DOCUMENTATION, test x$enable_documentation = xyes) + + # i18n stuff + IT_PROG_INTLTOOL([0.40.0]) + + GETTEXT_PACKAGE=gdm + AC_SUBST(GETTEXT_PACKAGE) + AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext package]) + + dnl --------------------------------------------------------------------------- + dnl - Dependencies + dnl --------------------------------------------------------------------------- + + GLIB_REQUIRED_VERSION=2.36.0 + GTK_REQUIRED_VERSION=2.91.1 + LIBCANBERRA_GTK_REQUIRED_VERSION=0.4 +-ACCOUNTS_SERVICE_REQUIRED_VERSION=0.6.12 ++ACCOUNTS_SERVICE_REQUIRED_VERSION=0.6.35 + + EXTRA_COMPILE_WARNINGS(yes) + + PKG_CHECK_MODULES(GTHREAD, gthread-2.0) + AC_SUBST(GTHREAD_CFLAGS) + AC_SUBST(GTHREAD_LIBS) + + PKG_CHECK_MODULES(COMMON, + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + gio-unix-2.0 >= $GLIB_REQUIRED_VERSION + ) + AC_SUBST(COMMON_CFLAGS) + AC_SUBST(COMMON_LIBS) + + PKG_CHECK_MODULES(DAEMON, + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + gio-unix-2.0 >= $GLIB_REQUIRED_VERSION + accountsservice >= $ACCOUNTS_SERVICE_REQUIRED_VERSION + xcb + ) + AC_SUBST(DAEMON_CFLAGS) + AC_SUBST(DAEMON_LIBS) + + GLIB_GSETTINGS + + PKG_CHECK_MODULES(XLIB, x11 xau, , + [AC_PATH_XTRA + if test "x$no_x" = xyes; then +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index 35a7a0fe..e78228b4 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -7,60 +7,62 @@ + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + + #include "config.h" + + #include + #include + #include + #include + #include + #include + #include + #include + + #include + #include + #include + #include + ++#include ++ + #include + + #include "gdm-common.h" + + #include "gdm-dbus-util.h" + #include "gdm-manager.h" + #include "gdm-manager-glue.h" + #include "gdm-display-store.h" + #include "gdm-display-factory.h" + #include "gdm-local-display.h" + #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)) + + #define GDM_DBUS_PATH "/org/gnome/DisplayManager" + #define GDM_MANAGER_PATH GDM_DBUS_PATH "/Manager" + #define GDM_MANAGER_DISPLAYS_PATH GDM_DBUS_PATH "/Displays" + + #define INITIAL_SETUP_USERNAME "gnome-initial-setup" + + typedef struct + { + GdmManager *manager; + GdmSession *session; + char *service_name; +@@ -1227,79 +1229,60 @@ get_automatic_login_details (GdmManager *manager, + 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; + + out: + if (enabled) { + g_debug ("GdmDisplay: Got automatic login details for display: %d %s", + enabled, + username); + } else { + g_debug ("GdmDisplay: Got automatic login details for display: 0"); + } + + if (usernamep != NULL) { + *usernamep = username; + } else { + g_free (username); + } + + return enabled; + } + +-static gboolean +-display_should_autologin (GdmManager *manager, +- GdmDisplay *display) +-{ +- gboolean enabled = FALSE; +- +- if (manager->priv->ran_once) { +- return FALSE; +- } +- +- if (!display_is_on_seat0 (display)) { +- return FALSE; +- } +- +- enabled = get_automatic_login_details (manager, NULL); +- +- return enabled; +-} +- + static void + maybe_start_pending_initial_login (GdmManager *manager, + GdmDisplay *greeter_display) + { + StartUserSessionOperation *operation; + char *greeter_seat_id = NULL; + char *user_session_seat_id = NULL; + + /* There may be a user session waiting to be started. + * This would happen if we couldn't start it earlier because + * the login screen X server was coming up and two X servers + * can't be started on the same seat at the same time. + */ + + if (manager->priv->initial_login_operation == NULL) { + return; + } + + operation = manager->priv->initial_login_operation; + + g_object_get (G_OBJECT (greeter_display), + "seat-id", &greeter_seat_id, + NULL); + g_object_get (G_OBJECT (operation->session), + "display-seat-id", &user_session_seat_id, + NULL); + + if (g_strcmp0 (greeter_seat_id, user_session_seat_id) == 0) { + start_user_session (manager, operation); + manager->priv->initial_login_operation = NULL; +@@ -1347,114 +1330,186 @@ set_up_automatic_login_session (GdmManager *manager, + g_object_set (G_OBJECT (session), + "display-is-initial", is_initial, + NULL); + + g_debug ("GdmManager: Starting automatic login conversation"); + gdm_session_start_conversation (session, "gdm-autologin"); + } + + static void + set_up_greeter_session (GdmManager *manager, + GdmDisplay *display) + { + const char *allowed_user; + struct passwd *passwd_entry; + + allowed_user = get_username_for_greeter_display (manager, display); + + if (!gdm_get_pwent_for_name (allowed_user, &passwd_entry)) { + g_warning ("GdmManager: couldn't look up username %s", + allowed_user); + gdm_display_unmanage (display); + gdm_display_finish (display); + return; + } + + create_embryonic_user_session_for_display (manager, display, passwd_entry->pw_uid); + gdm_display_start_greeter_session (display); + } + + static void ++set_up_automatic_login_session_if_user_exists (GdmManager *manager, ++ GdmDisplay *display, ++ ActUser *user) ++{ ++ if (act_user_is_nonexistent (user)) ++ set_up_greeter_session (manager, display); ++ else ++ set_up_automatic_login_session (manager, display); ++} ++ ++typedef struct { ++ GdmManager *manager; ++ GdmDisplay *display; ++ char *username; ++} UsernameLookupOperation; ++ ++static void ++destroy_username_lookup_operation (UsernameLookupOperation *operation) ++{ ++ g_object_unref (operation->manager); ++ g_object_unref (operation->display); ++ g_free (operation->username); ++ g_free (operation); ++} ++ ++static void ++on_user_is_loaded_changed (ActUser *user, ++ GParamSpec *pspec, ++ UsernameLookupOperation *operation) ++{ ++ if (act_user_is_loaded (user)) { ++ set_up_automatic_login_session_if_user_exists (operation->manager, operation->display, user); ++ g_signal_handlers_disconnect_by_func (G_OBJECT (user), ++ G_CALLBACK (on_user_is_loaded_changed), ++ operation); ++ destroy_username_lookup_operation (operation); ++ } ++} ++ ++static void ++set_up_session (GdmManager *manager, ++ GdmDisplay *display) ++{ ++ ActUserManager *user_manager; ++ ActUser *user; ++ gboolean loaded; ++ gboolean autologin_enabled = FALSE; ++ char *username = NULL; ++ ++ if (!manager->priv->ran_once && display_is_on_seat0 (display)) ++ autologin_enabled = get_automatic_login_details (manager, &username); ++ ++ if (!autologin_enabled) { ++ set_up_greeter_session (manager, display); ++ g_free (username); ++ return; ++ } ++ ++ /* Check whether the user really exists before committing to autologin. */ ++ user_manager = act_user_manager_get_default (); ++ user = act_user_manager_get_user (user_manager, username); ++ g_object_get (user_manager, "is-loaded", &loaded, NULL); ++ ++ if (loaded) { ++ set_up_automatic_login_session_if_user_exists (manager, display, user); ++ } else { ++ UsernameLookupOperation *operation; ++ ++ operation = g_new (UsernameLookupOperation, 1); ++ operation->manager = g_object_ref (manager); ++ operation->display = g_object_ref (display); ++ operation->username = username; ++ ++ g_signal_connect (user, ++ "notify::is-loaded", ++ G_CALLBACK (on_user_is_loaded_changed), ++ operation); ++ } ++} ++ ++static void + greeter_display_started (GdmManager *manager, + GdmDisplay *display) + { + if (manager->priv->ran_once) { + return; + } + + maybe_start_pending_initial_login (manager, display); + + manager->priv->ran_once = TRUE; + } + + static void + on_display_status_changed (GdmDisplay *display, + GParamSpec *arg1, + GdmManager *manager) + { + int status; + int display_number = -1; + #ifdef WITH_PLYMOUTH + gboolean display_is_local = FALSE; + gboolean quit_plymouth = FALSE; + + g_object_get (display, + "is-local", &display_is_local, + NULL); + quit_plymouth = display_is_local && manager->priv->plymouth_is_running; + #endif + + g_object_get (display, "x11-display-number", &display_number, NULL); + + status = gdm_display_get_status (display); + + switch (status) { + case GDM_DISPLAY_PREPARED: + case GDM_DISPLAY_MANAGED: + if ((display_number == -1 && status == GDM_DISPLAY_PREPARED) || + (display_number != -1 && status == GDM_DISPLAY_MANAGED)) { + char *session_class; + + g_object_get (display, + "session-class", &session_class, + NULL); +- if (g_strcmp0 (session_class, "greeter") == 0) { +- gboolean will_autologin; +- +- will_autologin = display_should_autologin (manager, display); +- +- if (will_autologin) { +- set_up_automatic_login_session (manager, display); +- } else { +- set_up_greeter_session (manager, display); +- } +- } ++ if (g_strcmp0 (session_class, "greeter") == 0) ++ set_up_session (manager, display); + g_free (session_class); + } + + if (status == GDM_DISPLAY_MANAGED) { + greeter_display_started (manager, display); + } + break; + case GDM_DISPLAY_FAILED: + case GDM_DISPLAY_UNMANAGED: + case GDM_DISPLAY_FINISHED: + #ifdef WITH_PLYMOUTH + if (quit_plymouth) { + plymouth_quit_without_transition (); + manager->priv->plymouth_is_running = FALSE; + } + #endif + + maybe_start_pending_initial_login (manager, display); + break; + default: + break; + } + + } + + static void + on_display_removed (GdmDisplayStore *display_store, + const char *id, + GdmManager *manager) + { +-- +2.12.0 + diff --git a/SOURCES/0001-manager-fix-dangling-pointer-free.patch b/SOURCES/0001-manager-fix-dangling-pointer-free.patch new file mode 100644 index 0000000..30d6ac7 --- /dev/null +++ b/SOURCES/0001-manager-fix-dangling-pointer-free.patch @@ -0,0 +1,89 @@ +From 0317fe746acc1f14bcb64d740de813f9ca8f4e70 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 23 Aug 2017 09:26:11 -0400 +Subject: [PATCH] manager: fix dangling pointer free + +When reauthenticating, we can crash if no login screen +is running on the seat (for instance, when building +with --disable-user-display-server, and not user +switching). The crash is due to a dangling +pointer. + +This commit fixes that. + +https://bugzilla.gnome.org/show_bug.cgi?id=786656 +--- + daemon/gdm-manager.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index 3eef745f..f001a36e 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -2003,62 +2003,62 @@ on_user_session_died (GdmSession *session, + static char * + get_display_device (GdmManager *manager, + GdmDisplay *display) + { + /* systemd finds the display device out on its own based on the display */ + return NULL; + } + + static void + on_session_reauthenticated (GdmSession *session, + const char *service_name, + GdmManager *manager) + { + gboolean fail_if_already_switched = FALSE; + + if (gdm_session_get_display_mode (session) == GDM_SESSION_DISPLAY_MODE_REUSE_VT) { + const char *seat_id; + char *session_id; + + seat_id = gdm_session_get_display_seat_id (session); + if (get_login_window_session_id (seat_id, &session_id)) { + GdmDisplay *display = gdm_display_store_find (manager->priv->display_store, + lookup_by_session_id, + (gpointer) session_id); + + if (display != NULL) { + gdm_display_stop_greeter_session (display); + gdm_display_unmanage (display); + gdm_display_finish (display); + } ++ g_free (session_id); + } +- g_free (session_id); + } + + /* There should already be a session running, so jump to its + * VT. In the event we're already on the right VT, (i.e. user + * used an unlock screen instead of a user switched login screen), + * then silently succeed and unlock the session. + */ + switch_to_compatible_user_session (manager, session, fail_if_already_switched); + } + + static void + on_session_client_ready_for_session_to_start (GdmSession *session, + const char *service_name, + gboolean client_is_ready, + GdmManager *manager) + { + gboolean waiting_to_start_user_session; + + if (client_is_ready) { + g_debug ("GdmManager: Will start session when ready"); + } else { + g_debug ("GdmManager: Will start session when ready and told"); + } + + waiting_to_start_user_session = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (session), + "waiting-to-start")); + + g_object_set_data (G_OBJECT (session), + "start-when-ready", + GINT_TO_POINTER (client_is_ready)); +-- +2.14.3 + diff --git a/SOURCES/0001-manager-make-sure-we-end-up-on-a-login-screen.patch b/SOURCES/0001-manager-make-sure-we-end-up-on-a-login-screen.patch new file mode 100644 index 0000000..bd03bdb --- /dev/null +++ b/SOURCES/0001-manager-make-sure-we-end-up-on-a-login-screen.patch @@ -0,0 +1,169 @@ +From 73ebe0f786241e262ebf4358cc5638ffcb35f8a1 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Tue, 4 Apr 2017 17:07:04 -0400 +Subject: [PATCH 1/2] manager: make sure we end up on a login screen + +If we're running in legacy mode where VT1 is not necessarily a login +screen, then we can end up in a situation where logging out leaves us +sitting on the wrong vt. + +1) log in to user 1 on vt 1 +2) switch user to login screen on vt 2 and log in as user 2 on vt 2 +3) switch user to login screen on vt 3 and unlock user 1 back on vt 1 +4) log out of user 1 on vt 1 +5) now sitting at blank vt 1 + +This commit makes sure in that case we jump to a login screen +--- + daemon/gdm-manager.c | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 128 insertions(+) + +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index 373778d..6ffb842 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -1312,6 +1312,133 @@ maybe_start_pending_initial_login (GdmManager *manager, + g_free (user_session_seat_id); + } + ++static gboolean ++get_login_window_session_id (const char *seat_id, ++ char **session_id) ++{ ++ gboolean ret; ++ int res, i; ++ char **sessions; ++ char *service_id; ++ char *service_class; ++ char *state; ++ ++ res = sd_seat_get_sessions (seat_id, &sessions, NULL, NULL); ++ if (res < 0) { ++ g_debug ("Failed to determine sessions: %s", strerror (-res)); ++ return FALSE; ++ } ++ ++ if (sessions == NULL || sessions[0] == NULL) { ++ *session_id = NULL; ++ ret = TRUE; ++ goto out; ++ } ++ ++ for (i = 0; sessions[i]; i ++) { ++ ++ res = sd_session_get_class (sessions[i], &service_class); ++ if (res < 0) { ++ g_debug ("failed to determine class of session %s: %s", sessions[i], strerror (-res)); ++ ret = FALSE; ++ goto out; ++ } ++ ++ if (strcmp (service_class, "greeter") != 0) { ++ free (service_class); ++ continue; ++ } ++ ++ free (service_class); ++ ++ ret = sd_session_get_state (sessions[i], &state); ++ if (ret < 0) { ++ g_debug ("failed to determine state of session %s: %s", sessions[i], strerror (-res)); ++ ret = FALSE; ++ goto out; ++ } ++ ++ if (g_strcmp0 (state, "closing") == 0) { ++ free (state); ++ continue; ++ } ++ free (state); ++ ++ res = sd_session_get_service (sessions[i], &service_id); ++ if (res < 0) { ++ g_debug ("failed to determine service of session %s: %s", sessions[i], strerror (-res)); ++ ret = FALSE; ++ goto out; ++ } ++ ++ if (strcmp (service_id, "gdm-launch-environment") == 0) { ++ *session_id = g_strdup (sessions[i]); ++ ret = TRUE; ++ ++ free (service_id); ++ goto out; ++ } ++ ++ free (service_id); ++ } ++ ++ *session_id = NULL; ++ ret = TRUE; ++ ++out: ++ if (sessions) { ++ for (i = 0; sessions[i]; i ++) { ++ free (sessions[i]); ++ } ++ ++ free (sessions); ++ } ++ ++ return ret; ++} ++ ++static void ++activate_login_window_session_on_seat (GdmManager *self, ++ const char *seat_id) ++{ ++ char *session_id; ++ ++ if (!get_login_window_session_id (seat_id, &session_id)) { ++ return; ++ } ++ ++ activate_session_id (self, seat_id, session_id); ++} ++ ++static void ++maybe_activate_other_session (GdmManager *self, ++ GdmDisplay *old_display) ++{ ++ char *seat_id = NULL; ++ char *session_id; ++ int ret; ++ ++ g_object_get (G_OBJECT (old_display), ++ "seat-id", &seat_id, ++ NULL); ++ ++ ret = sd_seat_get_active (seat_id, &session_id, NULL); ++ ++ if (ret == 0) { ++ GdmDisplay *display; ++ ++ display = gdm_display_store_find (self->priv->display_store, ++ lookup_by_session_id, ++ (gpointer) session_id); ++ ++ if (display == NULL) { ++ activate_login_window_session_on_seat (self, seat_id); ++ } ++ } ++ ++ g_free (seat_id); ++} ++ + static const char * + get_username_for_greeter_display (GdmManager *manager, + GdmDisplay *display) +@@ -1545,6 +1672,7 @@ on_display_status_changed (GdmDisplay *display, + #endif + + maybe_start_pending_initial_login (manager, display); ++ maybe_activate_other_session (manager, display); + break; + default: + break; +-- +1.8.3.1 + diff --git a/SOURCES/0001-manager-update-session-id-property-when-reusing-disp.patch b/SOURCES/0001-manager-update-session-id-property-when-reusing-disp.patch new file mode 100644 index 0000000..585fd65 --- /dev/null +++ b/SOURCES/0001-manager-update-session-id-property-when-reusing-disp.patch @@ -0,0 +1,161 @@ +From b1e364e4f5651888be7a075dad044b445e0f0236 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Thu, 4 May 2017 15:34:33 -0400 +Subject: [PATCH] manager: update session-id property when reusing display + +If a display starts out its life as a greeter display, and then +gets reused for the user session, we need to update the session-id +property on the display to match its new session. + +This is important so the reauthentication process match the +session with existing display and run in the proper context. +--- + daemon/gdm-manager.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index 9201b9f8..3eef745f 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -1750,130 +1750,134 @@ start_user_session (GdmManager *manager, + static void + create_display_for_user_session (GdmManager *self, + GdmSession *session, + const char *session_id) + { + GdmDisplay *display; + /* at the moment we only create GdmLocalDisplay objects on seat0 */ + const char *seat_id = "seat0"; + + display = gdm_local_display_new (); + + g_object_set (G_OBJECT (display), + "session-class", "user", + "seat-id", seat_id, + "session-id", session_id, + NULL); + gdm_display_store_add (self->priv->display_store, + display); + g_object_set_data (G_OBJECT (session), "gdm-display", display); + } + + static gboolean + on_start_user_session (StartUserSessionOperation *operation) + { + GdmManager *self = operation->manager; + gboolean migrated; + gboolean fail_if_already_switched = TRUE; + gboolean doing_initial_setup = FALSE; + gboolean starting_user_session_right_away = TRUE; + GdmDisplay *display; ++ const char *session_id; + + g_debug ("GdmManager: start or jump to session"); + + /* If there's already a session running, jump to it. + * If the only session running is the one we just opened, + * start a session on it. + */ + migrated = switch_to_compatible_user_session (operation->manager, operation->session, fail_if_already_switched); + + g_debug ("GdmManager: migrated: %d", migrated); + if (migrated) { + /* We don't stop the manager here because + when Xorg exits it switches to the VT it was + started from. That interferes with fast + user switching. */ + gdm_session_reset (operation->session); + destroy_start_user_session_operation (operation); + goto out; + } + + display = get_display_for_user_session (operation->session); + + g_object_get (G_OBJECT (display), "doing-initial-setup", &doing_initial_setup, NULL); + ++ session_id = gdm_session_get_conversation_session_id (operation->session, ++ operation->service_name); ++ + if (gdm_session_get_display_mode (operation->session) == GDM_SESSION_DISPLAY_MODE_REUSE_VT) { + /* In this case, the greeter's display is morphing into + * the user session display. Kill the greeter on this session + * and let the user session follow the same display. */ + gdm_display_stop_greeter_session (display); +- g_object_set (G_OBJECT (display), "session-class", "user", NULL); ++ g_object_set (G_OBJECT (display), ++ "session-class", "user", ++ "session-id", session_id, ++ NULL); + } else { +- const char *session_id; + uid_t allowed_uid; + + g_object_ref (display); + if (doing_initial_setup) { + g_debug ("GdmManager: closing down initial setup display"); + gdm_display_stop_greeter_session (display); + gdm_display_unmanage (display); + gdm_display_finish (display); + + /* We can't start the user session until the finished display + * starts to respawn (since starting an X server and bringing + * one down at the same time is a no go) + */ + g_assert (self->priv->initial_login_operation == NULL); + self->priv->initial_login_operation = operation; + starting_user_session_right_away = FALSE; + } else { + g_debug ("GdmManager: session has its display server, reusing our server for another login screen"); + } + + /* The user session is going to follow the session worker + * into the new display. Untie it from this display and + * create a new embryonic session for a future user login. */ + allowed_uid = gdm_session_get_allowed_user (operation->session); + g_object_set_data (G_OBJECT (display), "gdm-embryonic-user-session", NULL); + g_object_set_data (G_OBJECT (operation->session), "gdm-display", NULL); + create_embryonic_user_session_for_display (operation->manager, display, allowed_uid); + + if (g_strcmp0 (operation->service_name, "gdm-autologin") == 0) { + /* remove the unused prepared greeter display since we're not going + * to have a greeter */ + gdm_display_store_remove (self->priv->display_store, display); + g_object_unref (display); + } + + /* Give the user session a new display object for bookkeeping purposes */ +- session_id = gdm_session_get_conversation_session_id (operation->session, +- operation->service_name); + create_display_for_user_session (operation->manager, + operation->session, + session_id); + } + + if (starting_user_session_right_away) { + start_user_session (operation->manager, operation); + } + + out: + return G_SOURCE_REMOVE; + } + + static void + queue_start_user_session (GdmManager *manager, + GdmSession *session, + const char *service_name) + { + StartUserSessionOperation *operation; + + operation = g_slice_new0 (StartUserSessionOperation); + operation->manager = manager; + operation->session = g_object_ref (session); + operation->service_name = g_strdup (service_name); + + operation->idle_id = g_idle_add ((GSourceFunc) on_start_user_session, operation); + g_object_set_data (G_OBJECT (session), "start-user-session-operation", operation); + } + + static void +-- +2.12.2 + diff --git a/SOURCES/0001-worker-add-compat-patch-to-make-new-worker-work-with.patch b/SOURCES/0001-worker-add-compat-patch-to-make-new-worker-work-with.patch new file mode 100644 index 0000000..fa796d3 --- /dev/null +++ b/SOURCES/0001-worker-add-compat-patch-to-make-new-worker-work-with.patch @@ -0,0 +1,104 @@ +From cc1eef39a91bdff761791a4ccb6074cca0888ea1 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 12 May 2017 15:20:14 -0400 +Subject: [PATCH] worker: add compat patch to make new worker work with old + daemon + +--- + daemon/gdm-session-worker.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c +index dffc8917..81aaa5e7 100644 +--- a/daemon/gdm-session-worker.c ++++ b/daemon/gdm-session-worker.c +@@ -2897,69 +2897,86 @@ gdm_session_worker_handle_setup_for_user (GdmDBusWorker *object, + static gboolean + gdm_session_worker_handle_setup_for_program (GdmDBusWorker *object, + GDBusMethodInvocation *invocation, + const char *service, + const char *username, + const char *x11_display_name, + const char *x11_authority_file, + const char *console, + const char *seat_id, + const char *hostname, + gboolean display_is_local, + const char *log_file) + { + GdmSessionWorker *worker = GDM_SESSION_WORKER (object); + validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE); + + worker->priv->service = g_strdup (service); + worker->priv->x11_display_name = g_strdup (x11_display_name); + worker->priv->x11_authority_file = g_strdup (x11_authority_file); + worker->priv->display_device = g_strdup (console); + worker->priv->display_seat_id = g_strdup (seat_id); + worker->priv->hostname = g_strdup (hostname); + worker->priv->display_is_local = display_is_local; + worker->priv->username = g_strdup (username); + worker->priv->log_file = g_strdup (log_file); + worker->priv->is_program_session = TRUE; + + return TRUE; + } + ++static void ++fix_environment_if_old_gdm_daemon_running (GdmSessionWorker *worker) ++{ ++ const char *daemon_version; ++ const char *username; ++ ++ daemon_version = gdm_session_worker_get_environment_variable (worker, "GDM_VERSION"); ++ username = gdm_session_worker_get_environment_variable (worker, "USERNAME"); ++ ++ if (g_strcmp0 (daemon_version, "3.14.2") == 0 && ++ g_strcmp0 (username, "gdm") == 0) { ++ gdm_session_worker_set_environment_variable (worker, "GNOME_SHELL_SESSION_MODE", "gdm"); ++ } ++} ++ + static gboolean + gdm_session_worker_handle_start_program (GdmDBusWorker *object, + GDBusMethodInvocation *invocation, + const char *text) + { + GdmSessionWorker *worker = GDM_SESSION_WORKER (object); + GError *parse_error = NULL; + validate_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SESSION_STARTED); + ++ fix_environment_if_old_gdm_daemon_running (worker); ++ + if (worker->priv->is_reauth_session) { + g_dbus_method_invocation_return_error (invocation, + GDM_SESSION_WORKER_ERROR, + GDM_SESSION_WORKER_ERROR_IN_REAUTH_SESSION, + "Cannot start a program while in a reauth session"); + return TRUE; + } + + g_debug ("GdmSessionWorker: start program: %s", text); + + g_clear_pointer (&worker->priv->arguments, (GDestroyNotify) g_strfreev); + if (! g_shell_parse_argv (text, NULL, &worker->priv->arguments, &parse_error)) { + g_dbus_method_invocation_take_error (invocation, parse_error); + return TRUE; + } + + worker->priv->pending_invocation = invocation; + queue_state_change (worker); + + return TRUE; + } + + static void + on_reauthentication_client_connected (GdmSession *session, + GCredentials *credentials, + GPid pid_of_client, + ReauthenticationRequest *request) + { + g_debug ("GdmSessionWorker: client connected to reauthentication server"); + } +-- +2.12.2 + diff --git a/SOURCES/0002-manager-stop-transient-greeter-session-when-done-wit.patch b/SOURCES/0002-manager-stop-transient-greeter-session-when-done-wit.patch new file mode 100644 index 0000000..c2ba6f6 --- /dev/null +++ b/SOURCES/0002-manager-stop-transient-greeter-session-when-done-wit.patch @@ -0,0 +1,51 @@ +From 66250ce6402087d2e08f2008782edc02a0d013b0 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 5 Apr 2017 12:11:20 -0400 +Subject: [PATCH 2/2] manager: stop transient greeter session when done with it + +If we're running in legacy display mode, we currently can +end up with a leaked greeter following user switching. +That can happen if a user with an already running session +is reauthenticated (so the login screen won't morph into the +use session). + +This commit makes sure we kill the greeter session off in that +case. +--- + daemon/gdm-manager.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index 6ffb842..9201b9f 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -2010,6 +2010,26 @@ on_session_reauthenticated (GdmSession *session, + GdmManager *manager) + { + gboolean fail_if_already_switched = FALSE; ++ ++ if (gdm_session_get_display_mode (session) == GDM_SESSION_DISPLAY_MODE_REUSE_VT) { ++ const char *seat_id; ++ char *session_id; ++ ++ seat_id = gdm_session_get_display_seat_id (session); ++ if (get_login_window_session_id (seat_id, &session_id)) { ++ GdmDisplay *display = gdm_display_store_find (manager->priv->display_store, ++ lookup_by_session_id, ++ (gpointer) session_id); ++ ++ if (display != NULL) { ++ gdm_display_stop_greeter_session (display); ++ gdm_display_unmanage (display); ++ gdm_display_finish (display); ++ } ++ } ++ g_free (session_id); ++ } ++ + /* There should already be a session running, so jump to its + * VT. In the event we're already on the right VT, (i.e. user + * used an unlock screen instead of a user switched login screen), +-- +1.8.3.1 + diff --git a/SOURCES/0003-launch-environment-fix-crasher-when-session-mode-isn.patch b/SOURCES/0003-launch-environment-fix-crasher-when-session-mode-isn.patch new file mode 100644 index 0000000..f9ce1d4 --- /dev/null +++ b/SOURCES/0003-launch-environment-fix-crasher-when-session-mode-isn.patch @@ -0,0 +1,94 @@ +From c29c4587ffc1ac7b923a2725a9f8fee0579124d1 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 27 Mar 2017 16:56:29 -0400 +Subject: [PATCH 03/13] launch-environment: fix crasher when session-mode isn't + set + +This commit fixes a crasher when starting the indirect chooser. +--- + daemon/gdm-launch-environment.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c +index a30276b4..4372ac29 100644 +--- a/daemon/gdm-launch-environment.c ++++ b/daemon/gdm-launch-environment.c +@@ -128,68 +128,69 @@ build_launch_environment (GdmLaunchEnvironment *launch_environment, + "XDG_CONFIG_DIRS", NULL + }; + char *system_data_dirs; + int i; + + /* create a hash table of current environment, then update keys has necessary */ + hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + + for (i = 0; optional_environment[i] != NULL; i++) { + if (g_getenv (optional_environment[i]) == NULL) { + continue; + } + + g_hash_table_insert (hash, + g_strdup (optional_environment[i]), + g_strdup (g_getenv (optional_environment[i]))); + } + + system_data_dirs = g_strjoinv (":", (char **) g_get_system_data_dirs ()); + + g_hash_table_insert (hash, + g_strdup ("XDG_DATA_DIRS"), + g_strdup_printf ("%s:%s", + DATADIR "/gdm/greeter", + system_data_dirs)); + g_free (system_data_dirs); + + if (launch_environment->priv->x11_authority_file != NULL) + g_hash_table_insert (hash, g_strdup ("XAUTHORITY"), g_strdup (launch_environment->priv->x11_authority_file)); + +- if (launch_environment->priv->session_mode != NULL) ++ if (launch_environment->priv->session_mode != NULL) { + g_hash_table_insert (hash, g_strdup ("GNOME_SHELL_SESSION_MODE"), g_strdup (launch_environment->priv->session_mode)); + +- /* Inital setup needs gvfs for fetching remote avatars. */ +- if (strcmp (launch_environment->priv->session_mode, INITIAL_SETUP_SESSION_MODE) != 0) { +- g_hash_table_insert (hash, g_strdup ("GVFS_DISABLE_FUSE"), g_strdup ("1")); +- g_hash_table_insert (hash, g_strdup ("GIO_USE_VFS"), g_strdup ("local")); +- g_hash_table_insert (hash, g_strdup ("GVFS_REMOTE_VOLUME_MONITOR_IGNORE"), g_strdup ("1")); ++ /* Inital setup needs gvfs for fetching remote avatars. */ ++ if (strcmp (launch_environment->priv->session_mode, INITIAL_SETUP_SESSION_MODE) != 0) { ++ g_hash_table_insert (hash, g_strdup ("GVFS_DISABLE_FUSE"), g_strdup ("1")); ++ g_hash_table_insert (hash, g_strdup ("GIO_USE_VFS"), g_strdup ("local")); ++ g_hash_table_insert (hash, g_strdup ("GVFS_REMOTE_VOLUME_MONITOR_IGNORE"), g_strdup ("1")); ++ } + } + + g_hash_table_insert (hash, g_strdup ("LOGNAME"), g_strdup (launch_environment->priv->user_name)); + g_hash_table_insert (hash, g_strdup ("USER"), g_strdup (launch_environment->priv->user_name)); + g_hash_table_insert (hash, g_strdup ("USERNAME"), g_strdup (launch_environment->priv->user_name)); + + g_hash_table_insert (hash, g_strdup ("GDM_VERSION"), g_strdup (VERSION)); + g_hash_table_remove (hash, "MAIL"); + + g_hash_table_insert (hash, g_strdup ("HOME"), g_strdup ("/")); + g_hash_table_insert (hash, g_strdup ("PWD"), g_strdup ("/")); + g_hash_table_insert (hash, g_strdup ("SHELL"), g_strdup ("/bin/sh")); + + gdm_get_pwent_for_name (launch_environment->priv->user_name, &pwent); + if (pwent != NULL) { + if (pwent->pw_dir != NULL && pwent->pw_dir[0] != '\0') { + g_hash_table_insert (hash, g_strdup ("HOME"), g_strdup (pwent->pw_dir)); + g_hash_table_insert (hash, g_strdup ("PWD"), g_strdup (pwent->pw_dir)); + } + + g_hash_table_insert (hash, g_strdup ("SHELL"), g_strdup (pwent->pw_shell)); + } + + if (start_session && launch_environment->priv->x11_display_seat_id != NULL) { + char *seat_id; + + seat_id = launch_environment->priv->x11_display_seat_id; + + g_hash_table_insert (hash, g_strdup ("GDM_SEAT_ID"), g_strdup (seat_id)); + } +-- +2.12.0 + diff --git a/SOURCES/0004-manager-drop-some-erroneous-code.patch b/SOURCES/0004-manager-drop-some-erroneous-code.patch new file mode 100644 index 0000000..f8cb492 --- /dev/null +++ b/SOURCES/0004-manager-drop-some-erroneous-code.patch @@ -0,0 +1,98 @@ +From 7eae5842599eca46e14d57641f6629c60fe7a354 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 14:56:46 -0400 +Subject: [PATCH 04/13] manager: drop some erroneous code + +This is commit 82296a3350b64d0ed5ae3b9f6983466c60dd8a53 all over +again. The code snuck back in during a refactor ! +--- + daemon/gdm-manager.c | 18 ------------------ + 1 file changed, 18 deletions(-) + +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index e78228b4..3014dad3 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -1903,79 +1903,61 @@ on_session_client_connected (GdmSession *session, + } + #endif + + g_object_get (G_OBJECT (display), "allow-timed-login", &allow_timed_login, NULL); + + if (!allow_timed_login) { + return; + } + + enabled = get_timed_login_details (manager, &username, &delay); + + if (! enabled) { + return; + } + + gdm_session_set_timed_login_details (session, username, delay); + + g_debug ("GdmManager: Starting automatic login conversation (for timed login)"); + gdm_session_start_conversation (session, "gdm-autologin"); + + g_free (username); + + } + + static void + on_session_client_disconnected (GdmSession *session, + GCredentials *credentials, + GPid pid_of_client, + GdmManager *manager) + { +- GdmDisplay *display; +- gboolean display_is_local; +- + g_debug ("GdmManager: client disconnected"); +- +- display = get_display_for_user_session (session); +- +- if (display == NULL) { +- return; +- } +- +- g_object_get (G_OBJECT (display), +- "is-local", &display_is_local, +- NULL); +- +- if ( ! display_is_local && gdm_session_is_running (session)) { +- gdm_display_unmanage (display); +- gdm_display_finish (display); +- } + } + + typedef struct + { + GdmManager *manager; + GdmSession *session; + guint idle_id; + } ResetSessionOperation; + + static void + destroy_reset_session_operation (ResetSessionOperation *operation) + { + g_object_set_data (G_OBJECT (operation->session), + "reset-session-operation", + NULL); + g_object_unref (operation->session); + g_slice_free (ResetSessionOperation, operation); + } + + static gboolean + on_reset_session (ResetSessionOperation *operation) + { + gdm_session_reset (operation->session); + + destroy_reset_session_operation (operation); + + return G_SOURCE_REMOVE; + } + + static void +-- +2.12.0 + diff --git a/SOURCES/0005-launch-environment-implement-hostname-selected-signa.patch b/SOURCES/0005-launch-environment-implement-hostname-selected-signa.patch new file mode 100644 index 0000000..ac4324e --- /dev/null +++ b/SOURCES/0005-launch-environment-implement-hostname-selected-signa.patch @@ -0,0 +1,356 @@ +From 239bc98692187ca42dca7cf1a19800415afcf6cf Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 15:01:06 -0400 +Subject: [PATCH 05/13] launch-environment: implement hostname-selected signal + +We're connecting to a signal that isn't implemented. This +commit adds the implementation. + +A slightly better fix might be to cut out some of the layers, +of middle men passing around hostname-selected, but for now this +is fine. +--- + daemon/gdm-launch-environment.c | 27 +++++++++++++++++++++++++++ + daemon/gdm-launch-environment.h | 2 ++ + 2 files changed, 29 insertions(+) + +diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c +index 4372ac29..a7ae6728 100644 +--- a/daemon/gdm-launch-environment.c ++++ b/daemon/gdm-launch-environment.c +@@ -76,60 +76,61 @@ struct GdmLaunchEnvironmentPrivate + char *x11_display_name; + char *x11_display_seat_id; + char *x11_display_device; + char *x11_display_hostname; + char *x11_authority_file; + gboolean x11_display_is_local; + }; + + enum { + PROP_0, + PROP_VERIFICATION_MODE, + PROP_SESSION_TYPE, + PROP_SESSION_MODE, + PROP_X11_DISPLAY_NAME, + PROP_X11_DISPLAY_SEAT_ID, + PROP_X11_DISPLAY_DEVICE, + PROP_X11_DISPLAY_HOSTNAME, + PROP_X11_AUTHORITY_FILE, + PROP_X11_DISPLAY_IS_LOCAL, + PROP_USER_NAME, + PROP_RUNTIME_DIR, + PROP_COMMAND, + }; + + enum { + OPENED, + STARTED, + STOPPED, + EXITED, + DIED, ++ HOSTNAME_SELECTED, + LAST_SIGNAL + }; + + static guint signals [LAST_SIGNAL] = { 0, }; + + static void gdm_launch_environment_class_init (GdmLaunchEnvironmentClass *klass); + static void gdm_launch_environment_init (GdmLaunchEnvironment *launch_environment); + static void gdm_launch_environment_finalize (GObject *object); + + G_DEFINE_TYPE (GdmLaunchEnvironment, gdm_launch_environment, G_TYPE_OBJECT) + + static GHashTable * + build_launch_environment (GdmLaunchEnvironment *launch_environment, + gboolean start_session) + { + GHashTable *hash; + struct passwd *pwent; + static const char * const optional_environment[] = { + "LANG", "LANGUAGE", "LC_CTYPE", "LC_NUMERIC", "LC_TIME", + "LC_COLLATE", "LC_MONETARY", "LC_MESSAGES", "LC_PAPER", + "LC_NAME", "LC_ADDRESS", "LC_TELEPHONE", "LC_MEASUREMENT", + "LC_IDENTIFICATION", "LC_ALL", "WINDOWPATH", "XCURSOR_PATH", + "XDG_CONFIG_DIRS", NULL + }; + char *system_data_dirs; + int i; + + /* create a hash table of current environment, then update keys has necessary */ + hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + +@@ -237,60 +238,69 @@ static void + on_session_started (GdmSession *session, + const char *service_name, + int pid, + GdmLaunchEnvironment *launch_environment) + { + launch_environment->priv->pid = pid; + g_signal_emit (G_OBJECT (launch_environment), signals [STARTED], 0); + } + + static void + on_session_exited (GdmSession *session, + int exit_code, + GdmLaunchEnvironment *launch_environment) + { + gdm_session_stop_conversation (launch_environment->priv->session, "gdm-launch-environment"); + + g_signal_emit (G_OBJECT (launch_environment), signals [EXITED], 0, exit_code); + } + + static void + on_session_died (GdmSession *session, + int signal_number, + GdmLaunchEnvironment *launch_environment) + { + gdm_session_stop_conversation (launch_environment->priv->session, "gdm-launch-environment"); + + g_signal_emit (G_OBJECT (launch_environment), signals [DIED], 0, signal_number); + } + + static void ++on_hostname_selected (GdmSession *session, ++ const char *hostname, ++ GdmLaunchEnvironment *launch_environment) ++{ ++ g_debug ("GdmSession: hostname selected: %s", hostname); ++ g_signal_emit (launch_environment, signals [HOSTNAME_SELECTED], 0, hostname); ++} ++ ++static void + on_conversation_started (GdmSession *session, + const char *service_name, + GdmLaunchEnvironment *launch_environment) + { + char *log_path; + char *log_file; + + log_file = g_strdup_printf ("%s-greeter.log", launch_environment->priv->x11_display_name); + log_path = g_build_filename (LOGDIR, log_file, NULL); + g_free (log_file); + + gdm_session_setup_for_program (launch_environment->priv->session, + "gdm-launch-environment", + launch_environment->priv->user_name, + log_path); + g_free (log_path); + } + + static void + on_conversation_stopped (GdmSession *session, + const char *service_name, + GdmLaunchEnvironment *launch_environment) + { + GdmSession *conversation_session; + + conversation_session = launch_environment->priv->session; + launch_environment->priv->session = NULL; + + g_debug ("GdmLaunchEnvironment: conversation stopped"); + +@@ -382,60 +392,65 @@ gdm_launch_environment_start (GdmLaunchEnvironment *launch_environment) + g_signal_connect_object (launch_environment->priv->session, + "conversation-stopped", + G_CALLBACK (on_conversation_stopped), + launch_environment, + 0); + g_signal_connect_object (launch_environment->priv->session, + "setup-complete", + G_CALLBACK (on_session_setup_complete), + launch_environment, + 0); + g_signal_connect_object (launch_environment->priv->session, + "session-opened", + G_CALLBACK (on_session_opened), + launch_environment, + 0); + g_signal_connect_object (launch_environment->priv->session, + "session-started", + G_CALLBACK (on_session_started), + launch_environment, + 0); + g_signal_connect_object (launch_environment->priv->session, + "session-exited", + G_CALLBACK (on_session_exited), + launch_environment, + 0); + g_signal_connect_object (launch_environment->priv->session, + "session-died", + G_CALLBACK (on_session_died), + launch_environment, + 0); ++ g_signal_connect_object (launch_environment->priv->session, ++ "hostname-selected", ++ G_CALLBACK (on_hostname_selected), ++ launch_environment, ++ 0); + + gdm_session_start_conversation (launch_environment->priv->session, "gdm-launch-environment"); + gdm_session_select_program (launch_environment->priv->session, launch_environment->priv->command); + + if (launch_environment->priv->session_type != NULL) { + g_object_set (G_OBJECT (launch_environment->priv->session), + "session-type", + launch_environment->priv->session_type, + NULL); + } + + res = TRUE; + out: + if (local_error) { + g_critical ("GdmLaunchEnvironment: %s", local_error->message); + g_clear_error (&local_error); + } + return res; + } + + gboolean + gdm_launch_environment_stop (GdmLaunchEnvironment *launch_environment) + { + if (launch_environment->priv->pid > 1) { + gdm_signal_pid (-launch_environment->priv->pid, SIGTERM); + } + + if (launch_environment->priv->session != NULL) { + gdm_session_close (launch_environment->priv->session); + +@@ -780,60 +795,72 @@ gdm_launch_environment_class_init (GdmLaunchEnvironmentClass *klass) + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GdmLaunchEnvironmentClass, stopped), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + signals [EXITED] = + g_signal_new ("exited", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GdmLaunchEnvironmentClass, exited), + NULL, + NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); + signals [DIED] = + g_signal_new ("died", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GdmLaunchEnvironmentClass, died), + NULL, + NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); ++ ++ signals [HOSTNAME_SELECTED] = ++ g_signal_new ("hostname-selected", ++ G_OBJECT_CLASS_TYPE (object_class), ++ G_SIGNAL_RUN_FIRST, ++ G_STRUCT_OFFSET (GdmLaunchEnvironmentClass, hostname_selected), ++ NULL, ++ NULL, ++ g_cclosure_marshal_VOID__STRING, ++ G_TYPE_NONE, ++ 1, ++ G_TYPE_STRING); + } + + static void + gdm_launch_environment_init (GdmLaunchEnvironment *launch_environment) + { + + launch_environment->priv = GDM_LAUNCH_ENVIRONMENT_GET_PRIVATE (launch_environment); + + launch_environment->priv->command = NULL; + launch_environment->priv->session = NULL; + } + + static void + gdm_launch_environment_finalize (GObject *object) + { + GdmLaunchEnvironment *launch_environment; + + g_return_if_fail (object != NULL); + g_return_if_fail (GDM_IS_LAUNCH_ENVIRONMENT (object)); + + launch_environment = GDM_LAUNCH_ENVIRONMENT (object); + + g_return_if_fail (launch_environment->priv != NULL); + + gdm_launch_environment_stop (launch_environment); + + if (launch_environment->priv->session) { + g_object_unref (launch_environment->priv->session); + } + +diff --git a/daemon/gdm-launch-environment.h b/daemon/gdm-launch-environment.h +index 3fd875c2..c2a09d1c 100644 +--- a/daemon/gdm-launch-environment.h ++++ b/daemon/gdm-launch-environment.h +@@ -32,55 +32,57 @@ G_BEGIN_DECLS + #define GDM_LAUNCH_ENVIRONMENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_LAUNCH_ENVIRONMENT, GdmLaunchEnvironmentClass)) + #define GDM_IS_LAUNCH_ENVIRONMENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_LAUNCH_ENVIRONMENT)) + #define GDM_IS_LAUNCH_ENVIRONMENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_LAUNCH_ENVIRONMENT)) + #define GDM_LAUNCH_ENVIRONMENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_LAUNCH_ENVIRONMENT, GdmLaunchEnvironmentClass)) + + typedef struct GdmLaunchEnvironmentPrivate GdmLaunchEnvironmentPrivate; + + typedef struct + { + GObject parent; + GdmLaunchEnvironmentPrivate *priv; + } GdmLaunchEnvironment; + + typedef struct + { + GObjectClass parent_class; + + /* methods */ + gboolean (*start) (GdmLaunchEnvironment *launch_environment); + gboolean (*stop) (GdmLaunchEnvironment *launch_environment); + + + /* signals */ + void (* opened) (GdmLaunchEnvironment *launch_environment); + void (* started) (GdmLaunchEnvironment *launch_environment); + void (* stopped) (GdmLaunchEnvironment *launch_environment); + void (* exited) (GdmLaunchEnvironment *launch_environment, + int exit_code); + void (* died) (GdmLaunchEnvironment *launch_environment, + int signal_number); ++ void (* hostname_selected) (GdmLaunchEnvironment *launch_environment, ++ const char *hostname); + } GdmLaunchEnvironmentClass; + + GType gdm_launch_environment_get_type (void); + + gboolean gdm_launch_environment_start (GdmLaunchEnvironment *launch_environment); + gboolean gdm_launch_environment_stop (GdmLaunchEnvironment *launch_environment); + GdmSession * gdm_launch_environment_get_session (GdmLaunchEnvironment *launch_environment); + char * gdm_launch_environment_get_session_id (GdmLaunchEnvironment *launch_environment); + + GdmLaunchEnvironment *gdm_create_greeter_launch_environment (const char *display_name, + const char *seat_id, + const char *session_type, + const char *display_hostname, + gboolean display_is_local); + GdmLaunchEnvironment *gdm_create_initial_setup_launch_environment (const char *display_name, + const char *seat_id, + const char *display_hostname, + gboolean display_is_local); + GdmLaunchEnvironment *gdm_create_chooser_launch_environment (const char *display_name, + const char *seat_id, + const char *display_hostname); + + G_END_DECLS + + #endif /* __GDM_LAUNCH_ENVIRONMENT_H */ +-- +2.12.0 + diff --git a/SOURCES/0006-manager-fix-up-support-for-chooser.patch b/SOURCES/0006-manager-fix-up-support-for-chooser.patch new file mode 100644 index 0000000..c68bf23 --- /dev/null +++ b/SOURCES/0006-manager-fix-up-support-for-chooser.patch @@ -0,0 +1,355 @@ +From 60a03333bec4f7904a2cfddb291d22ce493e1ced Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 14:54:44 -0400 +Subject: [PATCH 06/13] manager: fix up support for chooser + +We were missing some chunks of code to handle dealing with +the chooser. + +This commit adds in the necessary bits to start the chooser, +and deal with the choice. +--- + daemon/gdm-manager.c | 62 ++++++++++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 53 insertions(+), 9 deletions(-) + +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index 3014dad3..373778d9 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -18,67 +18,69 @@ + * + */ + + #include "config.h" + + #include + #include + #include + #include + #include + #include + #include + #include + + #include + #include + #include + #include + + #include + + #include + + #include "gdm-common.h" + + #include "gdm-dbus-util.h" + #include "gdm-manager.h" + #include "gdm-manager-glue.h" + #include "gdm-display-store.h" + #include "gdm-display-factory.h" ++#include "gdm-launch-environment.h" + #include "gdm-local-display.h" + #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" ++#include "gdm-xdmcp-chooser-display.h" + + #define GDM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_MANAGER, GdmManagerPrivate)) + + #define GDM_DBUS_PATH "/org/gnome/DisplayManager" + #define GDM_MANAGER_PATH GDM_DBUS_PATH "/Manager" + #define GDM_MANAGER_DISPLAYS_PATH GDM_DBUS_PATH "/Displays" + + #define INITIAL_SETUP_USERNAME "gnome-initial-setup" + + typedef struct + { + GdmManager *manager; + GdmSession *session; + char *service_name; + guint idle_id; + } StartUserSessionOperation; + + struct GdmManagerPrivate + { + GdmDisplayStore *display_store; + GdmLocalDisplayFactory *local_factory; + #ifdef HAVE_LIBXDMCP + GdmXdmcpDisplayFactory *xdmcp_factory; + #endif + GList *user_sessions; + GHashTable *transient_sessions; + GHashTable *open_reauthentication_requests; + gboolean xdmcp_enabled; + GCancellable *cancellable; + +@@ -793,89 +795,107 @@ gdm_manager_handle_register_display (GdmDBusManager *manager, + /* FIXME: this should happen in gdm-session.c when the session is opened + */ + if (tty != NULL) + g_object_set (G_OBJECT (session), "display-device", tty, NULL); + + pid = gdm_session_get_pid (session); + + if (pid > 0) { + add_session_record (self, session, pid, SESSION_RECORD_LOGIN); + } + } + + g_object_set (G_OBJECT (display), "status", GDM_DISPLAY_MANAGED, NULL); + + gdm_dbus_manager_complete_register_display (GDM_DBUS_MANAGER (manager), + invocation); + + g_clear_pointer (&x11_display_name, g_free); + g_clear_pointer (&tty, g_free); + return TRUE; + } + + static gboolean + gdm_manager_handle_open_session (GdmDBusManager *manager, + GDBusMethodInvocation *invocation) + { + GdmManager *self = GDM_MANAGER (manager); + const char *sender; + GDBusConnection *connection; + GdmDisplay *display = NULL; +- GdmSession *session; ++ GdmSession *session = NULL; + const char *address; + GPid pid = 0; + uid_t uid = (uid_t) -1; + uid_t allowed_user; + + g_debug ("GdmManager: trying to open new session"); + + sender = g_dbus_method_invocation_get_sender (invocation); + connection = g_dbus_method_invocation_get_connection (invocation); + get_display_and_details_for_bus_sender (self, connection, sender, &display, NULL, NULL, NULL, &pid, &uid, NULL, NULL); + + if (display == NULL) { + g_dbus_method_invocation_return_error_literal (invocation, + G_DBUS_ERROR, + G_DBUS_ERROR_ACCESS_DENIED, + _("No session available")); + + return TRUE; + } + +- session = get_embryonic_user_session_for_display (display); ++ if (GDM_IS_XDMCP_CHOOSER_DISPLAY (display)) { ++ GdmLaunchEnvironment *launch_environment; + +- if (gdm_session_is_running (session)) { +- g_dbus_method_invocation_return_error_literal (invocation, +- G_DBUS_ERROR, +- G_DBUS_ERROR_ACCESS_DENIED, +- _("Can only be called before user is logged in")); +- return TRUE; ++ g_object_get (display, "launch-environment", &launch_environment, NULL); ++ ++ if (launch_environment != NULL) { ++ session = gdm_launch_environment_get_session (launch_environment); ++ } ++ ++ if (session == NULL) { ++ g_dbus_method_invocation_return_error_literal (invocation, ++ G_DBUS_ERROR, ++ G_DBUS_ERROR_ACCESS_DENIED, ++ _("Chooser session unavailable")); ++ return TRUE; ++ } ++ } else { ++ session = get_embryonic_user_session_for_display (display); ++ ++ if (gdm_session_is_running (session)) { ++ g_dbus_method_invocation_return_error_literal (invocation, ++ G_DBUS_ERROR, ++ G_DBUS_ERROR_ACCESS_DENIED, ++ _("Can only be called before user is logged in")); ++ return TRUE; ++ } + } + + allowed_user = gdm_session_get_allowed_user (session); + + if (uid != allowed_user) { + g_dbus_method_invocation_return_error_literal (invocation, + G_DBUS_ERROR, + G_DBUS_ERROR_ACCESS_DENIED, + _("Caller not GDM")); + return TRUE; + } + + address = gdm_session_get_server_address (session); + + if (address == NULL) { + g_dbus_method_invocation_return_error_literal (invocation, + G_DBUS_ERROR, + G_DBUS_ERROR_ACCESS_DENIED, + _("Unable to open private communication channel")); + return TRUE; + } + + gdm_dbus_manager_complete_open_session (GDM_DBUS_MANAGER (manager), + invocation, + address); + return TRUE; + } + + static void + close_transient_session (GdmManager *self, +@@ -1309,60 +1329,80 @@ get_username_for_greeter_display (GdmManager *manager, + } + } + + static void + set_up_automatic_login_session (GdmManager *manager, + GdmDisplay *display) + { + GdmSession *session; + char *display_session_type = NULL; + gboolean is_initial; + + /* 0 is root user; since the daemon talks to the session object + * directly, itself, for automatic login + */ + session = create_embryonic_user_session_for_display (manager, display, 0); + + g_object_get (G_OBJECT (display), + "is-initial", &is_initial, + "session-type", &display_session_type, + NULL); + + g_object_set (G_OBJECT (session), + "display-is-initial", is_initial, + NULL); + + g_debug ("GdmManager: Starting automatic login conversation"); + gdm_session_start_conversation (session, "gdm-autologin"); + } + + static void ++set_up_chooser_session (GdmManager *manager, ++ GdmDisplay *display) ++{ ++ const char *allowed_user; ++ struct passwd *passwd_entry; ++ ++ allowed_user = get_username_for_greeter_display (manager, display); ++ ++ if (!gdm_get_pwent_for_name (allowed_user, &passwd_entry)) { ++ g_warning ("GdmManager: couldn't look up username %s", ++ allowed_user); ++ gdm_display_unmanage (display); ++ gdm_display_finish (display); ++ return; ++ } ++ ++ gdm_display_start_greeter_session (display); ++} ++ ++static void + set_up_greeter_session (GdmManager *manager, + GdmDisplay *display) + { + const char *allowed_user; + struct passwd *passwd_entry; + + allowed_user = get_username_for_greeter_display (manager, display); + + if (!gdm_get_pwent_for_name (allowed_user, &passwd_entry)) { + g_warning ("GdmManager: couldn't look up username %s", + allowed_user); + gdm_display_unmanage (display); + gdm_display_finish (display); + return; + } + + create_embryonic_user_session_for_display (manager, display, passwd_entry->pw_uid); + gdm_display_start_greeter_session (display); + } + + static void + set_up_automatic_login_session_if_user_exists (GdmManager *manager, + GdmDisplay *display, + ActUser *user) + { + if (act_user_is_nonexistent (user)) + set_up_greeter_session (manager, display); + else + set_up_automatic_login_session (manager, display); + } +@@ -1383,61 +1423,65 @@ destroy_username_lookup_operation (UsernameLookupOperation *operation) + } + + static void + on_user_is_loaded_changed (ActUser *user, + GParamSpec *pspec, + UsernameLookupOperation *operation) + { + if (act_user_is_loaded (user)) { + set_up_automatic_login_session_if_user_exists (operation->manager, operation->display, user); + g_signal_handlers_disconnect_by_func (G_OBJECT (user), + G_CALLBACK (on_user_is_loaded_changed), + operation); + destroy_username_lookup_operation (operation); + } + } + + static void + set_up_session (GdmManager *manager, + GdmDisplay *display) + { + ActUserManager *user_manager; + ActUser *user; + gboolean loaded; + gboolean autologin_enabled = FALSE; + char *username = NULL; + + if (!manager->priv->ran_once && display_is_on_seat0 (display)) + autologin_enabled = get_automatic_login_details (manager, &username); + + if (!autologin_enabled) { +- set_up_greeter_session (manager, display); ++ if (GDM_IS_XDMCP_CHOOSER_DISPLAY (display)) { ++ set_up_chooser_session (manager, display); ++ } else { ++ set_up_greeter_session (manager, display); ++ } + g_free (username); + return; + } + + /* Check whether the user really exists before committing to autologin. */ + user_manager = act_user_manager_get_default (); + user = act_user_manager_get_user (user_manager, username); + g_object_get (user_manager, "is-loaded", &loaded, NULL); + + if (loaded) { + set_up_automatic_login_session_if_user_exists (manager, display, user); + } else { + UsernameLookupOperation *operation; + + operation = g_new (UsernameLookupOperation, 1); + operation->manager = g_object_ref (manager); + operation->display = g_object_ref (display); + operation->username = username; + + g_signal_connect (user, + "notify::is-loaded", + G_CALLBACK (on_user_is_loaded_changed), + operation); + } + } + + static void + greeter_display_started (GdmManager *manager, + GdmDisplay *display) + { +-- +2.12.0 + diff --git a/SOURCES/0007-xdmcp-display-don-t-set-MANAGED-until-we-ve-connecte.patch b/SOURCES/0007-xdmcp-display-don-t-set-MANAGED-until-we-ve-connecte.patch new file mode 100644 index 0000000..c12e90b --- /dev/null +++ b/SOURCES/0007-xdmcp-display-don-t-set-MANAGED-until-we-ve-connecte.patch @@ -0,0 +1,104 @@ +From 9367cdcb777cabacc5cb436155e4ab7c32dc74ef Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 14:52:23 -0400 +Subject: [PATCH 07/13] xdmcp-display: don't set MANAGED until we've connected + +We don't want to start the greeter session until we've +successfully connected to the display ourselves! + +This prevents a race where session processes may inadvertently + get the initial connection to the display server, causing +premature resets. +--- + daemon/gdm-xdmcp-display.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/daemon/gdm-xdmcp-display.c b/daemon/gdm-xdmcp-display.c +index c9f9c3d2..630844f2 100644 +--- a/daemon/gdm-xdmcp-display.c ++++ b/daemon/gdm-xdmcp-display.c +@@ -166,80 +166,79 @@ gdm_xdmcp_display_prepare (GdmDisplay *display) + NULL); + + if (launch_environment == NULL) { + launch_environment = gdm_create_greeter_launch_environment (display_name, + seat_id, + NULL, + hostname, + FALSE); + g_object_set (self, "launch-environment", launch_environment, NULL); + g_object_unref (launch_environment); + } + + if (!gdm_display_create_authority (display)) { + g_warning ("Unable to set up access control for display %s", + display_name); + return FALSE; + } + + return GDM_DISPLAY_CLASS (gdm_xdmcp_display_parent_class)->prepare (display); + } + + static gboolean + idle_connect_to_display (GdmXdmcpDisplay *self) + { + gboolean res; + + self->priv->connection_attempts++; + + res = gdm_display_connect (GDM_DISPLAY (self)); + if (res) { ++ g_object_set (G_OBJECT (self), "status", GDM_DISPLAY_MANAGED, NULL); + } else { + if (self->priv->connection_attempts >= MAX_CONNECT_ATTEMPTS) { + g_warning ("Unable to connect to display after %d tries - bailing out", self->priv->connection_attempts); + gdm_display_unmanage (GDM_DISPLAY (self)); + return FALSE; + } + return TRUE; + } + + return FALSE; + } + + static void + gdm_xdmcp_display_manage (GdmDisplay *display) + { + GdmXdmcpDisplay *self = GDM_XDMCP_DISPLAY (display); + + g_timeout_add (500, (GSourceFunc)idle_connect_to_display, self); +- +- g_object_set (G_OBJECT (self), "status", GDM_DISPLAY_MANAGED, NULL); + } + + static void + gdm_xdmcp_display_class_init (GdmXdmcpDisplayClass *klass) + { + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass); + + object_class->get_property = gdm_xdmcp_display_get_property; + object_class->set_property = gdm_xdmcp_display_set_property; + + display_class->prepare = gdm_xdmcp_display_prepare; + display_class->manage = gdm_xdmcp_display_manage; + + g_type_class_add_private (klass, sizeof (GdmXdmcpDisplayPrivate)); + + g_object_class_install_property (object_class, + PROP_REMOTE_ADDRESS, + g_param_spec_boxed ("remote-address", + "Remote address", + "Remote address", + GDM_TYPE_ADDRESS, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property (object_class, + PROP_SESSION_NUMBER, + g_param_spec_int ("session-number", + "session-number", + "session-number", + G_MININT, +-- +2.12.0 + diff --git a/SOURCES/0008-xdmcp-display-factory-fix-signal-prototype.patch b/SOURCES/0008-xdmcp-display-factory-fix-signal-prototype.patch new file mode 100644 index 0000000..8afb79b --- /dev/null +++ b/SOURCES/0008-xdmcp-display-factory-fix-signal-prototype.patch @@ -0,0 +1,82 @@ +From af841691f3e48ff7635df21703115c5b109ba9dc Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 14:58:26 -0400 +Subject: [PATCH 08/13] xdmcp-display-factory: fix signal prototype + +The callback was getting called with the wrong arguments leading +to spew in the logs and necessary code not getting run! +--- + daemon/gdm-xdmcp-display-factory.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c +index b9ab921c..c5f7ddb4 100644 +--- a/daemon/gdm-xdmcp-display-factory.c ++++ b/daemon/gdm-xdmcp-display-factory.c +@@ -2023,61 +2023,62 @@ on_hostname_selected (GdmXdmcpChooserDisplay *display, + #ifdef AI_V4MAPPED + hints.ai_flags = AI_V4MAPPED; + #endif + + xdmcp_port = g_strdup_printf ("%d", XDM_UDP_PORT); + if ((gaierr = getaddrinfo (hostname, xdmcp_port, &hints, &ai_list)) != 0) { + g_warning ("Unable to get address: %s", gai_strerror (gaierr)); + g_free (xdmcp_port); + return; + } + g_free (xdmcp_port); + + /* just take the first one */ + ai = ai_list; + + if (ai != NULL) { + char *ip; + ic->chosen_address = gdm_address_new_from_sockaddr (ai->ai_addr, ai->ai_addrlen); + + ip = NULL; + gdm_address_get_numeric_info (ic->chosen_address, &ip, NULL); + g_debug ("GdmXdmcpDisplayFactory: hostname resolves to %s", + ip ? ip : "(null)"); + g_free (ip); + } + + freeaddrinfo (ai_list); + } + + static void +-on_client_disconnected (GdmDisplay *display) ++on_client_disconnected (GdmSession *session, ++ GdmDisplay *display) + { + if (gdm_display_get_status (display) != GDM_DISPLAY_MANAGED) + return; + + gdm_display_unmanage (display); + gdm_display_finish (display); + } + + static void + on_display_status_changed (GdmDisplay *display, + GParamSpec *arg1, + GdmXdmcpDisplayFactory *factory) + { + int status; + GdmDisplayStore *store; + GdmLaunchEnvironment *launch_environment; + GdmSession *session; + GdmAddress *address; + gint32 session_number; + int display_number; + + store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory)); + + launch_environment = NULL; + g_object_get (display, "launch-environment", &launch_environment, NULL); + + session = NULL; + if (launch_environment != NULL) { + session = gdm_launch_environment_get_session (launch_environment); + } +-- +2.12.0 + diff --git a/SOURCES/0009-xdmcp-display-factory-explicitly-stop-greeter-sessio.patch b/SOURCES/0009-xdmcp-display-factory-explicitly-stop-greeter-sessio.patch new file mode 100644 index 0000000..ee65a9e --- /dev/null +++ b/SOURCES/0009-xdmcp-display-factory-explicitly-stop-greeter-sessio.patch @@ -0,0 +1,80 @@ +From 1dc72abeb4419027f649d67fd95b302c8233335d Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 14:59:05 -0400 +Subject: [PATCH 09/13] xdmcp-display-factory: explicitly stop greeter session + on disconnect + +If the client disconnects, we should kill off the necessary processes. +--- + daemon/gdm-xdmcp-display-factory.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c +index c5f7ddb4..3a8506ce 100644 +--- a/daemon/gdm-xdmcp-display-factory.c ++++ b/daemon/gdm-xdmcp-display-factory.c +@@ -2029,60 +2029,61 @@ on_hostname_selected (GdmXdmcpChooserDisplay *display, + g_warning ("Unable to get address: %s", gai_strerror (gaierr)); + g_free (xdmcp_port); + return; + } + g_free (xdmcp_port); + + /* just take the first one */ + ai = ai_list; + + if (ai != NULL) { + char *ip; + ic->chosen_address = gdm_address_new_from_sockaddr (ai->ai_addr, ai->ai_addrlen); + + ip = NULL; + gdm_address_get_numeric_info (ic->chosen_address, &ip, NULL); + g_debug ("GdmXdmcpDisplayFactory: hostname resolves to %s", + ip ? ip : "(null)"); + g_free (ip); + } + + freeaddrinfo (ai_list); + } + + static void + on_client_disconnected (GdmSession *session, + GdmDisplay *display) + { + if (gdm_display_get_status (display) != GDM_DISPLAY_MANAGED) + return; + ++ gdm_display_stop_greeter_session (display); + gdm_display_unmanage (display); + gdm_display_finish (display); + } + + static void + on_display_status_changed (GdmDisplay *display, + GParamSpec *arg1, + GdmXdmcpDisplayFactory *factory) + { + int status; + GdmDisplayStore *store; + GdmLaunchEnvironment *launch_environment; + GdmSession *session; + GdmAddress *address; + gint32 session_number; + int display_number; + + store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory)); + + launch_environment = NULL; + g_object_get (display, "launch-environment", &launch_environment, NULL); + + session = NULL; + if (launch_environment != NULL) { + session = gdm_launch_environment_get_session (launch_environment); + } + + status = gdm_display_get_status (display); + + g_debug ("GdmXdmcpDisplayFactory: xdmcp display status changed: %d", status); +-- +2.12.0 + diff --git a/SOURCES/0010-chooser-fix-duplicate-entry-in-the-list.patch b/SOURCES/0010-chooser-fix-duplicate-entry-in-the-list.patch new file mode 100644 index 0000000..7d4d0f9 --- /dev/null +++ b/SOURCES/0010-chooser-fix-duplicate-entry-in-the-list.patch @@ -0,0 +1,80 @@ +From e3530d3ee97df1f78c15172abb0511ce12f1175b Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 15:11:03 -0400 +Subject: [PATCH 10/13] chooser: fix duplicate entry in the list + +--- + chooser/gdm-host-chooser-widget.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/chooser/gdm-host-chooser-widget.c b/chooser/gdm-host-chooser-widget.c +index f9200aa0..b8924618 100644 +--- a/chooser/gdm-host-chooser-widget.c ++++ b/chooser/gdm-host-chooser-widget.c +@@ -246,62 +246,62 @@ decode_packet (GIOChannel *source, + } + + if (! XdmcpReadARRAY8 (&buf, &stat)) { + goto done; + } + + status = g_strndup ((char *) stat.data, MIN (stat.length, 256)); + } else if (header.opcode == UNWILLING) { + /* immaterial, will not be shown */ + status = NULL; + } else { + goto done; + } + + g_debug ("STATUS: %s", status); + + chooser_host = find_known_host (widget, address); + if (chooser_host == NULL) { + chooser_host = g_object_new (GDM_TYPE_CHOOSER_HOST, + "address", address, + "description", status, + "willing", (header.opcode == WILLING), + "kind", GDM_CHOOSER_HOST_KIND_XDMCP, + NULL); + chooser_host_add (widget, chooser_host); + browser_add_host (widget, chooser_host); + } else { + /* server changed it's mind */ + if (header.opcode == WILLING + && ! gdm_chooser_host_get_willing (chooser_host)) { +- g_object_set (chooser_host, "willing", TRUE, NULL); + browser_add_host (widget, chooser_host); ++ g_object_set (chooser_host, "willing", TRUE, NULL); + } + /* FIXME: handle unwilling? */ + } + + done: + if (header.opcode == WILLING) { + XdmcpDisposeARRAY8 (&auth); + XdmcpDisposeARRAY8 (&host); + XdmcpDisposeARRAY8 (&stat); + } + + g_free (status); + gdm_address_free (address); + + return TRUE; + } + + static void + do_ping (GdmHostChooserWidget *widget, + gboolean full) + { + GSList *l; + + g_debug ("do ping full:%d", full); + + for (l = widget->priv->broadcast_addresses; l != NULL; l = l->next) { + GdmAddress *address; + int res; + + address = l->data; +-- +2.12.0 + diff --git a/SOURCES/0011-chooser-make-host-list-fill-the-dialog.patch b/SOURCES/0011-chooser-make-host-list-fill-the-dialog.patch new file mode 100644 index 0000000..4c53b85 --- /dev/null +++ b/SOURCES/0011-chooser-make-host-list-fill-the-dialog.patch @@ -0,0 +1,79 @@ +From c77f0cd06eb26716ba03c79a4a47c76e334faec4 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 15:21:45 -0400 +Subject: [PATCH 11/13] chooser: make host list fill the dialog + +--- + chooser/gdm-host-chooser-dialog.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/chooser/gdm-host-chooser-dialog.c b/chooser/gdm-host-chooser-dialog.c +index 02169502..b9581a34 100644 +--- a/chooser/gdm-host-chooser-dialog.c ++++ b/chooser/gdm-host-chooser-dialog.c +@@ -106,61 +106,61 @@ gdm_host_chooser_dialog_get_property (GObject *object, + } + } + + static void + on_response (GdmHostChooserDialog *dialog, + gint response_id) + { + switch (response_id) { + case GTK_RESPONSE_APPLY: + gdm_host_chooser_widget_refresh (GDM_HOST_CHOOSER_WIDGET (dialog->priv->chooser_widget)); + g_signal_stop_emission_by_name (dialog, "response"); + break; + default: + break; + } + } + + static GObject * + gdm_host_chooser_dialog_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) + { + GdmHostChooserDialog *dialog; + + dialog = GDM_HOST_CHOOSER_DIALOG (G_OBJECT_CLASS (gdm_host_chooser_dialog_parent_class)->constructor (type, + n_construct_properties, + construct_properties)); + + + dialog->priv->chooser_widget = gdm_host_chooser_widget_new (dialog->priv->kind_mask); +- gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), dialog->priv->chooser_widget); ++ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), dialog->priv->chooser_widget, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (dialog->priv->chooser_widget), 5); + + gtk_dialog_add_buttons (GTK_DIALOG (dialog), + GTK_STOCK_REFRESH, GTK_RESPONSE_APPLY, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_CONNECT, GTK_RESPONSE_OK, + NULL); + + gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 12); + gtk_window_set_title (GTK_WINDOW (dialog), _("Select System")); + gtk_window_set_icon_name (GTK_WINDOW (dialog), "computer"); + + g_signal_connect (dialog, + "response", + G_CALLBACK (on_response), + dialog); + + gtk_widget_show_all (GTK_WIDGET (dialog)); + + return G_OBJECT (dialog); + } + + static void + gdm_host_chooser_dialog_dispose (GObject *object) + { + g_debug ("Disposing host_chooser_dialog"); + + G_OBJECT_CLASS (gdm_host_chooser_dialog_parent_class)->dispose (object); + } +-- +2.12.0 + diff --git a/SOURCES/0012-chooser-switch-to-browse-selection-mode.patch b/SOURCES/0012-chooser-switch-to-browse-selection-mode.patch new file mode 100644 index 0000000..9fac97b --- /dev/null +++ b/SOURCES/0012-chooser-switch-to-browse-selection-mode.patch @@ -0,0 +1,178 @@ +From bead5672f65d9a579143de16a7c72e701a346cce Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 15:22:06 -0400 +Subject: [PATCH 12/13] chooser: switch to browse selection mode + +The chooser is a host browser after all. It makes not sense to +have an unselected item. +--- + chooser/gdm-host-chooser-widget.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/chooser/gdm-host-chooser-widget.c b/chooser/gdm-host-chooser-widget.c +index b8924618..f8aabf3e 100644 +--- a/chooser/gdm-host-chooser-widget.c ++++ b/chooser/gdm-host-chooser-widget.c +@@ -124,89 +124,96 @@ find_known_host (GdmHostChooserWidget *widget, + GdmAddress *address) + { + GSList *li; + GdmChooserHost *host; + + for (li = widget->priv->chooser_hosts; li != NULL; li = li->next) { + host = li->data; + if (gdm_address_equal (gdm_chooser_host_get_address (host), address)) { + goto out; + } + } + + host = NULL; + out: + + return host; + } + + static void + browser_add_host (GdmHostChooserWidget *widget, + GdmChooserHost *host) + { + char *hostname; + char *name; + char *desc; + char *label; + GtkTreeModel *model; + GtkTreeIter iter; + gboolean res; + ++ GtkTreeSelection *selection; ++ + g_assert (host != NULL); + + if (! gdm_chooser_host_get_willing (host)) { + gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE); + return; + } + + res = gdm_address_get_hostname (gdm_chooser_host_get_address (host), &hostname); + if (! res) { + gdm_address_get_numeric_info (gdm_chooser_host_get_address (host), &hostname, NULL); + } + + name = g_markup_escape_text (hostname, -1); + desc = g_markup_escape_text (gdm_chooser_host_get_description (host), -1); + label = g_strdup_printf ("%s\n%s", name, desc); + g_free (name); + g_free (desc); + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget->priv->treeview)); + + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + gtk_list_store_set (GTK_LIST_STORE (model), + &iter, + CHOOSER_LIST_ICON_COLUMN, NULL, + CHOOSER_LIST_LABEL_COLUMN, label, + CHOOSER_LIST_HOST_COLUMN, host, + -1); + g_free (label); + ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget->priv->treeview)); ++ if (!gtk_tree_selection_get_selected (selection, NULL, NULL)) { ++ gtk_tree_selection_select_iter (selection, &iter); ++ } ++ + } + + static gboolean + decode_packet (GIOChannel *source, + GIOCondition condition, + GdmHostChooserWidget *widget) + { + struct sockaddr_storage clnt_ss; + GdmAddress *address; + int ss_len; + XdmcpHeader header; + int res; + static XdmcpBuffer buf; + ARRAY8 auth = {0}; + ARRAY8 host = {0}; + ARRAY8 stat = {0}; + char *status; + GdmChooserHost *chooser_host; + + status = NULL; + address = NULL; + + g_debug ("decode_packet: GIOCondition %d", (int)condition); + + if ( ! (condition & G_IO_IN)) { + return TRUE; + } + + ss_len = (int) sizeof (clnt_ss); + +@@ -777,61 +784,61 @@ on_row_activated (GtkTreeView *tree_view, + { + g_signal_emit (widget, signals[HOST_ACTIVATED], 0); + } + + static void + gdm_host_chooser_widget_init (GdmHostChooserWidget *widget) + { + GtkWidget *scrolled; + GtkTreeSelection *selection; + GtkTreeViewColumn *column; + GtkTreeModel *model; + + widget->priv = GDM_HOST_CHOOSER_WIDGET_GET_PRIVATE (widget); + + scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), + GTK_SHADOW_IN); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start (GTK_BOX (widget), scrolled, TRUE, TRUE, 0); + + widget->priv->treeview = gtk_tree_view_new (); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (widget->priv->treeview), FALSE); + g_signal_connect (widget->priv->treeview, + "row-activated", + G_CALLBACK (on_row_activated), + widget); + gtk_container_add (GTK_CONTAINER (scrolled), widget->priv->treeview); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget->priv->treeview)); +- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); ++ gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); + g_signal_connect (selection, "changed", + G_CALLBACK (on_host_selected), + widget); + + model = (GtkTreeModel *)gtk_list_store_new (3, + GDK_TYPE_PIXBUF, + G_TYPE_STRING, + G_TYPE_POINTER); + gtk_tree_view_set_model (GTK_TREE_VIEW (widget->priv->treeview), model); + + column = gtk_tree_view_column_new_with_attributes ("Icon", + gtk_cell_renderer_pixbuf_new (), + "pixbuf", CHOOSER_LIST_ICON_COLUMN, + NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (widget->priv->treeview), column); + + column = gtk_tree_view_column_new_with_attributes ("Hostname", + gtk_cell_renderer_text_new (), + "markup", CHOOSER_LIST_LABEL_COLUMN, + NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (widget->priv->treeview), column); + + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), + CHOOSER_LIST_LABEL_COLUMN, + GTK_SORT_ASCENDING); + } + + static void + gdm_host_chooser_widget_finalize (GObject *object) + { +-- +2.12.0 + diff --git a/SOURCES/0013-chooser-filter-out-duplicate-hostnames.patch b/SOURCES/0013-chooser-filter-out-duplicate-hostnames.patch new file mode 100644 index 0000000..c0abd1e --- /dev/null +++ b/SOURCES/0013-chooser-filter-out-duplicate-hostnames.patch @@ -0,0 +1,125 @@ +From d32365ddb729e94f7ebf650ef526f7f5319dfe4c Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 31 Mar 2017 15:40:21 -0400 +Subject: [PATCH 13/13] chooser: filter out duplicate hostnames + +One host may report itself on multiple interfaces. +GDM only supports based on hostname not interface, +so that leads duplicate entries in the list. + +This commit filters out the dupes. +--- + chooser/gdm-host-chooser-widget.c | 34 +++++++++++++++++++++++++++++++++- + 1 file changed, 33 insertions(+), 1 deletion(-) + +diff --git a/chooser/gdm-host-chooser-widget.c b/chooser/gdm-host-chooser-widget.c +index f8aabf3e..e2507900 100644 +--- a/chooser/gdm-host-chooser-widget.c ++++ b/chooser/gdm-host-chooser-widget.c +@@ -92,70 +92,102 @@ static void gdm_host_chooser_widget_finalize (GObject * + + G_DEFINE_TYPE (GdmHostChooserWidget, gdm_host_chooser_widget, GTK_TYPE_VBOX) + + #define GDM_XDMCP_PROTOCOL_VERSION 1001 + #define SCAN_TIMEOUT 30 + #define PING_TIMEOUT 2 + #define PING_TRIES 3 + + enum { + CHOOSER_LIST_ICON_COLUMN = 0, + CHOOSER_LIST_LABEL_COLUMN, + CHOOSER_LIST_HOST_COLUMN + }; + + static void + chooser_host_add (GdmHostChooserWidget *widget, + GdmChooserHost *host) + { + widget->priv->chooser_hosts = g_slist_prepend (widget->priv->chooser_hosts, host); + } + + #if 0 + static void + chooser_host_remove (GdmHostChooserWidget *widget, + GdmChooserHost *host) + { + widget->priv->chooser_hosts = g_slist_remove (widget->priv->chooser_hosts, host); + } + #endif + ++static gboolean ++address_hostnames_equal (GdmAddress *address, ++ GdmAddress *other_address) ++{ ++ char *hostname, *other_hostname; ++ gboolean are_equal; ++ ++ if (gdm_address_equal (address, other_address)) { ++ return TRUE; ++ } ++ ++ if (!gdm_address_get_hostname (address, &hostname)) { ++ gdm_address_get_numeric_info (address, &hostname, NULL); ++ } ++ ++ if (!gdm_address_get_hostname (other_address, &other_hostname)) { ++ gdm_address_get_numeric_info (other_address, &other_hostname, NULL); ++ } ++ ++ are_equal = g_strcmp0 (hostname, other_hostname) == 0; ++ ++ g_free (hostname); ++ g_free (other_hostname); ++ ++ return are_equal; ++} ++ + static GdmChooserHost * + find_known_host (GdmHostChooserWidget *widget, + GdmAddress *address) + { + GSList *li; + GdmChooserHost *host; + + for (li = widget->priv->chooser_hosts; li != NULL; li = li->next) { ++ GdmAddress *other_address; ++ + host = li->data; +- if (gdm_address_equal (gdm_chooser_host_get_address (host), address)) { ++ ++ other_address = gdm_chooser_host_get_address (host); ++ ++ if (address_hostnames_equal (address, other_address)) { + goto out; + } + } + + host = NULL; + out: + + return host; + } + + static void + browser_add_host (GdmHostChooserWidget *widget, + GdmChooserHost *host) + { + char *hostname; + char *name; + char *desc; + char *label; + GtkTreeModel *model; + GtkTreeIter iter; + gboolean res; + + GtkTreeSelection *selection; + + g_assert (host != NULL); + + if (! gdm_chooser_host_get_willing (host)) { + gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE); + return; + } +-- +2.12.0 + diff --git a/SOURCES/audit-4.patch b/SOURCES/audit-4.patch new file mode 100644 index 0000000..54d5b1d --- /dev/null +++ b/SOURCES/audit-4.patch @@ -0,0 +1,147 @@ +From 328f7544bf77891b76af091af8e179f4e003050a Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 3 Jul 2015 14:39:33 -0400 +Subject: [PATCH] server: add -audit 4 to default flags + +--- + daemon/gdm-server.c | 2 +- + daemon/gdm-x-session.c | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c +index 6357d344..2e8c0562 100644 +--- a/daemon/gdm-server.c ++++ b/daemon/gdm-server.c +@@ -199,61 +199,61 @@ gdm_server_launch_sigusr1_thread_if_needed (void) + static GThread *sigusr1_thread; + + if (sigusr1_thread == NULL) { + sigusr1_thread = g_thread_new ("gdm SIGUSR1 catcher", sigusr1_thread_main, NULL); + + g_mutex_lock (&sigusr1_thread_mutex); + while (!sigusr1_thread_running) + g_cond_wait (&sigusr1_thread_cond, &sigusr1_thread_mutex); + g_mutex_unlock (&sigusr1_thread_mutex); + } + } + + static void + gdm_server_init_command (GdmServer *server) + { + gboolean debug = FALSE; + const char *debug_options; + const char *verbosity = ""; + + if (server->priv->command != NULL) { + return; + } + + gdm_settings_direct_get_boolean (GDM_KEY_DEBUG, &debug); + if (debug) { + debug_options = " -logverbose 7 -core "; + } else { + debug_options = ""; + } + +-#define X_SERVER_ARG_FORMAT " -background none -noreset -verbose %s%s" ++#define X_SERVER_ARG_FORMAT " -background none -noreset -audit 4 -verbose %s%s" + + /* This is a temporary hack to work around the fact that XOrg + * currently lacks support for multi-seat hotplugging for + * display devices. This bit should be removed as soon as XOrg + * gains native support for automatically enumerating usb + * based graphics adapters at start-up via udev. */ + + /* systemd ships an X server wrapper tool which simply invokes + * the usual X but ensures it only uses the display devices of + * the seat. */ + + /* We do not rely on this wrapper server if, a) the machine + * wasn't booted using systemd, or b) the wrapper tool is + * missing, or c) we are running for the main seat 'seat0'. */ + + #ifdef ENABLE_SYSTEMD_JOURNAL + /* For systemd, we don't have a log file but instead log to stdout, + so set it to the xserver's built-in default verbosity */ + if (debug) + verbosity = "7 -logfile /dev/null"; + else + verbosity = "3 -logfile /dev/null"; + #endif + + if (g_access (SYSTEMD_X_SERVER, X_OK) < 0) { + goto fallback; + } + + if (server->priv->display_seat_id == NULL || + strcmp (server->priv->display_seat_id, "seat0") == 0) { +diff --git a/daemon/gdm-x-session.c b/daemon/gdm-x-session.c +index b919e6e9..80fc09b8 100644 +--- a/daemon/gdm-x-session.c ++++ b/daemon/gdm-x-session.c +@@ -247,60 +247,62 @@ spawn_x_server (State *state, + } + + g_ptr_array_add (arguments, "-displayfd"); + g_ptr_array_add (arguments, display_fd_string); + + g_ptr_array_add (arguments, "-auth"); + g_ptr_array_add (arguments, auth_file); + + /* If we were compiled with Xserver >= 1.17 we need to specify + * '-listen tcp' as the X server dosen't listen on tcp sockets + * by default anymore. In older versions we need to pass + * -nolisten tcp to disable listening on tcp sockets. + */ + #ifdef HAVE_XSERVER_THAT_DEFAULTS_TO_LOCAL_ONLY + if (allow_remote_connections) { + g_ptr_array_add (arguments, "-listen"); + g_ptr_array_add (arguments, "tcp"); + } + #else + if (!allow_remote_connections) { + g_ptr_array_add (arguments, "-nolisten"); + g_ptr_array_add (arguments, "tcp"); + } + #endif + + g_ptr_array_add (arguments, "-background"); + g_ptr_array_add (arguments, "none"); + + g_ptr_array_add (arguments, "-noreset"); + g_ptr_array_add (arguments, "-keeptty"); ++ g_ptr_array_add (arguments, "-audit"); ++ g_ptr_array_add (arguments, "4"); + + g_ptr_array_add (arguments, "-verbose"); + if (state->debug_enabled) { + g_ptr_array_add (arguments, "7"); + } else { + g_ptr_array_add (arguments, "3"); + } + + if (state->debug_enabled) { + g_ptr_array_add (arguments, "-core"); + } + g_ptr_array_add (arguments, NULL); + + subprocess = g_subprocess_launcher_spawnv (launcher, + (const char * const *) arguments->pdata, + &error); + g_free (display_fd_string); + g_clear_object (&launcher); + g_ptr_array_free (arguments, TRUE); + + if (subprocess == NULL) { + g_debug ("could not start X server: %s", error->message); + goto out; + } + + input_stream = g_unix_input_stream_new (pipe_fds[0], TRUE); + data_stream = g_data_input_stream_new (input_stream); + g_clear_object (&input_stream); + + display_number = g_data_input_stream_read_line (data_stream, +-- +2.11.1 + diff --git a/SOURCES/classic-session.patch b/SOURCES/classic-session.patch new file mode 100644 index 0000000..ddaeae7 --- /dev/null +++ b/SOURCES/classic-session.patch @@ -0,0 +1,194 @@ +From b8c0d62a660b7a48993feef40947a79be80f729f Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 3 Apr 2013 10:28:09 -0400 +Subject: [PATCH] session: change default session + +We default to gnome-classic in rhel, unless overridden +by /etc/sysconfig/desktop +--- + daemon/gdm-session.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 100 insertions(+) + +diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c +index e69291fb..81341554 100644 +--- a/daemon/gdm-session.c ++++ b/daemon/gdm-session.c +@@ -492,75 +492,175 @@ get_session_command_for_name (GdmSession *self, + gboolean res; + char *filename; + + filename = g_strdup_printf ("%s.desktop", name); + res = get_session_command_for_file (self, filename, command); + g_free (filename); + + return res; + } + + static const char * + get_default_language_name (GdmSession *self) + { + const char *default_language; + + if (self->priv->saved_language != NULL) { + return self->priv->saved_language; + } + + default_language = g_hash_table_lookup (self->priv->environment, + "LANG"); + + if (default_language != NULL) { + return default_language; + } + + return setlocale (LC_MESSAGES, NULL); + } + + static const char * ++get_configured_default_session_name (GdmSession *self) ++{ ++ static const char *config_file = "/etc/sysconfig/desktop"; ++ const char *session_name = "gnome-classic"; ++ gchar *contents = NULL; ++ gchar *p; ++ gsize length; ++ GError *error; ++ GString *line; ++ GRegex *re; ++ ++ if (!g_file_test (config_file, G_FILE_TEST_EXISTS)) { ++ g_debug ("Cannot access '%s'", config_file); ++ return session_name; ++ } ++ ++ error = NULL; ++ if (!g_file_get_contents (config_file, &contents, &length, &error)) { ++ g_debug ("Failed to parse '%s': %s", ++ config_file, ++ (error && error->message) ? error->message : "(null)"); ++ g_error_free (error); ++ return session_name; ++ } ++ ++ if (!g_utf8_validate (contents, length, NULL)) { ++ g_warning ("Invalid UTF-8 in '%s'", config_file); ++ g_free (contents); ++ return session_name; ++ } ++ ++ re = g_regex_new ("DESKTOP=\"?KDE\"?[ \t]*", 0, 0, &error); ++ if (re == NULL) { ++ g_warning ("Failed to regex: %s", ++ (error && error->message) ? error->message : "(null)"); ++ g_error_free (error); ++ g_free (contents); ++ return session_name; ++ } ++ ++ line = g_string_new (""); ++ for (p = contents; p && *p; p = g_utf8_find_next_char (p, NULL)) { ++ gunichar ch; ++ GMatchInfo *match_info = NULL; ++ ++ ch = g_utf8_get_char (p); ++ if ((ch != '\n') && (ch != '\0')) { ++ g_string_append_unichar (line, ch); ++ continue; ++ } ++ ++ if (line->str && g_utf8_get_char (line->str) == '#') { ++ goto next_line; ++ } ++ ++ if (!g_regex_match (re, line->str, 0, &match_info)) { ++ goto next_line; ++ } ++ ++ if (!g_match_info_matches (match_info)) { ++ goto next_line; ++ } ++ ++ session_name = "1-kde-plasma-standard"; ++ break; ++ ++next_line: ++ g_match_info_free (match_info); ++ g_string_set_size (line, 0); ++ } ++ ++ g_string_free (line, TRUE); ++ g_regex_unref (re); ++ g_free (contents); ++ ++ return session_name; ++} ++ ++static const char * + get_fallback_session_name (GdmSession *self) + { + const char **search_dirs; ++ const char *configured_session; + int i; + char *name; + GSequence *sessions; + GSequenceIter *session; + + if (self->priv->fallback_session_name != NULL) { + /* verify that the cached version still exists */ + if (get_session_command_for_name (self, self->priv->fallback_session_name, NULL)) { + goto out; + } + } + ++ configured_session = get_configured_default_session_name (self); ++ ++ name = g_strdup (configured_session); ++ if (get_session_command_for_name (self, name, NULL)) { ++ g_free (self->priv->fallback_session_name); ++ self->priv->fallback_session_name = name; ++ goto out; ++ } ++ g_free (name); ++ ++ if (g_strcmp0 (configured_session, "gnome-classic") != 0) { ++ name = g_strdup ("gnome-classic"); ++ if (get_session_command_for_name (self, name, NULL)) { ++ g_free (self->priv->fallback_session_name); ++ self->priv->fallback_session_name = name; ++ goto out; ++ } ++ g_free (name); ++ } ++ + name = g_strdup ("gnome"); + if (get_session_command_for_name (self, name, NULL)) { + g_free (self->priv->fallback_session_name); + self->priv->fallback_session_name = name; + goto out; + } + g_free (name); + + sessions = g_sequence_new (g_free); + + search_dirs = get_system_session_dirs (self); + for (i = 0; search_dirs[i] != NULL; i++) { + GDir *dir; + const char *base_name; + + dir = g_dir_open (search_dirs[i], 0, NULL); + + if (dir == NULL) { + continue; + } + + do { + base_name = g_dir_read_name (dir); + + if (base_name == NULL) { + break; + } + + if (!g_str_has_suffix (base_name, ".desktop")) { + continue; +-- +2.11.1 + diff --git a/SOURCES/clear-screen.patch b/SOURCES/clear-screen.patch new file mode 100644 index 0000000..b262864 --- /dev/null +++ b/SOURCES/clear-screen.patch @@ -0,0 +1,52 @@ +From ff7510f5594fe62b82c811c166713eecd916c27b Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 14 Mar 2014 11:04:49 -0400 +Subject: [PATCH] systemd: clear terminal after starting + +This helps with flicker when the X server shuts down. +--- + data/gdm.service.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/data/gdm.service.in b/data/gdm.service.in +index fb0ffdcf..9c876c70 100644 +--- a/data/gdm.service.in ++++ b/data/gdm.service.in +@@ -1,33 +1,34 @@ + [Unit] + Description=GNOME Display Manager + + # replaces the getty + Conflicts=getty@tty@GDM_INITIAL_VT@.service + After=getty@tty@GDM_INITIAL_VT@.service + + # replaces plymouth-quit since it quits plymouth on its own + Conflicts=@PLYMOUTH_QUIT_SERVICE@ + After=@PLYMOUTH_QUIT_SERVICE@ + + # Needs all the dependencies of the services it's replacing + # pulled from getty@.service and @PLYMOUTH_QUIT_SERVICE@ + # (except for plymouth-quit-wait.service since it waits until + # plymouth is quit, which we do) + After=rc-local.service plymouth-start.service systemd-user-sessions.service + + # GDM takes responsibility for stopping plymouth, so if it fails + # for any reason, make sure plymouth still stops + OnFailure=plymouth-quit.service + + [Service] + ExecStart=@sbindir@/gdm ++ExecStartPost=-/bin/bash -c "TERM=linux /usr/bin/clear > /dev/tty1" + KillMode=mixed + Restart=always + IgnoreSIGPIPE=no + BusName=org.gnome.DisplayManager + StandardOutput=syslog + StandardError=inherit + EnvironmentFile=-@LANG_CONFIG_FILE@ + + [Install] + Alias=display-manager.service +-- +2.11.1 + diff --git a/SOURCES/ja.po b/SOURCES/ja.po new file mode 100644 index 0000000..5b95641 --- /dev/null +++ b/SOURCES/ja.po @@ -0,0 +1,424 @@ +# gdm ja.po. +# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Yukihiro Nakai , 1999. +# ITANI Eiichiro , 1999. +# Takayuki KUSANO , 2000, 2010, 2012. +# Yukihior Nakai , 2000-2002. +# Taku YASUI , 2001. +# SATO Satoru , 2001, 2006. +# Akira TAGOH , 2001. +# KAMAGASAKO Masatoshi , 2003. +# Takeshi AIHANA , 2004-2009. +# Ryoichi INAGAKI , 2004. +# Hideki Yamane (Debian-JP) , 2009. +# Hideki Yamane , 2011. +# Noriko Mizumoto , 2012. +# Jiro Matsuzawa , 2013, 2014. +# Hajime Taira , 2015. +# kmoriguc , 2017. #zanata +# ljanda , 2017. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-16 15:21+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2017-05-22 12:35+0000\n" +"Last-Translator: kmoriguc \n" +"Language-Team: Japanese \n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Zanata 4.1.1\n" + +#: ../chooser/gdm-host-chooser-dialog.c:147 +msgid "Select System" +msgstr "システムの選択" + +#: ../chooser/gdm-host-chooser-widget.c:254 +msgid "XDMCP: Could not create XDMCP buffer!" +msgstr "XDMCP: XDMCP のバッファーを生成できませんでした" + +#: ../chooser/gdm-host-chooser-widget.c:260 +msgid "XDMCP: Could not read XDMCP header!" +msgstr "XDMCP: XDMCP のヘッダーを読み取れませんでした" + +#: ../chooser/gdm-host-chooser-widget.c:266 +msgid "XDMCP: Incorrect XDMCP version!" +msgstr "XDMCP: XDMCP のバージョンが間違っています!" + +#: ../chooser/gdm-host-chooser-widget.c:272 +msgid "XDMCP: Unable to parse address" +msgstr "XDMCP: アドレスを解析できません" + +#: ../common/gdm-common.c:298 +#, c-format +msgid "/dev/urandom is not a character device" +msgstr "/dev/urandom はキャラクターデバイスではありません" + +#: ../common/gdm-common.c:468 ../libgdm/gdm-user-switching.c:209 +#, c-format +msgid "Could not identify the current session." +msgstr "現在のセッションを取得できませんでした。" + +#: ../common/gdm-common.c:477 ../libgdm/gdm-user-switching.c:218 +#, c-format +msgid "Could not identify the current seat." +msgstr "現在のシートを識別できませんでした。" + +#: ../common/gdm-common.c:487 ../libgdm/gdm-user-switching.c:228 +#, c-format +msgid "" +"The system is unable to determine whether to switch to an existing login " +"screen or start up a new login screen." +msgstr "既存のログイン画面に切り替えるか、新しいログイン画面を起動するのかを、システムが決定することができませんでした。" + +#: ../common/gdm-common.c:495 ../libgdm/gdm-user-switching.c:236 +#, c-format +msgid "The system is unable to start up a new login screen." +msgstr "新しいログイン画面を起動できません。" + +#: ../daemon/gdm-display-access-file.c:300 +#, c-format +msgid "could not find user \"%s\" on system" +msgstr "システムに \"%s\" というユーザーは見つかりませんでした" + +#: ../daemon/gdm-legacy-display.c:235 +msgid "" +"Could not start the X server (your graphical environment) due to an internal " +"error. Please contact your system administrator or check your syslog to " +"diagnose. In the meantime this display will be disabled. Please restart GDM " +"when the problem is corrected." +msgstr "" +"何らかの内部エラーが原因で、X サーバー(グラフィカル環境)を起動できませんでした。システム管理者に問い合わせるか、syslog " +"の内容をチェックして調査してみてください。とりあえず、このディスプレイを無効にします。問題が解決したら GDM を再起動してください。" + +#: ../daemon/gdm-manager.c:772 +msgid "No display available" +msgstr "利用できるディスプレイがありません" + +#: ../daemon/gdm-manager.c:841 ../daemon/gdm-manager.c:1114 +msgid "No session available" +msgstr "利用できるセッションがありません" + +#: ../daemon/gdm-manager.c:859 +msgid "Chooser session unavailable" +msgstr "選択したセッションは利用できません" + +#: ../daemon/gdm-manager.c:869 +msgid "Can only be called before user is logged in" +msgstr "ユーザーがログインする前にしか呼び出しできません" + +#: ../daemon/gdm-manager.c:880 +msgid "Caller not GDM" +msgstr "呼び出し側が GDM ではありません" + +#: ../daemon/gdm-manager.c:890 +msgid "Unable to open private communication channel" +msgstr "プライベートコミュニケーションチャンネルを開けません" + +#: ../daemon/gdm-server.c:391 +#, c-format +msgid "Server was to be spawned by user %s but that user doesn't exist" +msgstr "ユーザー %s としてサーバーを起動しようとしましたが、そのようなユーザーは存在しません" + +#: ../daemon/gdm-server.c:402 ../daemon/gdm-server.c:422 +#, c-format +msgid "Couldn't set groupid to %d" +msgstr "グループ ID を %d に設定できませんでした" + +#: ../daemon/gdm-server.c:408 +#, c-format +msgid "initgroups () failed for %s" +msgstr "%s に対する initgroups () の呼び出しに失敗しました" + +#: ../daemon/gdm-server.c:414 +#, c-format +msgid "Couldn't set userid to %d" +msgstr "ユーザー ID を %d に設定できませんでした" + +#: ../daemon/gdm-server.c:492 +#, c-format +msgid "%s: Could not open log file for display %s!" +msgstr "%s: ディスプレイ (%s) のログファイルを開けません!" + +#: ../daemon/gdm-server.c:513 ../daemon/gdm-server.c:519 +#: ../daemon/gdm-server.c:525 +#, c-format +msgid "%s: Error setting %s to %s" +msgstr "%s: %s を %s に設定する際にエラー" + +#: ../daemon/gdm-server.c:545 +#, c-format +msgid "%s: Server priority couldn't be set to %d: %s" +msgstr "%s: サーバーの優先度を %d にセットできませんでした: %s" + +#: ../daemon/gdm-server.c:697 +#, c-format +msgid "%s: Empty server command for display %s" +msgstr "%s: ディスプレイ (%s) のサーバーコマンドが空です" + +#: ../daemon/gdm-session-auditor.c:90 +msgid "Username" +msgstr "ユーザー名" + +#: ../daemon/gdm-session-auditor.c:91 +msgid "The username" +msgstr "ユーザー名です" + +#: ../daemon/gdm-session-auditor.c:95 +msgid "Hostname" +msgstr "ホスト名" + +#: ../daemon/gdm-session-auditor.c:96 +msgid "The hostname" +msgstr "ホスト名です" + +#: ../daemon/gdm-session-auditor.c:101 +msgid "Display Device" +msgstr "ディスプレイのデバイス" + +#: ../daemon/gdm-session-auditor.c:102 +msgid "The display device" +msgstr "ディスプレイのデバイスです" + +#: ../daemon/gdm-session.c:1314 +msgid "Could not create authentication helper process" +msgstr "認証ヘルパーのプロセスを作成できませんでした" + +#: ../daemon/gdm-session-worker.c:641 +msgid "Your account was given a time limit that's now passed." +msgstr "アカウントに設定されていた有効期限が切れました。" + +#: ../daemon/gdm-session-worker.c:648 +msgid "Sorry, that didn't work. Please try again." +msgstr "認証に失敗しました。やり直してください。" + +#: ../daemon/gdm-session-worker.c:1036 +msgid "Username:" +msgstr "ユーザー名:" + +#: ../daemon/gdm-session-worker.c:1538 ../daemon/gdm-session-worker.c:1555 +#, c-format +msgid "no user account available" +msgstr "利用できるアカウントがありません" + +#: ../daemon/gdm-session-worker.c:1582 +msgid "Unable to change to user" +msgstr "ユーザーを変更できません" + +#: ../daemon/gdm-wayland-session.c:470 +msgid "GNOME Display Manager Wayland Session Launcher" +msgstr "GNOME ディスプレイマネージャー Wayland セッションランチャー" + +#: ../daemon/gdm-xdmcp-display-factory.c:612 +msgid "Could not create socket!" +msgstr "ソケットを生成できませんでした" + +#: ../daemon/gdm-x-session.c:814 +msgid "Run program through /etc/gdm/Xsession wrapper script" +msgstr "/etc/gdm/Xsession のラッパースクリプトを介してプログラムを起動する" + +#: ../daemon/gdm-x-session.c:815 +msgid "Listen on TCP socket" +msgstr "TCP ソケットでリッスンする" + +#: ../daemon/gdm-x-session.c:826 +msgid "GNOME Display Manager X Session Launcher" +msgstr "GNOME ディスプレイマネージャー X セッションランチャー" + +#: ../daemon/main.c:125 ../daemon/main.c:138 +#, c-format +msgid "Cannot write PID file %s: possibly out of disk space: %s" +msgstr "PID ファイル %s に書き込めません; ディスクの空き容量が足りないようです: %s" + +#: ../daemon/main.c:182 +#, c-format +msgid "Failed to create ran once marker dir %s: %s" +msgstr "起動済みマーカーディレクトリ %s の作成に失敗しました: %s" + +#: ../daemon/main.c:188 +#, c-format +msgid "Failed to create LogDir %s: %s" +msgstr "ログディレクトリ %s の作成に失敗しました: %s" + +#: ../daemon/main.c:223 +#, c-format +msgid "Can't find the GDM user '%s'. Aborting!" +msgstr "GDM ユーザー '%s' が見つからないので処理を中止します!" + +#: ../daemon/main.c:229 +msgid "The GDM user should not be root. Aborting!" +msgstr "root を GDM ユーザーにしないでください; 処理を中止します!" + +#: ../daemon/main.c:235 +#, c-format +msgid "Can't find the GDM group '%s'. Aborting!" +msgstr "GDM グループ '%s' が見つからないので処理を中止します!" + +#: ../daemon/main.c:241 +msgid "The GDM group should not be root. Aborting!" +msgstr "root を GDM グループにしないでください; 処理を中止します!" + +#: ../daemon/main.c:318 +msgid "Make all warnings fatal" +msgstr "警告をすべて致命的にする" + +#: ../daemon/main.c:319 +msgid "Exit after a time (for debugging)" +msgstr "時間が経過したら終了する (デバッグ用)" + +#: ../daemon/main.c:320 +msgid "Print GDM version" +msgstr "GDM のバージョンを表示する" + +#: ../daemon/main.c:333 +msgid "GNOME Display Manager" +msgstr "GNOME ディスプレイマネージャー" + +#. make sure the pid file doesn't get wiped +#: ../daemon/main.c:381 +msgid "Only the root user can run GDM" +msgstr "root ユーザーのみが GDM を起動できます" + +#. Translators: worker is a helper process that does the work +#. of starting up a session +#: ../daemon/session-worker-main.c:94 +msgid "GNOME Display Manager Session Worker" +msgstr "GDM セッションワーカー" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:1 +msgid "Whether or not to allow fingerprint readers for login" +msgstr "指紋リーダーによるログイン認証を許可する" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:2 +msgid "" +"The login screen can optionally allow users who have enrolled their " +"fingerprints to log in using those prints." +msgstr "ログイン画面では、指紋を登録したユーザーがそれを使ってログインするのを任意に許可することができます。" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:3 +msgid "Whether or not to allow smartcard readers for login" +msgstr "スマートカードリーダーによるログイン認証を許可する" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:4 +msgid "" +"The login screen can optionally allow users who have smartcards to log in " +"using those smartcards." +msgstr "ログイン画面では、スマートカードを持つユーザーがスマートカードを使ってログインするのを任意に許可することができます。" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:5 +msgid "Whether or not to allow passwords for login" +msgstr "パスワードによるログイン認証を許可する" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:6 +msgid "" +"The login screen can be configured to disallow password authentication, " +"forcing the user to use smartcard or fingerprint authentication." +msgstr "ログイン画面では、パスワード認証を無効化して、スマートカードや指紋による認証をユーザーに強制するよう設定できます。" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:7 +msgid "Path to small image at top of user list" +msgstr "ユーザーリストの一番上にある小さな画像へのパス" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:8 +msgid "" +"The login screen can optionally show a small image to provide site " +"administrators and distributions a way to display branding." +msgstr "ログイン画面では、サイトの管理者やディストリビューションがブランドを示す方法として、小さな画像を任意で表示できます。" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:9 +msgid "" +"The fallback login screen can optionally show a small image to provide site " +"administrators and distributions a way to display branding." +msgstr "フォールバックログイン画面では、サイトの管理者やディストリビューションがブランドを示す方法として、小さな画像を表示することもできます。" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:10 +msgid "Avoid showing user list" +msgstr "ユーザー一覧を表示しない" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:11 +msgid "" +"The login screen normally shows a list of available users to log in as. This " +"setting can be toggled to disable showing the user list." +msgstr "ログインスクリーンでは、利用可能なユーザーが通常表示されています。この設定ではユーザー一覧表示を無効に設定可能です。" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:12 +msgid "Enable showing the banner message" +msgstr "バナーメッセージを表示するかどうか" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:13 +msgid "Set to true to show the banner message text." +msgstr "true にすると、バナーメッセージを表示します。" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:14 +msgid "Banner message text" +msgstr "バナーメッセージの文字列" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:15 +msgid "Text banner message to show in the login window." +msgstr "ログインウィンドウに表示するバナーメッセージの文字列です。" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:16 +msgid "Disable showing the restart buttons" +msgstr "再起動のボタンを表示しないかどうか" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:17 +msgid "" +"Set to true to disable showing the restart buttons in the login window." +msgstr "true にすると、ログインウィンドウに再起動のボタンが表示されなくなります。" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:18 +msgid "Number of allowed authentication failures" +msgstr "許容できる認証失敗の回数です" + +#: ../data/org.gnome.login-screen.gschema.xml.in.h:19 +msgid "" +"The number of times a user is allowed to attempt authentication, before " +"giving up and going back to user selection." +msgstr "ユーザーが認証を試行できる回数です。この回数を失敗すると、ユーザー選択に戻ることになります。" + +#: ../libgdm/gdm-user-switching.c:59 +msgid "Unable to create transient display: " +msgstr "一時的なディスプレイを作成できません:" + +#: ../libgdm/gdm-user-switching.c:90 +msgid "Unable to activate session: " +msgstr "セッションを開始することができません:" + +#: ../utils/gdmflexiserver.c:45 +msgid "Only the VERSION command is supported" +msgstr "VERSION コマンドのみがサポートされています" + +#: ../utils/gdmflexiserver.c:45 +msgid "COMMAND" +msgstr "COMMAND" + +#: ../utils/gdmflexiserver.c:46 ../utils/gdmflexiserver.c:47 +#: ../utils/gdmflexiserver.c:49 ../utils/gdmflexiserver.c:50 +msgid "Ignored — retained for compatibility" +msgstr "無視しました - 下位互換のために残してあるだけです" + +#: ../utils/gdmflexiserver.c:48 ../utils/gdm-screenshot.c:43 +msgid "Debugging output" +msgstr "デバッグ情報を出力する" + +#: ../utils/gdmflexiserver.c:52 +msgid "Version of this application" +msgstr "バージョンを表示する" + +#. Option parsing +#: ../utils/gdmflexiserver.c:137 +msgid "- New GDM login" +msgstr "- 新しい GDM のログイン" + +#: ../utils/gdm-screenshot.c:212 +msgid "Screenshot taken" +msgstr "スクリーンショットの撮影" + +#. Option parsing +#: ../utils/gdm-screenshot.c:279 +msgid "Take a picture of the screen" +msgstr "画面のスクリーンショットを撮る" + diff --git a/SOURCES/org.gnome.login-screen.gschema.override b/SOURCES/org.gnome.login-screen.gschema.override new file mode 100644 index 0000000..6c56276 --- /dev/null +++ b/SOURCES/org.gnome.login-screen.gschema.override @@ -0,0 +1,3 @@ +[org.gnome.login-screen] +logo='/usr/share/pixmaps/fedora-gdm-logo.png' +enable-smartcard-authentication=true diff --git a/SOURCES/system-dconf.patch b/SOURCES/system-dconf.patch new file mode 100644 index 0000000..617817c --- /dev/null +++ b/SOURCES/system-dconf.patch @@ -0,0 +1,24 @@ +From 29d374ce6781df6f3b168a8c57163ddb582c998a Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 31 Jul 2013 17:32:55 -0400 +Subject: [PATCH] data: add system dconf databases to gdm profile + +This way system settings can affect the login screen. +--- + data/dconf/gdm.in | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/data/dconf/gdm.in b/data/dconf/gdm.in +index 4d8bf174..9694078f 100644 +--- a/data/dconf/gdm.in ++++ b/data/dconf/gdm.in +@@ -1,2 +1,6 @@ + user-db:user ++system-db:gdm ++system-db:local ++system-db:site ++system-db:distro + file-db:@DATADIR@/@PACKAGE@/greeter-dconf-defaults +-- +2.11.1 + diff --git a/SPECS/gdm.spec b/SPECS/gdm.spec new file mode 100644 index 0000000..eda43c1 --- /dev/null +++ b/SPECS/gdm.spec @@ -0,0 +1,2945 @@ +%global _changelog_trimtime %(date +%s -d "1 year ago") +%global _hardened_build 1 + +%define libauditver 1.0.6 +%define pango_version 1.2.0 +%define gtk3_version 2.99.2 +%define pam_version 0.99.8.1-11 +%define desktop_file_utils_version 0.2.90 +%define nss_version 3.11.1 +%define fontconfig_version 2.6.0 + +Summary: The GNOME Display Manager +Name: gdm +Version: 3.22.3 +Release: 13%{?dist} +Epoch: 1 +License: GPLv2+ +Group: User Interface/X +URL: http://download.gnome.org/sources/gdm +#VCS: git:git://git.gnome.org/gdm +Source: http://download.gnome.org/sources/gdm/3.22/gdm-%{version}.tar.xz +Source1: org.gnome.login-screen.gschema.override +Source2: ja.po +Patch0: 0001-Honor-initial-setup-being-disabled-by-distro-install.patch +Patch1: 0001-manager-be-more-robust-against-autologin-having-an-i.patch +Patch2: 0003-launch-environment-fix-crasher-when-session-mode-isn.patch +Patch3: 0004-manager-drop-some-erroneous-code.patch +Patch4: 0005-launch-environment-implement-hostname-selected-signa.patch +Patch5: 0006-manager-fix-up-support-for-chooser.patch +Patch6: 0007-xdmcp-display-don-t-set-MANAGED-until-we-ve-connecte.patch +Patch7: 0008-xdmcp-display-factory-fix-signal-prototype.patch +Patch8: 0009-xdmcp-display-factory-explicitly-stop-greeter-sessio.patch +Patch9: 0010-chooser-fix-duplicate-entry-in-the-list.patch +Patch10: 0011-chooser-make-host-list-fill-the-dialog.patch +Patch11: 0012-chooser-switch-to-browse-selection-mode.patch +Patch12: 0013-chooser-filter-out-duplicate-hostnames.patch + +Patch13: 0001-local-display-factory-add-missing-comma-to-fix-user-.patch + +Patch14: 0001-manager-make-sure-we-end-up-on-a-login-screen.patch +Patch15: 0002-manager-stop-transient-greeter-session-when-done-wit.patch +Patch16: 0001-manager-update-session-id-property-when-reusing-disp.patch + +Patch80: 0001-Revert-session-forward-is-initial-from-display-to-wo.patch +Patch81: 0001-worker-add-compat-patch-to-make-new-worker-work-with.patch +Patch82: 0001-legacy-display-ensure-X-server-is-dead-when-respawni.patch +Patch83: 0001-manager-fix-dangling-pointer-free.patch + +Patch95: audit-4.patch +Patch96: clear-screen.patch +Patch97: 0001-gdm.conf-custom.in-strip-out-reference-to-wayland.patch +Patch98: system-dconf.patch +Patch99: classic-session.patch + +BuildRequires: git +BuildRequires: pam-devel >= 0:%{pam_version} +BuildRequires: desktop-file-utils >= %{desktop_file_utils_version} +BuildRequires: libtool automake autoconf +BuildRequires: libattr-devel +BuildRequires: gettext +BuildRequires: libdmx-devel +BuildRequires: audit-libs-devel >= %{libauditver} +BuildRequires: autoconf automake libtool +BuildRequires: intltool +%ifnarch s390 s390x ppc ppc64 +BuildRequires: xorg-x11-server-Xorg +%endif +BuildRequires: nss-devel >= %{nss_version} +BuildRequires: pkgconfig(accountsservice) >= 0.6.3 +BuildRequires: pkgconfig(check) +BuildRequires: pkgconfig(gobject-introspection-1.0) +BuildRequires: pkgconfig(gtk+-3.0) >= %{gtk3_version} +BuildRequires: pkgconfig(iso-codes) +BuildRequires: pkgconfig(libcanberra-gtk3) +BuildRequires: pkgconfig(libselinux) +BuildRequires: pkgconfig(libsystemd) +BuildRequires: pkgconfig(ply-boot-client) +BuildRequires: pkgconfig(systemd) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xau) +BuildRequires: libXdmcp-devel +BuildRequires: systemd +BuildRequires: keyutils-libs-devel +BuildRequires: dconf + +Requires(pre): /usr/sbin/useradd +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +Provides: service(graphical-login) = %{name} + +Requires: accountsservice +Requires: audit-libs >= %{libauditver} +Requires: dconf +# since we use it, and pam spams the log if the module is missing +Requires: gnome-keyring-pam +Requires: gnome-session +Requires: gnome-settings-daemon >= 2.21.92 +Requires: gnome-shell +Requires: iso-codes +# We need 1.0.4-5 since it lets us use "localhost" in auth cookies +Requires: libXau >= 1.0.4-4 +Requires: pam >= 0:%{pam_version} +Requires: pulseaudio-gdm-hooks +Requires: /sbin/nologin +Requires: setxkbmap +Requires: systemd >= 186 +Requires: system-logos +Requires: xorg-x11-server-utils +Requires: xorg-x11-xinit + +Obsoletes: gdm-libs < 1:3.12.0-3 +Provides: gdm-libs%{?_isa} = %{epoch}:%{version}-%{release} + +# Swallow up old fingerprint/smartcard plugins +Obsoletes: gdm-plugin-smartcard < 1:3.2.1 +Provides: gdm-plugin-smartcard = %{epoch}:%{version}-%{release} + +Obsoletes: gdm-plugin-fingerprint < 1:3.2.1 +Provides: gdm-plugin-fingerprint = %{epoch}:%{version}-%{release} + +%description +GDM provides the graphical login screen, shown shortly after boot up, +log out, and when user-switching. + +%package devel +Summary: Development files for gdm +Group: Development/Libraries +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} + +%description devel +The gdm-devel package contains headers and other +files needed to build custom greeters. + +%prep +%autosetup -S git + +cp -f $RPM_SOURCE_DIR/ja.po po + +intltoolize --force --copy --automake +autoreconf --force --install --verbose + +%build + +%configure --with-pam-prefix=%{_sysconfdir} \ + --with-run-dir=/run/gdm \ + --with-default-path="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin" \ + --enable-split-authentication \ + --enable-profiling \ + --enable-console-helper \ + --with-plymouth \ + --disable-systemd-journal \ + --disable-user-display-server \ + --with-selinux + +# drop unneeded direct library deps with --as-needed +# libtool doesn't make this easy, so we do it the hard way +sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/ func_append compile_command " -Wl,-O1,--as-needed"\n func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool + +make %{?_smp_mflags} + + +%install +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gdm/Init +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gdm/PreSession +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gdm/PostSession + +make install DESTDIR=$RPM_BUILD_ROOT + +rm -f $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/gdm + +# add logo to shell greeter +cp %{SOURCE1} $RPM_BUILD_ROOT%{_datadir}/glib-2.0/schemas + +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/dconf/db/gdm.d/locks + +# docs go elsewhere +rm -rf $RPM_BUILD_ROOT/%{_prefix}/doc + +# create log dir +mkdir -p $RPM_BUILD_ROOT/var/log/gdm + +# remove the gdm Xsession as we're using the xdm one +rm -f $RPM_BUILD_ROOT%{_sysconfdir}/gdm/Xsession +(cd $RPM_BUILD_ROOT%{_sysconfdir}/gdm; ln -sf ../X11/xinit/Xsession .) + +rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-2.0/modules/*.a +rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-2.0/modules/*.la + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/gdm/autostart/LoginWindow + +mkdir -p $RPM_BUILD_ROOT/run/gdm + +find $RPM_BUILD_ROOT -name '*.a' -delete +find $RPM_BUILD_ROOT -name '*.la' -delete + +%find_lang gdm --with-gnome + +%pre +/usr/sbin/useradd -M -u 42 -d /var/lib/gdm -s /sbin/nologin -r gdm > /dev/null 2>&1 +/usr/sbin/usermod -d /var/lib/gdm -s /sbin/nologin gdm >/dev/null 2>&1 +# ignore errors, as we can't disambiguate between gdm already existed +# and couldn't create account with the current adduser. +exit 0 + +%post +/sbin/ldconfig +touch --no-create /usr/share/icons/hicolor >&/dev/null || : + +# if the user already has a config file, then migrate it to the new +# location; rpm will ensure that old file will be renamed + +custom=/etc/gdm/custom.conf + +if [ $1 -ge 2 ] ; then + if [ -f /usr/share/gdm/config/gdm.conf-custom ]; then + oldconffile=/usr/share/gdm/config/gdm.conf-custom + elif [ -f /etc/X11/gdm/gdm.conf ]; then + oldconffile=/etc/X11/gdm/gdm.conf + fi + + # Comment out some entries from the custom config file that may + # have changed locations in the update. Also move various + # elements to their new locations. + + [ -n "$oldconffile" ] && sed \ + -e 's@^command=/usr/X11R6/bin/X@#command=/usr/bin/Xorg@' \ + -e 's@^Xnest=/usr/X11R6/bin/Xnest@#Xnest=/usr/X11R6/bin/Xnest@' \ + -e 's@^BaseXsession=/etc/X11/xdm/Xsession@#BaseXsession=/etc/X11/xinit/Xsession@' \ + -e 's@^BaseXsession=/etc/X11/gdm/Xsession@#&@' \ + -e 's@^BaseXsession=/etc/gdm/Xsession@#&@' \ + -e 's@^Greeter=/usr/bin/gdmgreeter@#Greeter=/usr/libexec/gdmgreeter@' \ + -e 's@^RemoteGreeter=/usr/bin/gdmlogin@#RemoteGreeter=/usr/libexec/gdmlogin@' \ + -e 's@^GraphicalTheme=Bluecurve@#&@' \ + -e 's@^BackgroundColor=#20305a@#&@' \ + -e 's@^DefaultPath=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin@#&@' \ + -e 's@^RootPath=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin@#&@' \ + -e 's@^HostImageDir=/usr/share/hosts/@#HostImageDir=/usr/share/pixmaps/faces/@' \ + -e 's@^LogDir=/var/log/gdm@#&@' \ + -e 's@^PostLoginScriptDir=/etc/X11/gdm/PostLogin@#&@' \ + -e 's@^PreLoginScriptDir=/etc/X11/gdm/PreLogin@#&@' \ + -e 's@^PreSessionScriptDir=/etc/X11/gdm/PreSession@#&@' \ + -e 's@^PostSessionScriptDir=/etc/X11/gdm/PostSession@#&@' \ + -e 's@^DisplayInitDir=/var/run/gdm.pid@#&@' \ + -e 's@^RebootCommand=/sbin/reboot;/sbin/shutdown -r now;/usr/sbin/shutdown -r now;/usr/bin/reboot@#&@' \ + -e 's@^HaltCommand=/sbin/poweroff;/sbin/shutdown -h now;/usr/sbin/shutdown -h now;/usr/bin/poweroff@#&@' \ + -e 's@^ServAuthDir=/var/gdm@#&@' \ + -e 's@^Greeter=/usr/bin/gdmlogin@Greeter=/usr/libexec/gdmlogin@' \ + -e 's@^RemoteGreeter=/usr/bin/gdmgreeter@RemoteGreeter=/usr/libexec/gdmgreeter@' \ + $oldconffile > $custom +fi + +if [ $1 -ge 2 -a -f $custom ] && grep -q /etc/X11/gdm $custom ; then + sed -i -e 's@/etc/X11/gdm@/etc/gdm@g' $custom +fi + +%systemd_post gdm.service + +%preun +%gconf_schema_remove gdm-simple-greeter +%systemd_preun gdm.service + +%postun +/sbin/ldconfig +if [ $1 -eq 0 ]; then + touch --no-create %{_datadir}/icons/hicolor >&/dev/null || : + gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || : +fi + +if [ $1 -eq 0 ] ; then + /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : +fi +%systemd_postun + +%triggerun -- gdm < 1:3.14.2-1 +test -e %{_sysconfdir}/sysconfig/desktop && mv -f %{_sysconfdir}/sysconfig/desktop %{_sysconfdir}/sysconfig/desktop.rpmsave || : + +%posttrans +dconf update +gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || : +/usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : + +%files -f gdm.lang +%doc AUTHORS COPYING NEWS README + +%dir %{_sysconfdir}/gdm +%config(noreplace) %{_sysconfdir}/gdm/custom.conf +%config %{_sysconfdir}/gdm/Init/* +%config %{_sysconfdir}/gdm/PostLogin/* +%config %{_sysconfdir}/gdm/PreSession/* +%config %{_sysconfdir}/gdm/PostSession/* +%config %{_sysconfdir}/pam.d/gdm-autologin +%config %{_sysconfdir}/pam.d/gdm-password +# not config files +%{_sysconfdir}/gdm/Xsession +%{_datadir}/gdm/gdm.schemas +%{_sysconfdir}/dbus-1/system.d/gdm.conf +%dir %{_sysconfdir}/gdm/Init +%dir %{_sysconfdir}/gdm/PreSession +%dir %{_sysconfdir}/gdm/PostSession +%dir %{_sysconfdir}/gdm/PostLogin +%{_datadir}/pixmaps/*.png +%{_datadir}/glib-2.0/schemas/org.gnome.login-screen.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.login-screen.gschema.override +%{_libexecdir}/gdm-host-chooser +%{_libexecdir}/gdm-session-worker +%{_libexecdir}/gdm-simple-chooser +%{_libexecdir}/gdm-wayland-session +%{_libexecdir}/gdm-x-session +%{_sbindir}/gdm +%{_bindir}/gdmflexiserver +%{_bindir}/gdm-screenshot +%{_datadir}/dconf/profile/gdm +%{_datadir}/gdm/greeter/applications/* +%{_datadir}/gdm/greeter/autostart/* +%{_datadir}/gdm/greeter-dconf-defaults +%{_datadir}/gdm/locale.alias +%{_datadir}/gdm/gdb-cmd +%{_libdir}/girepository-1.0/Gdm-1.0.typelib +%{_libdir}/security/pam_gdm.so +%{_libdir}/libgdm*.so* +%dir %{_localstatedir}/log/gdm +%attr(1770, gdm, gdm) %dir %{_localstatedir}/lib/gdm +%attr(0711, root, gdm) %dir /run/gdm +%attr(1755, root, gdm) %dir %{_localstatedir}/cache/gdm +%dir %{_sysconfdir}/dconf/db/gdm.d/locks +%dir %{_sysconfdir}/dconf/db/gdm.d +%{_datadir}/icons/hicolor/*/*/*.png +%config %{_sysconfdir}/pam.d/gdm-pin +%config %{_sysconfdir}/pam.d/gdm-smartcard +%config %{_sysconfdir}/pam.d/gdm-fingerprint +%{_sysconfdir}/pam.d/gdm-launch-environment +%{_unitdir}/gdm.service + +%files devel +%dir %{_includedir}/gdm +%{_includedir}/gdm/*.h +%{_datadir}/gir-1.0/Gdm-1.0.gir +%{_libdir}/pkgconfig/gdm.pc + +%changelog +* Mon Dec 04 2017 Ray Strode - 3.22.3-13 +- fix reauth crash + Resolves: #1519250 + +* Wed Jul 12 2017 Ray Strode - 3.22.3-12 +- Ensure X server is dead after logout + Resolves: #1469755 + +* Tue May 30 2017 Ray Strode - 3.22.3-11 +- Add japanese translation + Resolves: #1449632 + +* Fri May 12 2017 Ray Strode - 3.22.3-10 +- Add patches to try to maintain some semblance of compatibility + when live upgrading between 7.3 and 7.4 + Related: #1448786 + +* Thu May 04 2017 Ray Strode - 3.22.3-9 +- Make sure reauthentication is run within the user + session. + Resolves:#1448209 + +* Wed Apr 05 2017 Ray Strode 3.22.3-8 +- Reap transient login screens when they are no longer needed +- Jump to login screen if we end up on a blank VT + Resolves: #1301028 + +* Mon Apr 03 2017 Ray Strode - 3.22.3-7 +- Fix user switching + Related: #1386862 + +* Fri Mar 31 2017 Ray Strode - 3.22.3-6 +- Fix indirect XDMCP + Resolves: #1273156 + +* Thu Mar 16 2017 Ray Strode - 3.22.3-5 +- Attempt to fix po file installation + Related: #1386862 + +* Thu Mar 16 2017 Ray Strode - 3.22.3-4 +- Drop reference to wayland in config file +- use autosetup to simplify spec maintenance + Related: #1386862 + +* Fri Mar 10 2017 Ray Strode - 3.22.3-3 +- Don't fall over if autologin user isn't available + Resolves #1373837 + +* Thu Mar 9 2017 Rui Matos - 1:3.22.3-2 +- Honor anaconda's firstboot being disabled + Resolves: #1226819 + +* Mon Mar 06 2017 Ray Strode - 3.22.3-1 +- Rebase to 3.22.3 + Resolves: #1386862 + +* Wed Sep 21 2016 Ray Strode - 3.14.2-19 +- Add error traps around XKillClient calls, fixes regression + on logout + Resolves: #1377987 + +* Tue Jul 19 2016 Ray Strode - 3.14.2-18 +- Fix unlock with XDMCP + Resolves: #1315342 +- Inform remote display about session exiting when using + XDMCP + Resolves: #1313059 + +* Tue Jul 12 2016 Ray Strode - 3.14.2-17 +- Add versioned requires with gnome-shell + Resolves: #1294546 + +* Wed Apr 20 2016 Ray Strode - 3.14.2-16 +- Be more resiliant against flakey DNS with XDMCP + Resolves: #1286631 + +* Wed Apr 20 2016 Ray Strode - 3.14.2-15 +- Fix language chooser on KDE only systems + Resolves: #1298753 + +* Tue Apr 19 2016 Ray Strode - 3.14.2-14 +- Fix ups to previous patch + Related: #1282577 + +* Mon Apr 18 2016 Ray Strode 3.14.2-13 +- Allow PostLogin script to show windows + Resolves: #1282577 + +* Tue Aug 18 2015 Ray Strode 3.14.2-12 +- don't log to systemd journal so logs end up in the same + place they did in 7.1 + Resolves: #1253055 + +* Wed Aug 05 2015 Ray Strode 3.14.2-11 +- Fix console spew on gdm downgrade + Resolves: #1247969 + +* Mon Jul 27 2015 Ray Strode 3.14.2-10 +- Fix console spew introduced in language change feature + Related: #1056181 + +* Fri Jul 17 2015 Ray Strode 3.14.2-9 +- Fix crasher in previous fix if /etc/sysconfig/desktop is not around + Related: #1141676 + +* Thu Jul 16 2015 Ray Strode 3.14.2-8 +- Honor /etc/sysconfig/desktop:DESKTOP=KDE to default to kde + Resolves: #1141676 + +* Wed Jul 15 2015 Ray Strode 3.14.2-7 +- Make sure GDM is shutdown orderly so it can be restarted okay + Related: #1174564 + Resolves: 1241227 + +* Fri Jul 03 2015 Ray Strode 3.14.2-6 +- Add -audit 4 to default server flags + Resolves: #1188665 + +* Thu Jul 02 2015 Ray Strode 3.14.2-5 +- Make sure lang changes are picked up on logout + Resolves: #1056181 + +* Thu Jun 25 2015 Ray Strode 3.14.2-4 +- Make sure user customizations to gdm via /etc/dconf/db/gdm.d + continue to work following rebase. + Related: #1174564 + +* Tue Jun 23 2015 Ray Strode 3.14.2-3 +- Add hack to make gdm work on machines that don't have video cards + Resolves: #1168502 + Related: 1230255 + +* Thu May 21 2015 Ray Strode 3.14.2-2 +- Add postlogin back to pam config + (spotted by rpmdiff) + Related: #1174564 + +* Mon Mar 30 2015 Ray Strode - 1:3.14.2-1 +- Update to 3.14.2 (based on work from Richard and Kalev) +- Drop upstreamed patches + Related: #1174564 + +* Thu Nov 13 2014 Ray Strode 3.8.4-32 +- Fix session chooser for smartcard login + Resolves: #1159056 + +* Mon Oct 06 2014 Ray Strode 3.8.4-31 +- Fix race that sometimes leads to 90 second stall at shutdown + Resolves: #1107811 + +* Fri Oct 03 2014 Ray Strode 3.8.4-30 +- Fix race in timed login + Resolves: #1043571 + +* Fri May 23 2014 Ray Strode 3.8.4-29 +- rebuild for dist confusion + Related: #1086189 + +* Mon Apr 28 2014 Ray Strode 3.8.4-28 +- Fix resource leak when reauthentication client is rejected + Resolves: #1086189 + +- Don't reject reauthentication clients with uids that don't + match the uid of those clients' logind sessions. + Related: #1086189 1057179 + +* Wed Apr 23 2014 Ray Strode 3.8.4-27 +- One more PATH logic update + Related: #1080153 + Resolves: 1091053 + +* Tue Apr 22 2014 Ray Strode 3.8.4-26 +- Adjust path setting logic one more time to preserve + /sbin and /bin ordering + Related: #1080153 + Resolves: 1091053 + +* Tue Apr 01 2014 Ray Strode 3.8.4-25 +- Set proper path for worker session + Resolves: #1080153 + +* Thu Mar 27 2014 Ray Strode 3.8.4-24 +- Obsolete user-switch applet + Related: #1072801 + +* Thu Mar 27 2014 Ray Strode 3.8.4-23 +- Make sure sessions running without seats can authenticate + Resolves: #1057179 + +* Thu Mar 27 2014 Ray Strode 3.8.4-22 +- More pam-gnome-keyring fixes + Resolves: #1057179 + +* Wed Mar 26 2014 Ray Strode 3.8.4-21 +- Fix problem introduced in clear-screen patch + Resolves: #1076222 + +* Wed Mar 19 2014 Ray Strode 3.8.4-20 +- Make sure root user can reauthenticate as well + Resolves: #1057179 + +* Wed Mar 12 2014 Ray Strode 3.8.4-18 +- Make sure pam_gnome_keyring gets notified when the password is changed + in the middle of first login. + Resolves: #1075714 + +* Wed Mar 12 2014 Ray Strode 3.8.4-17 +- Fix uninitialized variable warnings noticed defect scan + Resolves: #1057179 + +* Wed Mar 12 2014 Ray Strode 3.8.4-16 +- Allow reauthentication for non GDM sessions + Resolves: #1057179 + +* Mon Feb 03 2014 Ray Strode 3.8.4-15 +- Fail simple-slave gracefully when run manually with invalid data + Resolves: #1032179 + +* Fri Jan 31 2014 Ray Strode - 1:3.8.4-14 +- Fix empty username crash + Resolves: #1049965 + +* Wed Jan 29 2014 Ray Strode - 1:3.8.4-13 +- Fix infinite recursion -> crash + Resolves: #1032509 + +* Wed Jan 29 2014 Ray Strode - 1:3.8.4-12 +- Fix memory leak + Resolves: #1020885 + +* Fri Jan 24 2014 Daniel Mach - 1:3.8.4-11 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach - 1:3.8.4-10 +- Mass rebuild 2013-12-27 + +* Wed Dec 11 2013 Matthias Clasen 3.8.4-9 +- Update translations +- Resolves: #1030333 + +* Wed Nov 20 2013 Ray Strode 3.8.4-8 +- Set reauth mode when reauthenticating + Resolves: #1032154 + +* Fri Nov 01 2013 Ray Strode 3.8.4-7 +- Fix XDMCP + Related: #906397 + +* Tue Aug 27 2013 Ray Strode 3.8.4-5 +- Fix crasher reported in Upstream bug 706409 + +* Wed Aug 21 2013 Ray Strode 3.8.4-4 +- Don't force smartcard authentication disabled + Related: #990630 + +* Wed Aug 21 2013 Ray Strode 3.8.4-3 +- default to classic session (again) + +* Wed Jul 31 2013 Ray Strode 3.8.4-2 +- Hook up system dconf databases to login screen + Related: #990630 + +* Tue Jul 30 2013 Ray Strode - 3.8.4-1 +- Update to 3.8.4 + +* Sat Jun 22 2013 Matthias Clasen - 3.8.3-2 +- Trim %%changelog + +* Fri Jun 14 2013 Ray Strode 3.8.3-1 +- Update to 3.8.3 + +* Tue May 21 2013 Matthias Clasen 1:3.8.1.1-6 +- Don't include the fallback greeter + +* Mon May 20 2013 Ray Strode 1:3.8.1.1-5 +- Fix permissions on /run/gdm + Resolves: #fudge + (http://lists.fedoraproject.org/pipermail/devel/2013-May/182906.html) + +* Mon May 20 2013 Ray Strode 1:3.8.1.1-4 +- Require gnome-shell. We no longer use the fallback greeter. + (Since gdm 3.7.92). + +* Fri May 17 2013 Ray Strode - 1:3.8.1.1-3 +- Build with -fpie + Resolves: #955154 + +* Thu May 16 2013 Florian Müllner - 1:3.8.1.1-2 +- Update branding + +* Wed Apr 17 2013 Richard Hughes - 1:3.8.1.1-1 +- Update to 3.8.1.1 + +* Mon Apr 15 2013 Kalev Lember - 1:3.8.1-1 +- Update to 3.8.1 + +* Mon Apr 01 2013 Kalev Lember - 1:3.8.0-2 +- Drop the metacity dep now that the fallback greeter is gone + +* Tue Mar 26 2013 Kalev Lember - 1:3.8.0-1 +- Update to 3.8.0 + +* Thu Mar 21 2013 Kalev Lember - 1:3.7.92-2 +- Drop the polkit-gnome dep now that the fallback greeter is gone + +* Wed Mar 20 2013 Richard Hughes - 1:3.7.92-1 +- Update to 3.7.92 + +* Wed Mar 6 2013 Matthias Clasen 3.7.91-1 +- Update to 3.7.91 + +* Wed Feb 27 2013 Ray Strode 3.7.90-3 +- Fix up runtime dir for real + +* Tue Feb 26 2013 Ray Strode 3.7.90-2 +- Fix up runtime dir path (spotted by dwalsh) + +* Fri Feb 22 2013 Kalev Lember - 1:3.7.90-1 +- Update to 3.7.90 + +* Wed Feb 06 2013 Kalev Lember - 1:3.7.5-1 +- Update to 3.7.5 + +* Wed Jan 09 2013 Richard Hughes - 1:3.7.3.1-1 +- Update to 3.7.3.1 + +* Tue Nov 20 2012 Richard Hughes - 1:3.7.2-1 +- Update to 3.7.2 + +* Tue Nov 20 2012 Matthias Clasen - 1:3.6.2-2 +- Remove patch fuzz of 999 + +* Wed Nov 14 2012 Kalev Lember - 1:3.6.2-1 +- Update to 3.6.2 + +* Mon Nov 05 2012 Ray Strode - 1:3.6.1-4 +- Fix GDM auth cookie problem + Related: #870695 + +* Mon Oct 29 2012 Matthias Clasen - 1:3.6.1-3 +- Add ppc to %%ExcludeArch + +* Thu Oct 18 2012 Matthias Clasen - 1:3.6.1-2 +- Require gnome-icon-theme-symbolic (#867718) + +* Tue Oct 16 2012 Kalev Lember - 1:3.6.1-1 +- Update to 3.6.1 + +* Tue Sep 25 2012 Richard Hughes - 1:3.6.0-1 +- Update to 3.6.0 + +* Wed Sep 19 2012 Matthias Clasen 1:3.5.92.1-1 +- Update to 3.5.92.1 + +* Fri Sep 07 2012 Ray Strode 1:3.5.91-2 +- Fix autologin +- Fix selinux context after forking session + +* Thu Sep 06 2012 Richard Hughes - 1:3.5.91-1 +- Update to 3.5.91 + +* Tue Aug 21 2012 Richard Hughes - 1:3.5.90-1 +- Update to 3.5.90 + +* Tue Aug 7 2012 Lennart Poettering - 1:3.5.5-2 +- https://fedoraproject.org/wiki/Features/DisplayManagerRework +- https://bugzilla.redhat.com/show_bug.cgi?id=846135 +- Ship and use gdm.service +- Force gdm onto VT1 + +* Tue Aug 07 2012 Richard Hughes - 1:3.5.5-1 +- Update to 3.5.5 + +* Fri Jul 27 2012 Fedora Release Engineering - 1:3.5.4.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu Jul 19 2012 Ray Strode 3.5.4.2-1 +- Update to 3.5.4.2 +- Fixes non-autologin + +* Thu Jul 19 2012 Ray Strode 3.5.4.1-1 +- Update to 3.5.4.1 +- Fixes autologin +- Fixes logind integration +- Fixes dconf incompatibility + +* Thu Jul 19 2012 Matthias Clasen - 1:3.5.4-3 +- Fix dconf profile syntax + +* Thu Jul 19 2012 Kalev Lember - 1:3.5.4-2 +- Require systemd >= 186 for libsystemd-login + +* Tue Jul 17 2012 Richard Hughes - 1:3.5.4-1 +- Update to 3.5.4 + +* Thu Jun 28 2012 Ray Strode 3.5.2-4 +- Build with plymouth support (woops). + +* Wed Jun 13 2012 Ray Strode 3.5.2-3 +- Drop unused spool dir + Related: #819254 + +* Sat Jun 9 2012 Matthias Clasen - 1:3.5.2-2 +- Fix gnome-shell detection + +* Thu Jun 07 2012 Richard Hughes - 1:3.5.2-1 +- Update to 3.5.2 + +* Sat Apr 14 2012 Matthias Clasen - 3.4.1-1 +- Update to 3.4.1 + +* Mon Apr 09 2012 Ray Strode 3.4.0.1-5 +- One more try at fixing crash + Resolves: #810451 + +* Mon Apr 09 2012 Ray Strode 3.4.0.1-4 +- Fix crash + Resolves: #810451 + +* Thu Apr 5 2012 Matthias Clasen 3.4.0.1-3 +- Make session unlocking after user switching work + +* Mon Apr 02 2012 Ray Strode 3.4.0.1-2 +- Move pam_gnome_keyring after XDG_RUNTIME_DIR is setup + Resolves: #809152 + +* Tue Mar 27 2012 Ray Strode 3.4.0.1-1 +- Update to 3.4.0.1 +- fixes autologin + +* Tue Mar 27 2012 Richard Hughes - 1:3.4.0-1 +- Update to 3.4.0 + +* Tue Mar 20 2012 Ray Strode 3.3.92.1-1 +- Update to 3.3.92.1 + +* Wed Feb 15 2012 Ray Strode 3.2.1.1-14 +- More consolekit registration fixes + +* Mon Feb 13 2012 Ray Strode 3.2.1.1-12 +- Restore ConsoleKit registration if ConsoleKit is installed + +* Tue Feb 7 2012 Lennart Poettering - 1:3.2.1.1-11 +- Add multi-seat patch from gdm git master + +* Thu Jan 26 2012 Ray Strode 3.2.1.1-10 +- Drop system-icon-theme requirement since we don't depend + on it anymore + +* Fri Jan 13 2012 Fedora Release Engineering - 1:3.2.1.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Wed Nov 09 2011 Adam Williamson 1:3.2.1.1-8 +- sync with recent changes on f16 branch: + + update to 3.2.1.1 + + properly set up PAM files + + auth fixes + + put fallback plugin development files in -devel + + require metacity to fix #746693 + + fix logo in fallback mode - just set it to a Fedora file + +* Thu Nov 03 2011 Ray Strode 3.2.1-3 +- Drop fprintd-pam dependency and make Harald's laptop + more lean and streamlined. + +* Wed Oct 26 2011 Fedora Release Engineering - 1:3.2.1-2 +- Rebuilt for glibc bug#747377 + +* Tue Oct 18 2011 Ray Strode 3.2.1-1 +- Update to 3.2.1 +- Move plugins into main package + +* Wed Oct 5 2011 Adam Williamson - 1:3.2.0-2 +- shell_check.patch (upstream): re-add check for gnome-shell presence + before using it to handle login (RH #743596) + +* Wed Sep 28 2011 Ray - 1:3.2.0-1 +- Update to 3.2.0 + +* Tue Jun 28 2011 Ray Strode 3.1.2-3 +- Disable fatal critcals + Resolves: #717324 + +* Tue Jun 21 2011 Michael Schwendt - 3.1.2-2 +- Fix /dev/ull typo in scriptlets (#693046). + +* Mon Jun 13 2011 Ray Strode 3.1.2-1 +- Update for release + +* Mon Jun 06 2011 Ray Strode 3.0.4-1 +- Update to latest version + Resolves CVE-2011-1709 + +* Fri Apr 15 2011 Matthias Clasen - 3.0.0-2 +- Put the Fedora logo back in the greeter + +* Mon Apr 4 2011 Matthias Clasen - 3.0.0-1 +- Update to 3.0.0 + +* Tue Mar 22 2011 Ray Strode 2.91.94-1 +- Update to 2.91.94 + +* Wed Mar 09 2011 Ray Strode 2.91.93-2 +- Fix autologin crash + +* Tue Mar 08 2011 Ray Strode 2.91.93-1 +- Update to 2.91.93 + +* Tue Feb 22 2011 Ray Strode 2.91.6-11 +- Dropping async code didn't work. The bug was still + around. This commit should fix it. + +* Fri Feb 18 2011 Ray Strode 2.91.6-10 +- Fix user list async bugs by dropping async code and + moving to accounts service library + Resolves: #678236 +- Add requires for accounts service to spec since it isn't + optional (and hasn't been for a while) + +* Thu Feb 17 2011 Ray Strode 2.91.6-9 +- Add back session chooser + Resolves: #539638 + +* Mon Feb 14 2011 Ray Strode 2.91.6-8 +- Do build with pam stack changes need to get ecryptfs + working. + Resolves: #665061 + +* Mon Feb 14 2011 Ray Strode 2.91.6-7 +- Fix crasher and rendering glitches + Resolves: #674978 + +* Fri Feb 11 2011 Matthias Clasen - 2.91.6-6 +- Rebuild against newer gtk + +* Wed Feb 09 2011 Christopher Aillon - 2.91.6-5 +- Drop the requires on plymouth-gdm-hooks since it no longer exists + +* Tue Feb 08 2011 Fedora Release Engineering - 1:2.91.6-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Feb 07 2011 Bastien Nocera 2.91.6-3 +- Really disable gnome-settings-daemon plugins in the greeter + +* Fri Feb 04 2011 Ray Strode 2.91.6-2 +- Drop some unimportant patches +- Attempt to fix bug 674978 (theme related crash) + +* Wed Feb 02 2011 Ray Strode 2.91.6-1 +- Update to 2.91.6 + +* Sat Jan 29 2011 Ville Skyttä - 1:2.91.4-6 +- Dir ownership fixes. + +* Wed Jan 19 2011 Ray Strode 2.91.4-5 +- Fix swapped LHS and RHS in more-aggressive-about-loading-icons + patch + +* Wed Jan 19 2011 Ray Strode 2.91.4-4 +- Update previous patch to handle NULL better + +* Wed Jan 19 2011 Ray Strode 2.91.4-3 +- Fix icon ref counting issue + +* Wed Jan 19 2011 Ray Strode 2.91.4-2 +- Be more aggresive about loading icons + (right now we fail, which combined with fatal criticals + gives us crashes) + +* Fri Dec 17 2010 Ray Strode 2.91.4-1 +- Update to 2.91.4 + +* Wed Dec 15 2010 Christopher Aillon 2.32.0-4 +- Add maybe-set-is-loaded.patch to ensure we end up with a loaded user + +* Wed Dec 01 2010 Peter Hutterer 1:2.32.0-3 +- plymouth.patch: xserver 1.10 takes "-background none" root argument + instead of the fedora-specific "-nr". +- Add missing BuildRequires for dbus-glib-devel + +* Mon Nov 15 2010 Dan Williams 2.32.0-2 +- Fix upower build requirement + +* Wed Sep 29 2010 Ray Strode 2.32.0-1 +- Update to 2.32.0 + +* Tue Aug 17 2010 Ray Strode 2.31.90-1 +- Update to 2.31.90 + +* Wed Jun 16 2010 Matthias Clasen 2.30.2-3 +- Kill explicit library deps + +* Tue Apr 27 2010 Ray Strode 2.30.2-2 +- Update multistack patch +- Add accounts service patch +- Update plymouth patch + +* Tue Apr 27 2010 Matthias Clasen 2.30.2-1 +- Update to 2.30.2 +- Spec file cleanups + +* Tue Apr 06 2010 Ray Strode 2.30.0-2 +- Update plymouth patch to work with 0.8.1 + +* Mon Mar 29 2010 Matthias Clasen 2.30.0-1 +- Update to 2.30.0 + +* Wed Mar 24 2010 Matthias Clasen 2.29.92-4 +- Drop hal dependency + +* Tue Mar 09 2010 Ray Strode 2.29.92-3 +- Drop Prereq in favor of Requires(pre) + +* Tue Mar 09 2010 Ray Strode 2.29.92-2 +- Rebase multistack patch + +* Tue Mar 09 2010 Bastien Nocera 2.29.92-1 +- Update to 2.29.92 + +* Thu Feb 11 2010 Matthias Clasen 2.29.6-1 +- Update to 2.29.6 + +* Thu Jan 28 2010 Ray Strode 2.29.5-2 +- name graphical-login vprovides (bug 559268) + +* Tue Jan 26 2010 Ray Strode 2.29.5-1 +- Update to 2.29.5 + +* Sun Jan 17 2010 Matthias Clasen - 2.29.4-3 +- Rebuild + +* Thu Jan 14 2010 Ray Strode 2.29.4-2 +- Fix boot + +* Tue Dec 22 2009 Matthias Clasen - 2.29.4-1 +- Update to 2.29.4 + +* Wed Dec 09 2009 Ray Strode 2.29.1-3 +- Update to work better with latest plymouth + +* Thu Dec 03 2009 Ray Strode 2.29.1-2 +- Drop upstreamed patches +- rebase multi-stack patch + +* Tue Dec 01 2009 Bastien Nocera 2.29.1-1 +- Update to 2.29.1 + +* Sat Oct 31 2009 Matthias Clasen 2.28.1-20 +- Don't show 'Lock Screen' in the user switcher if locked down + +* Sat Oct 31 2009 Matthias Clasen 2.28.1-18 +- Actually set up statusicon padding + +* Fri Oct 30 2009 Ray Strode 2.28.1-17 +- Make the user list slide animation smoother + +* Thu Oct 29 2009 Ray Strode 2.28.1-16 +- Shrink autologin timer +- Make language dialog not double spaced + +* Thu Oct 29 2009 Ray Strode 2.28.1-15 +- Don't show fingerprint task button unless fingerprint is + enabled +- Don't show smartcard task button and list item unless + pcscd is running. + +* Wed Oct 28 2009 Ray Strode 2.28.1-14 +- Don't show image on login button + +* Wed Oct 28 2009 Ray Strode 2.28.1-13 +- Fix double free during user switching (might address + bug 512944) + +* Tue Oct 27 2009 Ray Strode 2.28.1-12 +- One more go at bug 527920 + +* Tue Oct 27 2009 Ray Strode 2.28.1-11 +- Tighten permissions on /var/run/gdm (bug 531063) + +* Mon Oct 26 2009 Ray Strode 2.28.1-10 +- Position shutdown menu properly on multihead machines + +* Fri Oct 23 2009 Ray Strode 2.28.1-9 +- Don't show hostname by default if it's localhost + +* Fri Oct 23 2009 Ray Strode 2.28.1-8 +- Attempt to fix crash some users see. +- Clean up rebase + +* Fri Oct 23 2009 Ray Strode 2.28.1-7 +- Show Other user even when there are no other users + (bug 527920) + +* Fri Oct 23 2009 Ray Strode 2.28.1-6 +- Properly read default keyboard layout (bug 530452) + +* Fri Oct 23 2009 Ray Strode 2.28.1-5 +- Remove tool tip from login button + +* Thu Oct 22 2009 Ray Strode 2.28.1-4 +- Fix autologin window spasms +- Fix autologin timer animation +- Make autologin and multistack play better together +- Add padding to notification tray + +* Wed Oct 21 2009 Ray Strode 2.28.1-3 +- Move date from panel to clock tooltip + +* Tue Oct 20 2009 Ray Strode 2.28.1-2 +- Move shutdown functions to panel from login window + +* Tue Oct 20 2009 Ray Strode 2.28.1-1 +- Update to 2.28.1 + +* Fri Oct 09 2009 Ray Strode 2.28.0-9 +- Fix Other... user. + +* Fri Oct 9 2009 Matthias Clasen - 1:2.28.0-8 +- Move bubbles to the lower right on the login screen + +* Wed Oct 07 2009 Ray Strode - 1:2.28.0-7 +- Fix gdm-password / xguest interaction (bug 524421) + +* Mon Oct 5 2009 Matthias Clasen - 1:2.28.4-6 +- Fix the autostart file for at-spi-registryd + +* Thu Oct 1 2009 Matthias Clasen - 1:2.28.4-5 +- Handle keyboard layout variants + +* Mon Sep 28 2009 Ray Strode - 1:2.28.0-4 +- Add cache dir to package manifest + +* Mon Sep 28 2009 Richard Hughes - 1:2.28.0-3 +- Add a patch to use DeviceKit-power rather than the removed methods in + gnome-power-manager. + +* Fri Sep 25 2009 Ray Strode 1:2.28.0-2 +- Fix autologin + +* Wed Sep 23 2009 Matthias Clasen 1:2.28.0-1 +- Update to 2.28.0 + +* Sat Aug 29 2009 Caolán McNamara 1:2.27.90-2 +- rebuild with new audit + +* Mon Aug 24 2009 Ray Strode 1:2.27.90-1 +- update to 2.27.90 + +* Fri Aug 21 2009 Tomas Mraz - 1:2.27.4-7 +- rebuilt with new audit + +* Wed Aug 19 2009 Lennart Poettering 1:2.27.4-6 +- Add pulseaudio-gdm-hooks to dependencies + +* Thu Aug 06 2009 Ray Strode 1:2.27.4-5 +- rebuild + +* Sat Aug 1 2009 Matthias Clasen 1:2.27.4-4 +- Drop unneeded direct deps + +* Fri Jul 24 2009 Ray Strode 1:2.27.4-3 +- Fix delay during login + +* Mon Jul 20 2009 Ray Strode 1:2.27.4-2 +- Use correct multi-stack patch + +* Mon Jul 20 2009 Ray Strode 1:2.27.4-1 +- Update to 2.27.4 + +* Thu Jul 02 2009 Adam Jackson 1:2.26.1-13 +- Requires: xorg-x11-xkb-utils -> Requires: setxkbmap + +* Wed Jul 01 2009 Ray Strode - 1:2.26.1-12 +- Drop defunct arch conditional buildrequires + +* Tue Jun 30 2009 Matthias Clasen - 1:2.26.1-11 +- Rebuild against new libxklavier + +* Fri Jun 12 2009 Matthias Clasen - 1:2.26.1-10 +- Bump rev to fix upgrade path + +* Tue Jun 9 2009 Matthias Clasen - 1:2.26.1-8 +- Port to PolicyKit 1 + +* Wed Jun 03 2009 Ray Strode - 1:2.26.1-5 +- Fix language parsing code (bug 502778) + +* Mon Apr 27 2009 Matthias Clasen - 1:2.26.1-4 +- Don't drop schemas translations from po files + +* Fri Apr 24 2009 Ray Strode - 1:2.26.1-3 +- Add Requires for pam modules in plugins + +* Tue Apr 21 2009 Ray Strode - 1:2.26.1-2 +- Stop inactive pam conversations when one succeeds. + Should fix bug 496234 + +* Tue Apr 14 2009 Ray Strode - 1:2.26.1-1 +- Update to 2.26.1 + +* Mon Apr 13 2009 Ray Strode - 1:2.26.0-8 +- Add less boring multistack patch for testing + +* Mon Mar 23 2009 Ray Strode - 1:2.26.0-7 +- Load session and language settings when username is read on + Other user + +* Fri Mar 20 2009 Ray Strode - 1:2.26.0-6 +- Fix problem in keyboard layout selector (483195) + +* Thu Mar 19 2009 Ray Strode - 1:2.26.0-5 +- Use gethostname() _properly_ instead of g_get_host_name() when writing + out xauth files, because the hostname may change out from + under us and glib caches it. + +* Thu Mar 19 2009 Ray Strode - 1:2.26.0-4 +- Use gethostname() instead of g_get_host_name() when writing + out xauth files, because the hostname may change out from + under us and glib caches it. + +* Wed Mar 18 2009 Ray Strode - 1:2.26.0-3 +- emit "user-selected" signal for non-user items in the list + as well. + +* Mon Mar 16 2009 Ray Strode - 1:2.26.0-2 +- Clean up empty auth dirs so they don't hang around forever + (bug 485974) + +* Mon Mar 16 2009 Ray Strode - 1:2.26.0-1 +- Update to 2.26.0 +- Drop gcc workaround. it might not be needed now. + +* Sat Mar 14 2009 Ray Strode - 1:2.25.2-20 +- Drop the use localhost patch because it broke things. + Instead add authorization that doesn't depend on a hostname + +* Thu Mar 12 2009 Ray Strode - 1:2.25.2-19 +- Add a lame patch in the off chance it might work around a + gcc bug on ppc: + unable to find register to spill in class 'LINK_OR_CTR_REGS' + Probably won't work. + +* Thu Mar 12 2009 Ray Strode - 1:2.25.2-18 +- Add Requires: libXau >= 1.0.4-4 to use localhost in xauth cookies +- Use localhost instead of g_get_host_name () + +* Thu Mar 12 2009 Ray Strode - 1:2.25.2-17 +- Don't force X server on active vt more than once + +* Tue Mar 10 2009 Ray Strode - 1:2.25.2-16 +- Store greeter's auth cookie under "localhost" instead + of g_get_host_name() since NetworkManager tries to synchronize + the internal hostname with the externally resolvable one. + +* Mon Mar 9 2009 Ray Strode - 1:2.25.2-15 +- Don't race with PAM modules that ask questions during + pam_open_session (and don't subsequently go bonkers when + losing the race). + +* Fri Mar 6 2009 Ray Strode - 1:2.25.2-14 +- Reset "start session when ready" state to FALSE when starting + new greeter from existing slave. May fix problem Chris Ball + is seeing with language selection in autologin the second time + after boot up. + +* Thu Mar 5 2009 Ray Strode - 1:2.25.2-13 +- 2.25.2-10 fixes were actually only for timed login. + Add same fix for auto login + +* Thu Mar 5 2009 Ray Strode - 1:2.25.2-12 +- Create settings object early to prevent assertion failures + when one pam conversation completes before another starts. + +* Wed Mar 4 2009 Ray Strode - 1:2.25.2-11 +- Bring back language/session/layout selector for autologin + +* Wed Mar 4 2009 Ray Strode - 1:2.25.2-10 +- Add some fixes for autologin + +* Tue Mar 3 2009 Ray Strode - 1:2.25.2-9 +- Add limited 'one-stack-only' version of multistack patch + (See https://fedoraproject.org/wiki/Features/MultiplePAMStacksInGDM) +- Drop 10 second delay in start up because of broken autostart + file + +* Fri Feb 27 2009 Matthias Clasen +- Require PolicyKit-authentication-agent + +* Tue Feb 24 2009 Matthias Clasen +- Refine the hal patch + +* Tue Feb 24 2009 Fedora Release Engineering - 1:2.25.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Fri Feb 20 2009 Matthias Clasen - 1:2.25.2-5 +- Get the default keyboard layout out of hal device properties + instead of /etc/sysconfig/keyboard + +* Fri Feb 20 2009 Ray Strode - 1:2.25.2-4 +- add Provides: service(graphical-login) to help anaconda + +* Thu Jan 22 2009 Ray Strode - 1:2.25.2-3 +- Open log files for append to make selinux lock down easier + +* Wed Dec 17 2008 Matthias Clasen - 1:2.25.2-2 +- Update to 2.25.2 +- Drop the xkb groups workaround to see if the issue disappeared + +* Thu Dec 4 2008 Matthias Clasen - 1:2.25.1-2 +- Update to 2.25.1 + +* Mon Oct 20 2008 Matthias Clasen - 1:2.24.0-11 +- Respect system keyboard setting + +* Wed Oct 15 2008 Ray Strode - 1:2.24.0-10 +- Rework "force X on vt1" code to work after the user logs out + +* Wed Oct 15 2008 Matthias Clasen - 1:2.24.0-9 +- Save some space + +* Fri Oct 3 2008 Matthias Clasen - 1:2.24.0-8 +- Don't show a non-functional help menuitem + +* Tue Sep 30 2008 Ray Strode - 1:2.24.0-7 +- Make panel slide in initially like the gnome panel + +* Tue Sep 30 2008 Ray Strode - 1:2.24.0-6 +- drop background priority change. Choppyiness in -3 ended up + being a bug in gnome-settings-daemon. +- pull patch from upstream to scale face icons with fontsize + +* Thu Sep 25 2008 Matthias Clasen - 1:2.24.0-5 +- Require gnome-session + +* Tue Sep 23 2008 Matthias Clasen - 1:2.24.0-4 +- Let /var/lib/gdm be owned by gdm, to make pulseaudio happy + +* Tue Sep 23 2008 Ray Strode - 1:2.24.0-3 +- Load background after everything else, so the crossfade + isn't choppy. + +* Mon Sep 22 2008 Ray Strode - 1:2.24.0-2 +- Fix permssions on spool dir + +* Mon Sep 22 2008 Matthias Clasen - 1:2.24.0-1 +- Update to 2.24.0 + +* Mon Sep 22 2008 Ray Strode - 1:2.23.92-10 +- Flush X event queue after setting _XROOTPMAP_ID so there's + no race with settings daemon reading the property + +* Fri Sep 19 2008 Ray Strode - 1:2.23.92-9 +- Fix crash from language dialog + +* Wed Sep 17 2008 Ray Strode - 1:2.23.92-8 +- canonicalize codeset to match output of locale -m +- filter duplicates from language list + +* Tue Sep 16 2008 Matthias Clasen - 1:2.23.92-7 +- Plug a few memory leaks + +* Tue Sep 16 2008 Ray Strode - 1:2.23.92-6 +- Use _XROOTPMAP_ID instead of _XSETROOT_ID + +* Tue Sep 16 2008 Ray Strode - 1:2.23.92-5 +- Save root window in XSETROOTID property for transition + +* Fri Sep 12 2008 Ray Strode - 1:2.23.92-4 +- Fix bug in last patch + +* Thu Sep 11 2008 Ray Strode - 1:2.23.92-3 +- Add hook to allow for plymouth transition + +* Tue Sep 9 2008 Jon McCann - 1:2.23.92-2 +- Disallow root login + +* Mon Sep 8 2008 Jon McCann - 1:2.23.92-1 +- Update to 2.23.92-1 + +* Thu Aug 28 2008 Jon McCann - 1:2.23.91-0.20080828.2 +- Update to non-broken snapshot + +* Thu Aug 28 2008 Jon McCann - 1:2.23.91-0.20080828.1 +- Update to snapshot + +* Mon Aug 25 2008 Jon McCann - 1:2.23.90-2 +- Add desktop file for metacity + +* Mon Aug 25 2008 Jon McCann - 1:2.23.90-1 +- Update to 2.23.90 + +* Thu Aug 14 2008 Behdad Esfahbod - 1:2.23.2-3 +- Add upstreamed patch gdm-2.23.2-unknown-lang.patch + +* Wed Aug 13 2008 Ray Strode - 1:2.23.2-2 +- Require plymouth-gdm-hooks so plymouth-log-viewer gets pulled + in on upgrades + +* Wed Jul 30 2008 Jon McCann - 1:2.23.2-1 +- Update to 2.23.2 + +* Mon Jul 28 2008 Jon McCann - 1:2.23.1.0.2008.07.28.1 +- Update to newer snapshot + +* Mon Jul 21 2008 Jon McCann - 1:2.23.1.0.2008.07.21.3 +- Update to newer snapshot + +* Mon Jul 21 2008 Jon McCann - 1:2.23.1.0.2008.07.21.2 +- Update to new snapshot + +* Mon Jul 21 2008 Jon McCann - 1:2.23.1.0.2008.07.21.1 +- Update to snapshot + +* Fri Jul 11 2008 Matthias Clasen - 1:2.22.0-12 +- Actually apply the patch + +* Thu Jul 10 2008 Matthias Clasen - 1:2.22.0-11 +- Fix some broken icons on the login screen + +* Thu Jul 10 2008 Matthias Clasen - 1:2.22.0-10 +- Improve rendering of languages + +* Thu Jul 3 2008 Jon McCann - 1:2.22.0-9 +- Check for a null filesystem type + +* Wed Jun 25 2008 Ray Strode - 1:2.22.0-8 +- After discussion with X team, turn tcp connections off by default, + but add back option to toggle on (bug 446672) + +* Wed Jun 25 2008 Ray Strode - 1:2.22.0-7 +- enable tcp connections by default + +* Thu May 8 2008 Matthias Clasen - 1:2.22.0-6 +- Add a GConf key to disable the user list + +* Mon May 5 2008 Matthias Clasen - 1:2.22.0-5 +- Autoreconf +- Bump rev + +* Mon May 5 2008 Matthias Clasen - 1:2.22.0-4 +- Add a keyboard chooser to the greeter + +* Sun May 4 2008 Matthias Clasen - 1:2.22.0-3 +- Fix source url + +* Fri May 1 2008 Jon McCann - 1:2.22.0-2 +- Retry tagging + +* Fri May 1 2008 Jon McCann - 1:2.22.0-1 +- Update to 2.22.0 +- Fix restarting when bus goes away + +* Thu May 1 2008 Ray Strode - 1:2.21.10-0.2008.05.01.1 +- ConsoleKit fixes +- Don't show session selector if only one session installed +- automatically pop up language/session selectors when using mnemonics + +* Tue Apr 29 2008 Jon McCann - 1:2.21.10-0.2008.04.29.2 +- Fix debugging +- Fix resetting slave after session migration +- Desensitize power buttons briefly after page switch +- Remove Users: label from greeter + +* Tue Apr 29 2008 Jon McCann - 1:2.21.10-0.2008.04.29.1 +- make transient greeter less transient to workaround spurious vt switch + +* Mon Apr 28 2008 Ray Strode - 1:2.21.10-0.2008.04.28.1 +- a11y improvements +- make "Suspend" desensitize properly when not-available +- make resize animation faster +- user switcher fixes + +* Fri Apr 18 2008 Ray Strode - 1:2.21.10-0.2008.04.18.2 +- Get Chinese back in language list + +* Fri Apr 18 2008 Ray Strode - 1:2.21.10-0.2008.04.18.1 +- start orca without main window +- add missing priorities for plugins +- add more failsafe lockdown + +* Wed Apr 16 2008 Ray Strode - 1:2.21.10-0.2008.04.16.1 +- Disable typeahead when asking for password so password can't get shown + in clear text (bug 442300) + +* Wed Apr 16 2008 Ray Strode - 1:2.21.10-0.2008.04.11.4 +- Use start-here instead of fedora-logo-icon to aid generic-logos + +* Fri Apr 11 2008 Matthias Clasen - 1:2.21.10-0.2008.04.11.3 +- Fix up the XKB workaround + +* Fri Apr 11 2008 Ray Strode - 1:2.21.10-0.2008.04.11.2 +- Fix security issue in last commit + +* Fri Apr 11 2008 Ray Strode - 1:2.21.10-0.2008.04.11.1 +- Fix focus handling when tabbing from user-chooser to buttons +- don't set real uid to user before setcred +- fix permissions on /var/run/gdm ... again + +* Thu Apr 10 2008 Matthias Clasen - 1:2.21.10-0.2008.04.08.4 +- Work around a XKB problem + +* Tue Apr 8 2008 Ray Strode - 1:2.21.10-0.2008.04.08.3 +- Language list was incomplete (bug 441613) + +* Tue Apr 8 2008 Ray Strode - 1:2.21.10-0.2008.04.08.2 +- Fix permissions on /var/run/gdm + +* Tue Apr 8 2008 Ray Strode - 1:2.21.10-0.2008.04.08.1 +- Install X auth cookies in /var/run/gdm instead of /tmp + +* Mon Apr 7 2008 Ray Strode - 1:2.21.10-0.2008.04.07.3 +- Disable image for automatic login and other user +- Act more sanely if gnome isn't installed + +* Mon Apr 7 2008 Ray Strode - 1:2.21.10-0.2008.04.07.2 +- Allow double-click to select language from list + +* Mon Apr 7 2008 Ray Strode - 1:2.21.10-0.2008.04.07.1 +- Make automatic login timer fade in +- No more checkboxes in user-switch applet + +* Sun Apr 6 2008 Ray Strode - 1:2.21.10-0.2008.04.06.1 +- Focus face browser after failed login attempt +- disable debug messages until 2.22.0 is released + +* Sat Apr 5 2008 Matthias Clasen - 1:2.21.10-0.2008.04.04.2 +- Improve handling of CK error messages + +* Sat Apr 5 2008 Ray Strode - 1:2.21.10-0.2008.04.04.1 +- Fix jump in animation for autologin +- Fix crash if LANG="somethingbogus" + +* Sat Apr 5 2008 Ray Strode - 1:2.21.10-0.2008.04.03.3 +- Fix crash when canceling autologin + +* Fri Apr 4 2008 Matthias Clasen - 1:2.21.10-0.2008.04.03.2 +- Uninstall gconf schemas before the files are gone + +* Thu Apr 3 2008 Ray Strode - 1:2.21.10-0.2008.04.03.1 +- Update to snapshot +- Improves shrink/grow animation of login window + +* Wed Apr 2 2008 Jon McCann - 1:2.21.10-0.2008.04.02.1 +- Update to snapshot + +* Mon Mar 31 2008 Matthias Clasen - 1:2.21.10-0.2008.03.26.4 +- Fix a directory ownership oversight + +* Wed Mar 26 2008 Jon McCann - 1:2.21.10-0.2008.03.26.3 +- Fix build due to #436349 + +* Wed Mar 26 2008 Jon McCann - 1:2.21.10-0.2008.03.26.2 +- Update to newer snapshot that includes more lockdown + +* Wed Mar 26 2008 Ray Strode - 1:2.21.10-0.2008.03.26.1 +- Update to snapshot +- Turn on profiling + +* Fri Mar 21 2008 Matthias Clasen - 1:2.21.10-0.2008.03.18.3 +- Don't require a theme we don't use + +* Wed Mar 19 2008 Ray Strode - 1:2.21.10-0.2008.03.18.2 +- Fix default path (bug 430187) + +* Tue Mar 18 2008 Jon McCann - 1:2.21.10-0.2008.03.18.1 +- Update to snapshot + +* Mon Mar 17 2008 Matthias Clasen - 1:2.21.9-5 +- Implement tooltips in the language selection dialog + +* Mon Mar 17 2008 Matthias Clasen - 1:2.21.9-4 +- Stop gvfs from using fuse in the sandbox session + +* Tue Mar 11 2008 Ray Strode - 1:2.21.9-3 +- remove duplication signal definition from bad patch merge + which led to crash for "Other" user + +* Mon Mar 10 2008 Jon McCann - 1:2.21.9-2 +- Fix case where we can't lookup a user. + +* Mon Mar 10 2008 Jon McCann - 1:2.21.9-1 +- Update to 2.21.9 + +* Mon Mar 10 2008 Ray Strode - 1:2.21.9-0.2008.03.10.2 +- Prevent some spurious wake ups caused by the + timed login timer animation + +* Mon Mar 10 2008 Ray Strode - 1:2.21.9-0.2008.03.10.1 +- Update to latest snapshot + +* Fri Mar 7 2008 David Woodhouse - 1:2.21.9-0.2008.02.29.3 +- Fix endianness breakage in signal pipes (#436333) + +* Mon Mar 3 2008 Ray Strode - 1:2.21.9-0.2008.02.29.2 +- Be more explicit in file list; use less globs +- Don't package user-switcher in both packages! + +* Fri Feb 29 2008 Ray Strode - 1:2.21.9-0.2008.02.29.1 +- Update to snapshot +- Split user-switcher out + +* Mon Feb 25 2008 Jon McCann - 1:2.21.8-1 +- Update to 2.21.8 + +* Tue Feb 12 2008 Jon McCann - 1:2.21.7-1 +- Update to 2.21.7 + +* Fri Feb 8 2008 Ray Strode - 1:2.21.7-0.2008.02.08.1 +- Update to snapshot + +* Wed Jan 30 2008 Jon McCann - 1:2.21.6-1 +- Update to 2.21.6 + +* Thu Jan 24 2008 Ray Strode - 1:2.21.5-2 +- add BuildRequires for iso-codes-devel + +* Fri Jan 18 2008 Jon McCann - 1:2.21.5-1 +- Update to 2.21.5 + +* Thu Jan 17 2008 Jon McCann - 1:2.21.2-0.2007.11.20.11 +- Rebuild + +* Mon Jan 15 2008 Dan Walsh - 1:2.21.2-0.2007.11.20.10 +- Fix gdm.pam file so that session include system-auth happens after other session setup + +* Mon Jan 7 2008 Ray Strode - 1:2.21.2-0.2007.11.20.9 +- hide guest account since it doesn't work + +* Fri Dec 21 2007 Ray Strode - 1:2.21.2-0.2007.11.20.8 +- Fix background (and other settings) + +* Wed Dec 19 2007 Ray Strode - 1:2.21.2-0.2007.11.20.7 +- Improve animation to be less jumpy + +* Fri Dec 14 2007 Ray Strode - 1:2.21.2-0.2007.11.20.6 +- Fix an uninitialized variable that makes the session list stop + growing before its finished sometimes + +* Thu Dec 13 2007 Ray Strode - 1:2.21.2-0.2007.11.20.5 +- add session chooser to login screen +- add hoaky animations + +* Fri Nov 30 2007 Matthias Clasen - 1:2.21.2-0.2007.11.20.4 +- Use the new "substack" support in pam to make keyring unlocking work + +* Tue Nov 20 2007 Ray Strode - 1:2.21.2-0.2007.11.20.3 +- use metacity for now + +* Tue Nov 20 2007 Ray Strode - 1:2.21.2-0.2007.11.20.2 +- Drop dont run profile patch since dwalsh changed /usr/sbin/gdm label + +* Tue Nov 20 2007 Ray Strode - 1:2.21.2-0.2007.11.20.1 +- Update to today's snapshot + +* Mon Nov 19 2007 Ray Strode - 1:2.21.2-0.2007.11.19.3 +- fix permissions on homedir + +* Mon Nov 19 2007 Ray Strode - 1:2.21.2-0.2007.11.19.2 +- move homedir to /var/lib/gdm + +* Mon Nov 19 2007 Ray Strode - 1:2.21.2-0.2007.11.19.1 +- Update to today's snapshot + +* Thu Nov 15 2007 Ray Strode - 1:2.21.2-0.2007.11.14.2 +- don't source /etc/profile at startup + +* Wed Nov 14 2007 Ray Strode - 1:2.21.2-0.2007.11.14.1 +- Update to today's snapshot + +* Fri Nov 9 2007 Ray Strode - 1:2.21.2-0.2007.11.09.1 +- Update to today's snapshot + +* Tue Oct 30 2007 Ray Strode - 1:2.21.1-0.2007.10.30.1 +- Update to today's snapshot + +* Tue Oct 23 2007 Ray Strode - 1:2.21.1-0.2007.10.23.1 +- Update to today's snapshot + +* Mon Oct 22 2007 Ray Strode - 1:2.21.1-0.2007.10.22.1 +- Add a snapshot gdm trunk, totally different unfinished ui... + +* Fri Oct 5 2007 Dan Walsh - 1:2.20.0-14 +- Added pam_selinux_permit and pam_namespace to gdm-pam + - This pam module allows user without a password to login when selinux is in enforcing mode +- Added pam_namespace to gdm-autologin-pam +- These changes were made to make it easier to setup the xguest user account + +* Tue Oct 3 2007 Alexander Larsson - 1:2.20.0-14 +- Fix up pam keyring integration to be what the latest version + of the docs says + +* Tue Oct 2 2007 Ray Strode - 1:2.20.0-13 +- Actually add said escape == cancel behavior back + +* Tue Oct 2 2007 Ray Strode - 1:2.20.0-12 +- Add escape == cancel behavior back + +* Mon Oct 1 2007 Matthias Clasen - 1:2.20.0-11 +- Fix a refcounting problem with user faces + +* Mon Oct 1 2007 Ray Strode - 1:2.20.0-10 +- apply upstream patch from Brady Anderson + to fix writing out .dmrc file when setting default language + (upstream bug 453916) + +* Fri Sep 28 2007 Ray Strode - 1:2.20.0-9 +- drop redhat-artwork dep, add fedorainfinity-gdm-theme dep + +* Fri Sep 28 2007 Ray Strode - 1:2.20.0-8 +- Another crack at 240853 + +* Fri Sep 28 2007 Matthias Clasen - 1:2.20.0-7 +- Fix the stupid bullets again + +* Thu Sep 27 2007 Ray Strode - 1:2.20.0-6 +- The previously mentioned typo didn't matter before because the + compiled in default matched what the config file was supposed to + say. This commit restores matched default behavior (bug 301031) + +* Thu Sep 27 2007 Ray Strode - 1:2.20.0-5 +- Fix an apparent typo in the securitytokens.conf config file + (bug 301031) + +* Thu Sep 20 2007 Matthias Clasen - 1:2.20.0-4 +- Reenable root login due to popular demand + +* Wed Sep 19 2007 Matthias Clasen - 1:2.20.0-3 +- Change default theme to FedoraInfinity + +* Wed Sep 19 2007 Matthias Clasen - 1:2.20.0-2 +- Fix a hang on restart (#240853) + +* Tue Sep 18 2007 Matthias Clasen - 1:2.20.0-1 +- Update to 2.20.0 + +* Wed Sep 12 2007 Ray Strode - 1:2.19.8-4 +- Change default password character back to circle instead of + asterisk (bug 287951) + +* Fri Sep 7 2007 Ray Strode - 1:2.19.8-3 +- rebuild --with-selinux + +* Fri Sep 7 2007 Ray Strode - 1:2.19.8-2 +- make things work better for xguest users (bug 254164) + +* Fri Sep 7 2007 Matthias Clasen - 1:2.19.8-1 +- Update to 2.19.8 + +* Tue Sep 4 2007 Matthias Clasen - 1:2.19.7-1 +- Update to 2.19.7 + +* Fri Aug 24 2007 Ray Strode - 1:2.19.6-5 +- use pam_selinux instead of home grown selinux code (bug 254164) + +* Wed Aug 22 2007 Kristian Høgsberg - 1:2.19.6-4 +- Pass -br to the default X server too. + +* Sat Aug 18 2007 Ray Strode - 1:2.19.6-3 +- disable root login (see "low-hanging fruit" discussion on + fedora-desktop-list) + +* Thu Aug 16 2007 Ray Strode - 1:2.19.6-2 +- disable type ahead in user list (bug 252991) + +* Wed Aug 15 2007 Matthias Clasen - 1:2.19.6-1 +- Update to 2.19.6 +- Use %%find_lang for help files + +* Sun Aug 12 2007 Adam Jackson 1:2.19.5-9 +- Remove the filereq on /etc/pam.d/system-auth, pam alone is sufficient. +- Bump the pam requirement to 0.99, 0.75 is ancient. + +* Sun Aug 12 2007 Matthias Clasen - 1:2.19.5-8 +- Make the previous fix actually work + +* Sun Aug 12 2007 Matthias Clasen - 1:2.19.5-7 +- Make gdmsetup work with consolehelper and pam again + +* Mon Aug 6 2007 Matthias Clasen - 1:2.19.5-6 +- Require gnome-keyring-pam + +* Mon Aug 6 2007 Ray Strode - 1:2.19.5-5 +- change previous patch to drop even more code + +* Mon Aug 6 2007 Ray Strode - 1:2.19.5-4 +- turn off dwellmouselistener if devices don't send core events. + don't warp pointer to stylus ever (upstream bug 457998) + +* Fri Aug 3 2007 Ray Strode - 1:2.19.5-3 +- remove dwellmouselistener module from default configuration. + It's pretty broken (bug 248752) + +* Fri Aug 3 2007 Matthias Clasen - 1:2.19.5-2 +- Update license field + +* Tue Jul 31 2007 Matthias Clasen - 1:2.19.5-1 +- Update to 2.19.5 + +* Mon Jul 30 2007 Matthias Clasen - 1:2.19.4-2 +- Add optional gnome-keyring support to the gdm pam stack + +* Tue Jul 10 2007 Ray Strode - 1:2.19.4-1 +- Update to 2.19.4 + +* Wed Jun 27 2007 Ray Strode - 1:2.19.3-3 +- set Browser=true by default + +* Wed Jun 27 2007 Matthias Clasen - 1:2.19.3-2 +- Drop an unnecessary file dependency + +* Mon Jun 18 2007 Ray Strode - 1:2.19.3-1 +- Update to 2.19.3 + +* Tue Jun 5 2007 Matthias Clasen - 1:2.19.2-1 +- Update to 2.19.2 + +* Mon May 21 2007 Matthias Clasen - 1:2.19.1-1 +- Update to 2.19.1 + +* Tue May 15 2007 Ray Strode - 1:2.18.0-14 +- hide users from userlist that have disabled shells + (bug 240148) + +* Thu May 10 2007 Matthias Clasen - 1:2.18.0-13 +- Follow packaging guidelines for scrollkeeper dependencies + +* Mon May 7 2007 Ray Strode - 1:2.18.0-12 +- reenable utmp logging (bug 209537) + +* Tue Apr 17 2007 Ray Strode - 1:2.18.0-11 +- Be more verbose to help isolate the problem in bug 234567 + +* Thu Apr 12 2007 Ray Strode - 1:2.18.0-10 +- add "Default" session back to the sessions menu (bug 234218) + +* Thu Apr 5 2007 Ray Strode - 1:2.18.0-9 +- don't expect utf-8 usernames for plain greeter face browser + either. + +* Thu Apr 5 2007 Ray Strode - 1:2.18.0-8 +- don't expect utf-8 usernames for face browser (bug 235351). + +* Thu Mar 29 2007 Ray Strode - 1:2.18.0-7 +- don't strcpy overlapping strings (bug 208181). + +* Tue Mar 27 2007 Matthias Clasen - 1:2.18.0-6 +- Hide gdmphotosetup by default, since About Me does the same + +* Tue Mar 20 2007 Ray Strode - 1:2.18.0-5 +- add fix to allow themes to cope with low resolution modes + better (bug 232672) + +* Mon Mar 19 2007 Ray Strode - 1:2.18.0-4 +- update and reenable security token patch + +* Mon Mar 19 2007 David Zeuthen - 1:2.18.0-3 +- Also pass AT's to the session from the plain greeter (#232518) +- New faces including new subpackage gdm-extra-faces + +* Tue Mar 13 2007 David Zeuthen - 1:2.18.0-2 +- Update to upstream release 2.18.0 +- Switch default theme to FedoraFlyingHigh and show /etc/passwd users +- Fix accessibility in the themed greeter (GNOME #412576) +- Enable accessible login, make sure gdm can access devices and + pass activated AT's to the login session (#229912) +- Disable smart card login for now as patch doesn't apply anymore + +* Fri Mar 9 2007 Ray Strode - 1:2.17.8-3 +- hide langauges that aren't displayable from the list (bug 206048) + +* Tue Mar 6 2007 Ray Strode - 1:2.17.8-2 +- turn off pam sanity check because it conflicts with audit + +* Wed Feb 28 2007 Matthias Clasen - 1:2.17.8-1 +- Update to 2.17.8 + +* Sat Feb 24 2007 Matthias Clasen - 1:2.17.7-5 +- Fix keynav in the face browser + +* Fri Feb 23 2007 David Zeuthen - 1:2.17.7-4 +- Add some enhancements to the greeter (bgo #411427) + +* Fri Feb 23 2007 Ray Strode - 1:2.17.7-3 +- Update to 2.17.7 + +* Fri Feb 23 2007 Matthias Clasen - 1:2.17.7-2 +- Don't own /usr/share/icons/hicolor +- Install all desktop files + +* Mon Feb 12 2007 Matthias Clasen - 1:2.17.7-1 +- try to update to 2.17.7 +- Drop upstreamed patches + +* Mon Feb 12 2007 Matthias Clasen - 1:2.17.6-4 +- Reuse existing sessions without asking +- Don't show failsafe sessions + +* Sat Feb 10 2007 Matthias Clasen - 1:2.17.6-3 +- Fix a problem with the ConsoleKit support + +* Tue Feb 6 2007 Matthias Clasen - 1:2.17.6-2 +- Apply a patch to improve fast user switching experience + +* Tue Jan 23 2007 Matthias Clasen - 1:2.17.6-1 +- Update to 2.17.6 + +* Sat Jan 13 2007 Matthias Clasen - 1:2.17.5-2 +- Enable ConsoleKit support + +* Thu Jan 11 2007 Matthias Clasen - 1:2.17.5-1 +- Update to 2.17.5 + +* Fri Dec 15 2006 Matthias Clasen - 1:2.17.4-1 +- Update to 2.17.4, which fixes CVE-2006-6105 + +* Tue Dec 5 2006 Matthias Clasen - 1:2.17.3-1 +- Update to 2.17.3 +- Update some patches + +* Tue Nov 7 2006 Matthias Clasen - 1:2.17.2-1 +- Update to 2.17.2 + +* Sun Nov 5 2006 Matthias Clasen - 1:2.17.1-1 +- Update to 2.17.1 + +* Thu Oct 26 2006 Matthias Clasen - 1:2.17.0-2 +- Fix a crash with launching a11y support + +* Sun Oct 22 2006 Matthias Clasen - 1:2.17.0-1 +- Update to 2.17.0 + +* Tue Oct 17 2006 Matthias Clasen - 1:2.16.0-17 +- Make photosetup help button work (#198138) + +* Sun Oct 15 2006 Ray Strode - 1:2.16.0-16.fc7 +- don't log canceled pam conversations as failed login attempts + +* Sun Oct 15 2006 Ray Strode - 1:2.16.0-15.fc7 +- Prefer modules in secmod db over hardcoded coolkey path + +* Sat Oct 14 2006 Ray Strode - 1:2.16.0-14.fc7 +- have security token monitor helper process kill itself when + the communication pipe to the main process goes away (bug 210677). + +* Wed Oct 10 2006 Ray Strode - 1:2.16.0-13.fc6 +- desensitize entry fields until pam asks for input, so if pam + doesn't initially ask for input (like in smart card required mode) + the user can't type something and confuse gdm (bug 201344) + +* Fri Oct 6 2006 Ray Strode - 1:2.16.0-12.fc6 +- invoke standard X server with -br option to ensure we get a + black root on startup + +* Thu Oct 5 2006 Ray Strode - 1:2.16.0-11.fc6 +- make monitoring code more reliable (bug 208018) + +* Wed Sep 27 2006 Matthias Clasen - 1:2.16.0-10.fc6 +- Fix small issues in gdmsetup (#208225) + +* Wed Sep 27 2006 Matthias Clasen - 1:2.16.0-9.fc6 +- Fix a problem with the display of the FedoraDNA theme + in gdmsetup + +* Tue Sep 19 2006 Ray Strode - 1:2.16.0-8.fc6 +- Add as_IN, si_LK to language list (bug 203917) + +* Mon Sep 18 2006 Ray Strode - 1:2.16.0-7.fc6 +- fix a problem recently introduced in the smart card forking + code + +* Mon Sep 18 2006 Ray Strode - 1:2.16.0-6.fc6 +- fix a problem recently introduced in the smart card driver + loading code (bug 206882) + +* Thu Sep 14 2006 Ray Strode - 1:2.16.0-5.fc6 +- don't leak pipe fds (bug 206709) + +* Thu Sep 14 2006 Ray Strode - 1:2.16.0-4.fc6 +- update security token patch to not poll + +* Fri Sep 8 2006 Jesse Keating - 1:2.16.0-3.fc6 +- Apply correct defaults patch + +* Thu Sep 7 2006 Matthias Clasen - 1:2.16.0-2.fc6 +- Change the default theme to FedoraDNA +- Bump redhat-artwork requirement + +* Tue Sep 5 2006 Matthias Clasen - 1:2.16.0-1.fc6 +- Update to 2.16.0 + +* Sat Aug 26 2006 Karsten Hopp - 1:2.15.10-2.fc6 +- buildrequire inttools as this isn't a requirement of scrollkeeper anymore + and thus missing from the buildroot + +* Mon Aug 21 2006 Matthias Clasen - 1:2.15.10-1.fc6 +- Update to 2.15.10 +- Drop upstreamed patch + +* Fri Aug 4 2006 Ray Strode - 1:2.15.9-1 +- update to 2.15.9 + +* Fri Aug 4 2006 Ray Strode - 1:2.15.7-2 +- update gdmsetup pam file to use config-util stacks + +* Thu Aug 3 2006 Ray Strode - 1:2.15.7-1 +- update to 2.15.7 +- drop selinux patch that I don't think was ever finished + +* Thu Aug 3 2006 Ray Strode - 1:2.15.6-14 +- fix face browser + (http://bugzilla.gnome.org/show_bug.cgi?id=349640) +- fix error message reporting + (http://bugzilla.gnome.org/show_bug.cgi?id=349758) + +* Fri Jul 21 2006 Ray Strode - 1:2.15.6-13 +- simply all the security token code by only using one pam stack +- drop lame kill on token removal feature + +* Fri Jul 21 2006 Ray Strode - 1:2.15.6-12 +- move authcookies out of home directories to prevent problems + on nfs/afs mounted home directories (bug 178233). + +* Fri Jul 21 2006 Ray Strode - 1:2.15.6-11 +- really fix annoying dialog problem mentioned in 2.15.6-6 + +* Wed Jul 19 2006 Ray Strode - 1:2.15.6-10 +- center cursor on xinerama head (bug 180085) + +* Tue Jul 18 2006 Ray Strode - 1:2.15.6-9 +- add "kill all sessions on token removal" feature + +* Tue Jul 18 2006 Ray Strode - 1:2.15.6-8 +- reenable session keyring support in pam module (bug 198629) + +* Mon Jul 17 2006 Ray Strode - 1:2.15.6-7 +- make security token support use its own config file in + preparation for modularizing it. + +* Mon Jul 17 2006 Ray Strode - 1:2.15.6-6 +- fix off-by-one in the process-all-ops patch that was causing + an anoying dialog to pop up on each login + +* Sun Jul 16 2006 Ray Strode - 1:2.15.6-5 +- add initial wtmp and btmp logging support + +* Fri Jul 14 2006 Ray Strode - 1:2.15.6-4 +- fix bug in security token support + +* Fri Jul 14 2006 Ray Strode - 1:2.15.6-3 +- fix hang in gdmsetup + +* Fri Jul 14 2006 Ray Strode - 1:2.15.6-2 +- put new pam module at top of stack (bug 198629) + +* Wed Jul 12 2006 Ray Strode - 1:2.15.6-1 +- Update to 2.15.6 + +* Wed Jul 12 2006 Ray Strode - 1:2.15.5-4 +- add new pam module to pam files to support kernel session keyring + +* Wed Jul 12 2006 Jesse Keating - 1:2.15.5-3.1 +- rebuild + +* Tue Jul 11 2006 Ray Strode 1:2.15.5-3 +- add initial support for smart card security tokens + +* Fri Jul 7 2006 Ray Strode 1:2.15.5-2 +- add patch to process all operations when more than one comes + in really quickly +- move default "Please enter your username" message to the + greeter instead of the slave so that it doesn't get stacked if + a pam module has a non default message +- add new message for reseting the current login operation + (like the cancel button does, but accessible via the gdm fifo) + +* Tue Jun 13 2006 Matthias Clasen 1:2.15.5-1 +- Update to 2.15.5 + +* Mon Jun 12 2006 Bill Nottingham 1:2.15.3-8 +- replace automake14 buildreq with automake + +* Thu Jun 8 2006 Ray Strode 1:2.15.3-7 +- fix CVE-2006-2452 + +* Wed Jun 7 2006 Jeremy Katz - 1:2.15.3-6 +- buildrequire the server so that we get the path right in the config file + +* Tue Jun 06 2006 Karsten Hopp 1:2.15.3-5 +- buildrequire libdmx-devel + +* Mon Jun 5 2006 Matthias Clasen - 1:2.15.3-4 +- Require system-logos, not fedora-logos + +* Tue May 23 2006 Ray Strode - 1:2.15.3-3 +- Support xdm -nodaemon option (bug 192461) + +* Mon May 22 2006 Matthias Clasen - 1:2.15.3-2 +- Add missing BuildRequires (#192494) + +* Wed May 17 2006 Matthias Clasen - 1:2.15.3-1 +- Update to 2.15.3 + +* Wed May 10 2006 Matthias Clasen - 1:2.15.0-1 +- Update to 2.15.0 + +* Wed Apr 26 2006 Matthias Clasen - 1:2.14.4-2 +- Update to 2.14.4 + +* Wed Apr 12 2006 Ray Strode - 1:2.14.1-4 +- fix libexecdir substitution problem in configuration file + +* Tue Apr 11 2006 Ray Strode - 1:2.14.1-3 +- Add gdmthemetester.in to the mix (upstream bug 338079) + +* Tue Apr 11 2006 Matthias Clasen - 1:2.14.1-2 +- Update to 2.14.1 + +* Mon Mar 13 2006 Ray Strode - 1:2.14.0-1 +- Update to 2.14.0 + +* Tue Mar 7 2006 Ray Strode - 1:2.13.0.9-4 +- Follow Solaris's lead and default to AlwaysRestartServer=True + (may work around bug 182957) + +* Mon Mar 6 2006 Ray Strode - 1:2.13.0.9-3 +- migrate users with baseXsession=/etc/X11/gdm/Xsession to + /etc/X11/xinit/Xsession + +* Mon Mar 6 2006 Ray Strode - 1:2.13.0.9-2 +- disable sounds completely when disabled in configuration file + (upstream bug 333435) + +* Tue Feb 28 2006 Ray Strode - 1:2.13.0.9-1 +- Update to 2.13.0.9 +- Use new %%post section, written by + Michal Jaegermann (bug 183082) + +* Sat Feb 25 2006 Ray Strode - 1:2.13.0.8-6 +- fix a broken link + +* Fri Feb 24 2006 Ray Strode - 1:2.13.0.8-5 +- change some /etc/X11 bits in the spec file to /etc + +* Sun Feb 19 2006 Ray Strode - 1:2.13.0.8-3 +- add server entry for accel-indirect branch of xorg + +* Wed Feb 15 2006 Ray and Matthias - 1:2.13.0.8-2 +- malloc memory that is later freed + +* Mon Feb 13 2006 Ray Strode - 1:2.13.0.8-1 +- update to 2.13.0.8 + +* Mon Feb 13 2006 Ray Strode - 1:2.13.0.7.0.2006.02.12-2 +- migrate custom.conf settings with /etc/X11/gdm to /etc/gdm + +* Sun Feb 12 2006 Ray Strode - 1:2.13.0.7.0.2006.02.12-1 +- update to cvs snapshot +- move gdm to /etc instead of /etc/X11 +- move custom gdm.conf to sysconfdir instead of symlinking from + datadir (bug 180364) + +* Fri Feb 10 2006 Jesse Keating - 1:2.13.0.7-2.1 +- bump again for double-long bug on ppc(64) + +* Thu Feb 9 2006 Matthias Clasen - 2.13.0.7-2 +- Make gdmsetup use consolehelper +- Don't use deprecated pam_stack + +* Tue Feb 07 2006 Jesse Keating - 1:2.13.0.7-1.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Tue Jan 31 2006 Ray Strode - 1:2.13.0.7-1 +- update to 2.13.0.7 + +* Mon Jan 30 2006 Bill Nottingham +- silence gdm-safe-restart + +* Thu Jan 19 2006 Ray Strode - 1:2.13.0.5-7 +- sed -ie isn't the same as sed -i -e (we want the latter) + +* Wed Jan 18 2006 Christopher Aillon - 1:2.13.0.5-6 +- Add patch to fix clock to default to 24h in locales that expect it (175453) + +* Tue Jan 17 2006 Ray Strode - 1:2.13.0.5-1 +- update to 2.13.0.5 (bug 178099) + +* Tue Jan 17 2006 Ray Strode - 1:2.13.0.4-5 +- add new theme by Diana Fong, Máirín Duffy, and me + +* Mon Jan 16 2006 Ray Strode - 1:2.13.0.4-4 +- improve migration snippet (bug 177443). + +* Fri Jan 13 2006 Ray Strode - 1:2.13.0.4-3 +- migrate X server configuration for pre-modular X configurations. + Problems reported by Dennis Gregorovic + +* Mon Jan 9 2006 Ray Strode - 1:2.13.0.4-2 +- use xinit Xsession again. + +* Mon Jan 9 2006 Ray Strode - 1:2.13.0.4-1 +- update to 2.13.0.4 + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Mon Nov 16 2005 Ray Strode - 1:2.8.0.4-13 +- Don't fallback to xsm, try gnome-session instead +- Require xorg-x11-xinit + +* Mon Nov 14 2005 Ray Strode - 1:2.8.0.4-12 +- Make sure that dbus-launch gets called if available + +* Mon Nov 14 2005 Ray Strode - 1:2.8.0.4-11 +- Don't use X session / setup files anymore. +- Don't install early login init scripts +- remove xsri dependency +- don't prune language lists anymore + +* Sun Nov 13 2005 Jeremy Katz - 1:2.8.0.4-10 +- also fix default xsession for where its moved in modular X + +* Sun Nov 13 2005 Jeremy Katz - 1:2.8.0.4-9 +- change requirements for modular X +- patch to find x server with modular X + +* Thu Oct 20 2005 Ray Strode 1:2.8.0.4-8 +- redhat-artwork was busted, require new version + +* Tue Oct 18 2005 Ray Strode 1:2.8.0.4-7 +- zero-initialize message buffer, + bug fixed by Josh Parson (jbparsons@usdavis.edu) (bug 160603) +- fix typo in redhat-artwork requires line + +* Mon Oct 17 2005 Steve Grubb 1:2.8.0.4-6 +- add login audit patch (bug 170569) + +* Mon Oct 17 2005 Ray Strode 1:2.8.0.4-5 +- bump redhat-artwork requirement to get rid of the boot + throbber for now, since it seems to have reappeared + mysteriously (bug 171025) +p +* Thu Oct 13 2005 Dan Walsh 1:2.8.0.4-4 +- Change to use getseuserbyname + +* Thu Sep 28 2005 Dan Walsh 1:2.8.0.4-3 +- Fix selinux not to fail when in permissive mode + +* Thu Sep 27 2005 Ray Strode 1:2.8.0.4-2 +- remove flexiserver from menus + +* Thu Sep 8 2005 Ray Strode 1:2.8.0.4-1 +- update to 2.8.0.4 + +* Tue Sep 6 2005 Ray Strode 1:2.8.0.2-4 +- Apply clean up patch from Steve Grubb (gnome bug 315388). + +* Tue Aug 30 2005 Ray Strode 1:2.8.0.2-3 +- Prune language list of installed languages +- Make config file noreplace again (bug 167087). + +* Sat Aug 20 2005 Ray Strode 1:2.8.0.2-2 +- hide throbber + +* Fri Aug 19 2005 Ray Strode 1:2.8.0.2-1 +- update to 2.8.0.2 +- disable early login stuff temporarily + +* Thu Aug 18 2005 Ray Strode 1:2.6.0.8-18 +- rebuild + +* Wed Aug 10 2005 Ray Strode 1:2.6.0.8-17 +- Prune uninstalled languages from language list. + +* Mon May 23 2005 Ray Strode 1:2.6.0.8-16 +- Make sure username/password incorrect message gets displayed + (bug 158127). +- reread system locale before starting gdm in early login mode + (bug 158376). + +* Thu May 19 2005 Ray Strode 1:2.6.0.8-15 +- Take out some syslog spew (bug 157711). + +* Thu May 12 2005 Ray Strode 1:2.6.0.8-14 +- Fix processing of new-line characters that got broken + in 2.6.0.8-11 (bug 157442). + +* Tue May 3 2005 Ray Strode 1:2.6.0.8-12 +- Fix processing of non-ascii characters that got broken + in 2.6.0.8-11, found by Miloslav Trmac , + (bug 156590). + +* Thu Apr 28 2005 Ray Strode 1:2.6.0.8-11 +- Fix halt command (bug 156299) +- Process all messages sent to the greeter in a read, not just + the first + +* Wed Apr 27 2005 Jeremy Katz - 1:2.6.0.8-10 +- silence %%postun + +* Tue Apr 26 2005 Ray Strode 1:2.6.0.8-9 +- Change default standard greeter theme to clearlooks and + default graphical greeter theme to Bluecurve specifically. + +- Change default path values (bug 154280) + +* Mon Apr 25 2005 Matthias Clasen 1:2.6.0.8-8 +- for early-login, delay XDMCP initialization until allow-login + +* Sun Apr 24 2005 Ray Strode 1:2.6.0.8-7 +- calling gdm_debug and g_strdup_printf from signal handlers are + bad news (Spotted by Mark McLoughlin ). + +* Tue Apr 19 2005 Matthias Clasen 1:2.6.0.8-6 +- Add a throbber for early login + +* Mon Apr 18 2005 Ray Strode 1:2.6.0.8-5 +- Don't install gnome.desktop to /usr/share/xsessions (bug 145791) + +* Thu Apr 14 2005 Matthias Clasen 1:2.6.0.8-4 +- Don't do early-login if firstboot is going to run +- Make early-login work with timed and automatic logins + +* Wed Apr 13 2005 Ray Strode 1:2.6.0.8-3 +- Don't hard code dpi setting to 96.0, but instead look at + Xft.dpi + +* Wed Apr 13 2005 Ray Strode 1:2.6.0.8-2 +- touch /var/lock/subsys/gdm-early-login so gdm gets killed on + runlevel changes (bug 154414) +- don't try to use system dpi settings for canvas text (bug 127532) +- merge resource database from displays other than :0 + +* Sat Apr 2 2005 Ray Strode 1:2.6.0.8-1 +- update to 2.6.0.8 +- add new init scripts to support early-login mode + +* Tue Mar 29 2005 Ray Strode 1:2.6.0.7-8 +- Add a --wait-for-bootup cmdline option. + +* Mon Mar 28 2005 Christopher Aillon +- rebuilt + +* Fri Mar 25 2005 Christopher Aillon 1:2.6.0.7-6 +- Update the GTK+ theme icon cache on (un)install + +* Fri Mar 11 2005 Alexandre Oliva 1:2.6.0.7-5 +- fix patch for bug 149899 (fixes bug 150745) + +* Wed Mar 09 2005 Than Ngo 1:2.6.0.7-4 +- add OnlyShowIn=GNOME; + +* Mon Feb 28 2005 Ray Strode 1:2.6.0.7-3 +- seteuid/egid as user before testing for presence of + user's home directory (fixes bug 149899) + +* Thu Feb 10 2005 Ray Strode 1:2.6.0.7-2 +- Turn off "switchdesk" mode by default which accidentally got + turned on by default in 2.6.0.5-4 + +* Wed Feb 2 2005 Matthias Clasen 1:2.6.0.7-1 +- Update to 2.6.0.7 + +* Tue Jan 25 2005 Ray Strode 1:2.6.0.5-11 +- Fix bug in greeter sort-session-list patch where selecting + a session did nothing (bug 145626) + +* Thu Dec 9 2004 Dan Walsh 1:2.6.0.5-10 +- Remove pam_selinux from gdmsetup pam file + +* Wed Dec 1 2004 Ray Strode 1:2.6.0.5-9 +- Look up and use username instead of assuming that user entered + login is cannonical. Patch from + Mike Patnode (fixes bug 141380). + +* Thu Nov 11 2004 Ray Strode 1:2.6.0.5-8 +- Sort session list so that default session comes out on top + (fixes bug 107324) + +* Wed Nov 10 2004 Ray Strode 1:2.6.0.5-7 +- Make desktop file symlink instead of absolute (bug 104390) +- Add flexiserver back to menus + +* Wed Oct 20 2004 Ray Strode 1:2.6.0.5-6 +- Clean up xses if the session was successfullly completed. + (fixes bug #136382) + +* Tue Oct 19 2004 Ray Strode 1:2.6.0.5-5 +- Prefer nb_NO over no_NO for Norwegian (fixes bug #136033) + +* Thu Oct 7 2004 Alexander Larsson - 1:2.6.0.5-4 +- Change default greeter theme to "Default", require + redhat-artwork with Default symlink. + +* Wed Sep 29 2004 Ray Strode 1:2.6.0.5-3 +- Check if there is a selected node before using iterator. + (fixes bug #133329). + +* Fri Sep 24 2004 Ray Strode 1:2.6.0.5-2 +- Don't mess with gdmphotosetup categories. Upstream categories + are fine. + +* Mon Sep 20 2004 Ray Strode 1:2.6.0.5-1 +- update to 2.6.0.5 + +* Tue Aug 3 2004 Matthias Clasen 1:2.6.0.3-5 +- fix messed up changelog + +* Tue Aug 3 2004 Matthias Clasen 1:2.6.0.3-4 +- rebuilt + +* Thu Aug 2 2004 Ray Strode 1:2.6.0.3-3 +- rebuilt + +* Mon Jul 26 2004 Bill Nottingham 1:2.6.0.3-2 +- fix theme (#128599) + +* Thu Jun 17 2004 Ray Strode 1:2.6.0.3-1 +- update to 2.6.0.3 (fixes bug #117677) + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Fri May 21 2004 Matthias Clasen 1:2.6.0.0-5 +- rebuild + +* Mon May 17 2004 Than Ngo 1:2.6.0.0-4 +- add patch to build gdm-binary with PIE + +* Thu Apr 22 2004 Mark McLoughlin - 1:2.6.0.0-3 +- Update the "use switchdesk" message to only be display when + switchdesk-gui is installed and to not reference a non existant + menu item (bug #121460) + +* Fri Apr 2 2004 Colin Walters 1:2.6.0.0-2 +- Always put session errors in /tmp, in preparation for + completely preventing gdm from writing to /home/ + +* Thu Apr 1 2004 Alex Larsson 1:2.6.0.0-1 +- update to 2.6.0.0 + +* Tue Mar 16 2004 Dan Walsh 1:2.5.90.3-1 +- Use selinux patch again + +* Tue Mar 16 2004 Dan Walsh 1:2.5.90.3-1 +- Stop using selinux patch and use pam_selinux instead. + +* Wed Mar 10 2004 Alex Larsson 1:2.5.90.2-1 +- update to 2.5.90.2 + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Thu Feb 26 2004 Alexander Larsson 1:2.5.90.1-1 +- update to 2.5.90.1 + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Feb 03 2004 Warren Togami 1:2.4.4.5-9 +- add two lines to match upstream CVS to xdmcp_sessions.patch + Fully resolves #110315 and #113154 + +* Sun Feb 01 2004 Warren Togami 1:2.4.4.5-8 +- patch30 xdmcp_session counter fix from gdm-2.5.90.0 #110315 +- automake14 really needed, not automake +- BR libcroco-devel, libcroco-devel, libattr-devel, gettext +- conditionally BR libselinux-devel +- explicit epoch in all deps +- make the ja.po time format change with a sed expression rather than + overwriting the whole file (Petersen #113995) + +* Thu Jan 29 2004 Jeremy Katz - 1:2.4.4.5-7 +- fix build with current auto* + +* Tue Jan 27 2004 Jeremy Katz 1:2.4.4.5-5 +- try a simple rebuild for libcroco abi change + +* Mon Jan 26 2004 Dan Walsh 1:2.4.4.5-4 +- Fix call to is_selinux_enabled + +* Fri Jan 16 2004 Dan Walsh 1:2.4.4.5-3 +- Use /sbin/reboot and /sbin/poweroff instead of consolehelper version + +* Thu Oct 30 2003 Dan Walsh 1:2.4.4.5-2.sel +- turn on SELinux + +* Mon Oct 20 2003 Jonathan Blandford 2:2.4.4.5-1 +- get rid of the teal + +* Fri Oct 17 2003 Jonathan Blandford 1:2.4.4.5-1 +- new version + +* Thu Oct 9 2003 Jonathan Blandford 1:2.4.4.3-6.sel +- new patch from George to fix #106189 +- change bg color in rhdefaults patch +- turn off SELinux + +* Thu Oct 8 2003 Dan Walsh 1:2.4.4.3-6.sel +- turn on SELinux + +* Tue Oct 7 2003 Alexander Larsson 1:2.4.4.3-5 +- Fix greeter line-breaking crash (rest of #106189) + +* Tue Oct 7 2003 Alexander Larsson 1:2.4.4.3-4 +- Set the BaseXSession properly in the config. +- This fixes parts of bug #106189 + +* Mon Oct 6 2003 Havoc Pennington 1:2.4.4.3-3 +- change DefaultSession=Default.desktop to DefaultSession=default.desktop +- SELinux off again + +* Fri Oct 3 2003 Dan Walsh 1:2.4.4.3-2.sel +- turn on SELinux + +* Thu Oct 2 2003 Havoc Pennington 1:2.4.4.3-1 +- 2.4.4.3 +- --without-selinux for now, since libselinux not in the buildroot + +* Mon Sep 8 2003 Dan Walsh 1:2.4.4.0-4 +- turn off SELinux + +* Fri Sep 5 2003 Dan Walsh 1:2.4.4.0-3.sel +- turn on SELinux + +* Thu Sep 4 2003 Alexander Larsson 1:2.4.4.0-2 +- Use the right default session (#103546) + +* Wed Sep 3 2003 Alexander Larsson 1:2.4.4.0-1 +- update to 2.4.4.0 +- update to georges new selinux patch + +* Fri Aug 29 2003 Elliot Lee 1:2.4.2.102-2 +- Remove scrollkeeper files + +* Tue Aug 26 2003 George Lebl 1:2.4.2.102-1 +- updated to 2.4.2.102 +- removed outdated patches +- Use Xsetup_0 only for :0 since that's the way it works + for xdm +- remove the gnome.desktop file, its going into gnome-session + +* Thu Aug 14 2003 Havoc Pennington 1:2.4.1.6-1 +- update to latest bugfix version on george's advice +- remove setlocale patch that's upstream +- remove console setup patches that are upstream + +* Thu Jun 12 2003 Dan Walsh 2.4.1.3-9 +- Port to SELinux + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Tue Jun 3 2003 Jeff Johnson +- add explicit epoch's where needed. + +* Sun May 04 2003 Florian La Roche +- fix post: localstatedir -> _localstatedir + +* Thu May 1 2003 Havoc Pennington 1:2.4.1.3-6 +- enable UTF-8 for CJK + +* Mon Feb 24 2003 Elliot Lee +- debuginfo rebuild + +* Thu Feb 20 2003 Owen Taylor +- Run the error dialogs under /bin/sh --login, so we + get lang.sh, and thus unicode_start running. Fixes + the X-doesn't-start dialog showing up as random + blinking characters. + +* Fri Feb 14 2003 Havoc Pennington 1:2.4.1.3-2 +- nuke buildreq Xft + +* Wed Feb 5 2003 Havoc Pennington 1:2.4.1.3-1 +- upgrade to 2.4.1.3 + +* Mon Feb 3 2003 Matt Wilson 1:2.4.1.1-6 +- added gdm-2.4.1.1-64bit.patch to fix 64 bit crash in cookie + generation (#83334) + +* Mon Feb 3 2003 Owen Taylor +- Add patch to fix problem where setting LC_COLLATE=C would give LC_MESSAGES=wa_BE (#82019) + +* Thu Jan 30 2003 Matt Wilson 1:2.4.1.1-3 +- fix pam.d entry, pam_env wasn't properly patched +- disable optimizations on x86_64 to work around gcc bug + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Mon Jan 20 2003 Owen Taylor +- Upgrade to 2.4.1.1 (Fixes #81907) +- Redirect stdout of kill to /dev/null (#80814) + +* Thu Jan 9 2003 Havoc Pennington +- 2.4.1.0 +- add patch from george to ask "are you sure?" for shutdown/reboot since it's now just one click away + +* Thu Dec 19 2002 Havoc Pennington +- 2.4.0.12 +- update new patch for no-utf8-in-cjk +- drop patch to photo setup, now upstream +- drop confdocs patch now upstream +- move all the gdm.conf changes into single "rhconfig" patch +- remove "sid-fix" patch now upstream + +* Mon Nov 11 2002 Nalin Dahyabhai 2.4.0.7-14 +- remove the directory part of module specifications from the PAM config files, + allowing the same PAM config to work for either arch on multilib boxes + +* Thu Sep 5 2002 Owen Taylor +- Change zh_CN entry in language menu to zh_CN.GB18030 + +* Thu Sep 5 2002 Akira TAGOH 2.4.0.7-12 +- copied gdm-ja.po to ja.po. + +* Mon Sep 2 2002 Owen Taylor +- Fix problem where gdm was opening ~/.xsession-errors itself to bad effect + +* Sat Aug 31 2002 Havoc Pennington +- include ja.po with new date format + +* Wed Aug 28 2002 Havoc Pennington +- remove noreplace on gdm.conf #71309 +- make gnome-gdmsetup absolute, #72910 + +* Wed Aug 28 2002 Havoc Pennington +- put /usr/X11R6/bin in path for now fixes #72781 +- use proper i18n algorithm for word wrap, #71937 +- remove greek text from language picker due to lack + of greek font +- reorder PAM config file #72657 + +* Wed Aug 28 2002 Havoc Pennington +- improve gdmsetup icon +- remove GNOME session, we will instead put it in gnome-session +- apply patch from george to make gdmphotosetup file selector + work + +* Mon Aug 26 2002 Elliot Lee 2.4.0.7-6 +- Patches for #64902, #66486, #68483, #71308 +- post-install script changes from the gdm.spec mentioned in #70965 +- noreplace on gdm.conf for #71309 + +* Sun Aug 25 2002 Havoc Pennington +- put in a patch from george to fix some setsid()/kill() confusion + possibly fixing #72295 +- turn off UseCirclesInEntry for now, fixes #72433 + +* Tue Aug 20 2002 Alexander Larsson +- Set UseCirclesInEntry to true in config + +* Thu Aug 15 2002 Havoc Pennington +- rename Gnome session to GNOME, this was just bugging me + +* Thu Aug 8 2002 Havoc Pennington +- 2.4.0.7 with bugfixes George kindly did for me, + including mnemonics for the graphical greeter +- use Wonderland gtk theme for the nongraphical greeter +- remove patches that are now upstream + +* Tue Jul 30 2002 Havoc Pennington +- update rhconfig patch +- use pam_timestamp for the config tool +- link to a desktop file in redhat-menus +- update .gnome2 patch, filed upstream bug +- 2.4.0.4 +- rebuild with new gail, librsvg2 + +* Tue Jun 25 2002 Owen Taylor +- Require redhat-artwork, make the default greeter theme Wonderland +- Look for all configuration in .gnome2 not .gnome. This avoids problems + with changes in the set of session/lang. +- Remove English from locale.alias, make most locales UTF-8 +- Call find_lang with the right name + +* Sun Jun 16 2002 Havoc Pennington +- rebuild for new libs +- put gdm-autologin pam config file in file list, hope + its absence wasn't deliberate +- use desktop-file-install + +* Mon Jun 10 2002 Havoc Pennington +- rebuild in different environment + +* Mon Jun 10 2002 Havoc Pennington +- 2.4.0.0 + +* Tue May 21 2002 Havoc Pennington +- rebuild in different environment + +* Tue May 21 2002 Havoc Pennington +- 2.3.90.3 + +* Tue May 14 2002 Matt Wilson 2.3.90.2.90-1 +- pulled from current CVS, named it 2.3.90.2.90-1 + +* Thu Feb 14 2002 Havoc Pennington +- rebuild for new libs +- add URL tag + +* Mon Feb 11 2002 Alex Larsson 2.3.90.1.90-1 +- Updated to a cvs snapshot that has the new greeter. + +* Thu Jan 24 2002 Havoc Pennington +- rebuild in rawhide + +* Tue Sep 4 2001 Havoc Pennington +- fix #52997 (ukrainian in language list) + +* Fri Aug 31 2001 Havoc Pennington +- Add po files from sources.redhat.com + +* Mon Aug 27 2001 Havoc Pennington +- Add po files from sources.redhat.com + +* Wed Aug 15 2001 Nalin Dahyabhai +- set SESSION to true in console.apps control file + +* Tue Aug 14 2001 Havoc Pennington +- change default title font to work in CJK, #51698 + +* Wed Aug 8 2001 Bill Nottingham +- fix %pre for using /var/gdm as home dir + +* Sun Aug 5 2001 Nalin Dahyabhai +- Tweak PAM setup for gdmconfig to match other consolehelper users + +* Fri Aug 3 2001 Owen Taylor +- Set RUNNING_UNDER_GDM when running display init script +- Run xsri as the background program + +* Thu Aug 02 2001 Havoc Pennington +- Change how session switching works, #49480 +- don't offer to make Failsafe the default, #49479 + +* Thu Aug 02 2001 Havoc Pennington +- clean up some format string mess, and don't + log username to syslog, #5681 +- own some directories #50692 + +* Wed Aug 01 2001 Havoc Pennington +- require/buildrequire latest gnome-libs, to compensate + for upstream crackrock. #50554 + +* Tue Jul 31 2001 Havoc Pennington +- get rid of GiveConsole/TakeConsole, bug #33710 + +* Sun Jul 22 2001 Havoc Pennington +- use Raleigh theme for gdm + +* Thu Jul 19 2001 Havoc Pennington +- depend on usermode, xinitrc + +* Thu Jul 19 2001 Havoc Pennington +- build requires pam-devel, should fix #49448 + +* Mon Jul 16 2001 Havoc Pennington +- log to /var/log/gdm/* + +* Mon Jul 16 2001 Havoc Pennington +- make Halt... power off + +* Tue Jul 10 2001 Havoc Pennington +- gdm user's homedir to /var/gdm not /home/gdm + +* Mon Jul 09 2001 Havoc Pennington +- put pam.d/gdm back in file list + +* Sun Jul 08 2001 Havoc Pennington +- upgrade to 2.2.3.1, pray this fixes more than it breaks + +* Thu Jul 05 2001 Havoc Pennington +- add "rpm" user to those not to show in greeter + +* Tue Jul 03 2001 Havoc Pennington +- Upgrade to 2.2.3 +- require usermode since configure script now checks for it + +* Fri Jun 01 2001 Havoc Pennington +- Prereq for scrollkeeper-update + +* Thu May 30 2001 Havoc Pennington +- New CVS snap with the "no weird sessions" options; + more default settings changes + +* Wed May 30 2001 Havoc Pennington +- Change a bunch of default settings; remaining fixes will involve C hacking + +* Wed May 30 2001 Havoc Pennington +- After, oh, 2 years or so, finally upgrade version and set + release to 1. Remove all hacks and patches, pretty much; + this will break a few things, will be putting them back + via GNOME CVS. All changes should go in 'gdm2' module in + CVS for now. + + This RPM enables all kinds of features that I'm going to turn + off shortly, so don't get excited about them. ;-) + +* Thu Mar 22 2001 Nalin Dahyabhai +- reinitialize pam credentials after calling initgroups() -- the + credentials may be group memberships + +* Mon Mar 19 2001 Owen Taylor +- Fix colors patch + +* Thu Mar 15 2001 Havoc Pennington +- translations + +* Mon Mar 5 2001 Preston Brown +- don't screw up color map on 8 bit displays + +* Fri Feb 23 2001 Trond Eivind Glomsrød +- langify +- Don't define and use "ver" and "nam" at the top of the spec file +- use %%{_tmppath} + +* Tue Feb 13 2001 Tim Powers +- don't allow gdm to show some system accounts in the browser bugzilla + #26898 + +* Fri Jan 19 2001 Akira TAGOH +- Updated Japanese translation. + +* Tue Jan 02 2001 Havoc Pennington +- add another close() to the fdleak patch, bugzilla #22794 + +* Sun Aug 13 2000 Owen Taylor +- Return to toplevel main loop and start Xdcmp if enabled + (Bug #16106) + +* Fri Aug 11 2000 Jonathan Blandford +- Up Epoch and release + +* Wed Aug 02 2000 Havoc Pennington +- Requires Xsession script + +* Wed Jul 19 2000 Owen Taylor +- Italian is better as it_IT than it_CH (bugzilla 12425) + +* Mon Jul 17 2000 Jonathan Blandford +- Don't instally gdmconfig as it doesn't work. + +* Fri Jul 14 2000 Havoc Pennington +- Rearrange code to avoid calling innumerable system calls + in a signal handler + +* Fri Jul 14 2000 Havoc Pennington +- Verbose debug spew for infinite loop stuff + +* Fri Jul 14 2000 Havoc Pennington +- Try to fix infinite loops on X server failure + +* Thu Jul 13 2000 Prospector +- automatic rebuild + +* Thu Jun 29 2000 Havoc Pennington +- Remove Docdir + +* Mon Jun 19 2000 Havoc Pennington +- Fix file descriptor leak (Bugzilla 12301) + +* Mon Jun 19 2000 Havoc Pennington +- Apply security errata patch we released for 6.2 +- Add Gnome.session back, don't know when it disappeared or why + +* Thu Jun 1 2000 Nalin Dahyabhai +- modify PAM setup to use system-auth + +* Fri May 19 2000 Havoc Pennington +- rebuild for the Winston tree + +* Fri Feb 04 2000 Havoc Pennington +- Modify Default.session and Failsafe.session not to add -login option to bash +- exec the session scripts with the user's shell with a hyphen prepended +- doesn't seem to actually work yet with tcsh, but it doesn't seem to + break anything. needs a look to see why it doesn't work + +* Fri Feb 04 2000 Havoc Pennington +- Link PreSession/Default to xdm/GiveConsole +- Link PostSession/Default to xdm/TakeConsole + +* Fri Feb 04 2000 Havoc Pennington +- Fix the fix to the fix (8877) +- remove docs/gdm-manual.txt which doesn't seem to exist from %doc + +* Fri Feb 04 2000 Havoc Pennington +- Enhance 8877 fix by not deleting the "Please login" + message + +* Fri Feb 04 2000 Havoc Pennington +- Try to fix bug 8877 by clearing the message below + the entry box when the prompt changes. may turn + out to be a bad idea. + +* Mon Jan 17 2000 Elliot Lee +- Fix bug #7666: exec Xsession instead of just running it + +* Mon Oct 25 1999 Jakub Jelinek +- Work around so that russian works (uses koi8-r instead + of the default iso8859-5) + +* Tue Oct 12 1999 Owen Taylor +- Try again + +* Tue Oct 12 1999 Owen Taylor +- More fixes for i18n + +* Tue Oct 12 1999 Owen Taylor +- Fixes for i18n + +* Fri Sep 26 1999 Elliot Lee +- Fixed pipewrite bug (found by mkj & ewt). + +* Fri Sep 17 1999 Michael Fulbright +- added requires for pam >= 0.68 + +* Fri Sep 10 1999 Elliot Lee +- I just update this package every five minutes, so any recent changes are my fault. + +* Thu Sep 02 1999 Michael K. Johnson +- built gdm-2.0beta2 + +* Mon Aug 30 1999 Michael K. Johnson +- built gdm-2.0beta1 + +* Tue Aug 17 1999 Michael Fulbright +- included rmeier@liberate.com patch for tcp socket X connections + +* Mon Apr 19 1999 Michael Fulbright +- fix to handling ancient gdm config files with non-standard language specs +- dont close display connection for xdmcp connections, else we die if remote + end dies. + +* Fri Apr 16 1999 Michael Fulbright +- fix language handling to set GDM_LANG variable so gnome-session + can pick it up + +* Wed Apr 14 1999 Michael Fulbright +- fix so certain dialog boxes dont overwrite background images + +* Wed Apr 14 1999 Michael K. Johnson +- do not specify -r 42 to useradd -- it doesn't know how to fall back + if id 42 is already taken + +* Fri Apr 9 1999 Michael Fulbright +- removed suspend feature + +* Mon Apr 5 1999 Jonathan Blandford +- added patch from otaylor to not call gtk funcs from a signal. +- added patch to tab when username not added. +- added patch to center About box (and bring up only one) and ignore "~" + and ".rpm" files. + +* Fri Mar 26 1999 Michael Fulbright +- fixed handling of default session, merged all gdmgreeter patches into one + +* Tue Mar 23 1999 Michael Fulbright +- remove GNOME/KDE/AnotherLevel session scripts, these have been moved to + the appropriate packages instead. +- added patch to make option menus always active (security problem otherwise) +- added jrb's patch to disable stars in passwd entry field + +* Fri Mar 19 1999 Michael Fulbright +- made sure /usr/bin isnt in default path twice +- strip binaries + +* Wed Mar 17 1999 Michael Fulbright +- fixed to use proper system path when root logs in + +* Tue Mar 16 1999 Michael Fulbright +- linked Init/Default to Red Hat default init script for xdm +- removed logo from login dialog box + +* Mon Mar 15 1999 Michael Johnson +- pam_console integration + +* Tue Mar 09 1999 Michael Fulbright +- added session files for GNOME/KDE/AnotherLevel/Default/Failsafe +- patched gdmgreeter to not complete usernames +- patched gdmgreeter to not safe selected session permanently +- patched gdmgreeter to center dialog boxes + +* Mon Mar 08 1999 Michael Fulbright +- removed comments from gdm.conf file, these are not parsed correctly + +* Sun Mar 07 1999 Michael Fulbright +- updated source line for accuracy + +* Fri Feb 26 1999 Owen Taylor +- Updated patches for 1.0.0 +- Fixed some problems in 1.0.0 with installation directories +- moved /usr/var/gdm /var/gdm + +* Thu Feb 25 1999 Michael Fulbright +- moved files from /usr/etc to /etc + +* Tue Feb 16 1999 Michael Johnson +- removed commented-out #1 definition -- put back after testing gnome-libs + comment patch + +* Sat Feb 06 1999 Michael Johnson +- initial packaging