Accepting request 737582 from GNOME:Factory
New stable + patch OBS-URL: https://build.opensuse.org/request/show/737582 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gdm?expand=0&rev=218
This commit is contained in:
commit
9cfbd35bf4
5
_service
5
_service
@ -2,9 +2,8 @@
|
||||
<service name="obs_scm" mode="disabled">
|
||||
<param name="scm">git</param>
|
||||
<param name="url">https://gitlab.gnome.org/GNOME/gdm.git</param>
|
||||
<param name="revision">gnome-3-32</param>
|
||||
<param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
|
||||
<param name="changesgenerate">enable</param>
|
||||
<param name="revision">refs/tags/3.34.1</param>
|
||||
<param name="versionformat">@PARENT_TAG@</param>
|
||||
</service>
|
||||
<service name="tar" mode="buildtime"/>
|
||||
<service name="recompress" mode="buildtime">
|
||||
|
@ -1,4 +0,0 @@
|
||||
<servicedata>
|
||||
<service name="tar_scm">
|
||||
<param name="url">https://gitlab.gnome.org/GNOME/gdm.git</param>
|
||||
<param name="changesrevision">0e31d869aa20e13b346af6ef6aa11cf72ba2e833</param></service></servicedata>
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0cc3a6ed7b243b359dd7a478eab7c511958230a37e331c25e5432b05a22498cc
|
||||
size 7465997
|
3
gdm-3.34.1.obscpio
Normal file
3
gdm-3.34.1.obscpio
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6767010dfa403267b0a2dd8242932cbbb7891da13b310e7cfbec79a34076b5e1
|
||||
size 7456269
|
@ -1,16 +1,17 @@
|
||||
diff -Nura gdm-3.26.2.1/daemon/gdm-display.c gdm-3.26.2.1_new/daemon/gdm-display.c
|
||||
--- gdm-3.26.2.1/daemon/gdm-display.c 2017-12-05 18:56:25.988123494 +0800
|
||||
+++ gdm-3.26.2.1_new/daemon/gdm-display.c 2017-12-05 18:57:00.248398445 +0800
|
||||
@@ -591,7 +591,7 @@
|
||||
Index: b/daemon/gdm-display.c
|
||||
===================================================================
|
||||
--- a/daemon/gdm-display.c 2019-10-11 21:11:39.925180538 +0800
|
||||
+++ b/daemon/gdm-display.c 2019-10-11 21:14:23.866397460 +0800
|
||||
@@ -570,7 +570,7 @@ gdm_display_prepare (GdmDisplay *self)
|
||||
*/
|
||||
look_for_existing_users_sync (self);
|
||||
|
||||
- self->priv->doing_initial_setup = wants_initial_setup (self);
|
||||
+ self->priv->doing_initial_setup = FALSE;
|
||||
- priv->doing_initial_setup = wants_initial_setup (self);
|
||||
+ priv->doing_initial_setup = FALSE;
|
||||
|
||||
g_object_ref (self);
|
||||
ret = GDM_DISPLAY_GET_CLASS (self)->prepare (self);
|
||||
@@ -1441,6 +1441,7 @@
|
||||
@@ -1509,6 +1509,7 @@ on_launch_environment_session_died (GdmL
|
||||
self_destruct (self);
|
||||
}
|
||||
|
||||
@ -18,19 +19,7 @@ diff -Nura gdm-3.26.2.1/daemon/gdm-display.c gdm-3.26.2.1_new/daemon/gdm-display
|
||||
static gboolean
|
||||
can_create_environment (const char *session_id)
|
||||
{
|
||||
@@ -1454,9 +1455,11 @@
|
||||
|
||||
return session_exists;
|
||||
}
|
||||
+#endif
|
||||
|
||||
#define ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT GDM_RUN_DIR "/gdm.ran-initial-setup"
|
||||
|
||||
+#if 0
|
||||
static gboolean
|
||||
already_done_initial_setup_on_this_boot (void)
|
||||
{
|
||||
@@ -1591,6 +1594,7 @@
|
||||
@@ -1660,6 +1661,7 @@ wants_initial_setup (GdmDisplay *self)
|
||||
|
||||
return enabled;
|
||||
}
|
||||
@ -38,9 +27,10 @@ diff -Nura gdm-3.26.2.1/daemon/gdm-display.c gdm-3.26.2.1_new/daemon/gdm-display
|
||||
|
||||
void
|
||||
gdm_display_start_greeter_session (GdmDisplay *self)
|
||||
diff -Nura gdm-3.26.2.1/data/gdm.schemas.in.in gdm-3.26.2.1_new/data/gdm.schemas.in.in
|
||||
--- gdm-3.26.2.1/data/gdm.schemas.in.in 2017-12-05 18:56:25.982123446 +0800
|
||||
+++ gdm-3.26.2.1_new/data/gdm.schemas.in.in 2017-12-05 18:57:44.712755287 +0800
|
||||
Index: b/data/gdm.schemas.in
|
||||
===================================================================
|
||||
--- a/data/gdm.schemas.in 2019-10-11 21:11:39.925180538 +0800
|
||||
+++ b/data/gdm.schemas.in 2019-10-11 21:11:43.473206874 +0800
|
||||
@@ -50,7 +50,7 @@
|
||||
<schema>
|
||||
<key>daemon/InitialSetupEnable</key>
|
||||
|
@ -1,13 +0,0 @@
|
||||
Index: gdm-3.32.0+2/daemon/gdm-display.c
|
||||
===================================================================
|
||||
--- gdm-3.32.0+2.orig/daemon/gdm-display.c
|
||||
+++ gdm-3.32.0+2/daemon/gdm-display.c
|
||||
@@ -696,7 +696,7 @@ gdm_display_unmanage (GdmDisplay *self)
|
||||
}
|
||||
|
||||
elapsed = g_timer_elapsed (priv->server_timer, NULL);
|
||||
- if (elapsed < 3) {
|
||||
+ if (elapsed < 10) {
|
||||
g_warning ("GdmDisplay: display lasted %lf seconds", elapsed);
|
||||
_gdm_display_set_status (self, GDM_DISPLAY_FAILED);
|
||||
} else {
|
92
gdm-initial-setup-hardening.patch
Normal file
92
gdm-initial-setup-hardening.patch
Normal file
@ -0,0 +1,92 @@
|
||||
Index: b/daemon/gdm-display.c
|
||||
===================================================================
|
||||
--- a/daemon/gdm-display.c 2019-10-07 16:56:30.000000000 +0800
|
||||
+++ b/daemon/gdm-display.c 2019-10-11 18:32:02.962410140 +0800
|
||||
@@ -1523,12 +1523,12 @@ can_create_environment (const char *sess
|
||||
return session_exists;
|
||||
}
|
||||
|
||||
-#define ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT GDM_RUN_DIR "/gdm.ran-initial-setup"
|
||||
+#define BLOCK_INITIAL_SETUP LOCALSTATEDIR "/lib/gdm/block-initial-setup"
|
||||
|
||||
static gboolean
|
||||
-already_done_initial_setup_on_this_boot (void)
|
||||
+already_done_initial_setup (void)
|
||||
{
|
||||
- if (g_file_test (ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT, G_FILE_TEST_EXISTS))
|
||||
+ if (g_file_test (BLOCK_INITIAL_SETUP, G_FILE_TEST_EXISTS))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
@@ -1624,7 +1624,7 @@ wants_initial_setup (GdmDisplay *self)
|
||||
|
||||
priv = gdm_display_get_instance_private (self);
|
||||
|
||||
- if (already_done_initial_setup_on_this_boot ()) {
|
||||
+ if (already_done_initial_setup ()) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Index: b/daemon/gdm-manager.c
|
||||
===================================================================
|
||||
--- a/daemon/gdm-manager.c 2019-10-07 16:56:30.000000000 +0800
|
||||
+++ b/daemon/gdm-manager.c 2019-10-11 18:32:26.370601206 +0800
|
||||
@@ -62,7 +62,7 @@
|
||||
#define GDM_MANAGER_DISPLAYS_PATH GDM_DBUS_PATH "/Displays"
|
||||
|
||||
#define INITIAL_SETUP_USERNAME "gnome-initial-setup"
|
||||
-#define ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT GDM_RUN_DIR "/gdm.ran-initial-setup"
|
||||
+#define BLOCK_INITIAL_SETUP LOCALSTATEDIR "/lib/gdm/block-initial-setup"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -1781,6 +1781,7 @@ on_start_user_session (StartUserSessionO
|
||||
gboolean doing_initial_setup = FALSE;
|
||||
GdmDisplay *display;
|
||||
const char *session_id;
|
||||
+ int fd = -1;
|
||||
#if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER)
|
||||
g_autofree char *display_session_type = NULL;
|
||||
#endif
|
||||
@@ -1813,6 +1814,15 @@ on_start_user_session (StartUserSessionO
|
||||
#endif
|
||||
NULL);
|
||||
|
||||
+ fd = open(BLOCK_INITIAL_SETUP, O_RDONLY|O_CREAT|O_EXCL|O_NOFOLLOW|O_CLOEXEC, 0644);
|
||||
+ if (fd == -1 && errno != EEXIST) {
|
||||
+ g_warning ("GdmDisplay: Could not write initial-setup-done marker to %s: %s",
|
||||
+ BLOCK_INITIAL_SETUP,
|
||||
+ strerror(errno));
|
||||
+ }
|
||||
+ else {
|
||||
+ close(fd);
|
||||
+ }
|
||||
if (doing_initial_setup)
|
||||
chown_initial_setup_home_dir ();
|
||||
|
||||
@@ -1833,8 +1843,6 @@ on_start_user_session (StartUserSessionO
|
||||
|
||||
g_object_ref (display);
|
||||
if (doing_initial_setup) {
|
||||
- g_autoptr(GError) error = NULL;
|
||||
-
|
||||
#if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER)
|
||||
if (g_strcmp0 (display_session_type, "wayland") == 0) {
|
||||
g_debug ("GdmManager: closing down initial setup display in background");
|
||||
@@ -1847,16 +1855,6 @@ on_start_user_session (StartUserSessionO
|
||||
gdm_display_unmanage (display);
|
||||
gdm_display_finish (display);
|
||||
}
|
||||
-
|
||||
- if (!g_file_set_contents (ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT,
|
||||
- "1",
|
||||
- 1,
|
||||
- &error)) {
|
||||
- g_warning ("GdmDisplay: Could not write initial-setup-done marker to %s: %s",
|
||||
- ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT,
|
||||
- error->message);
|
||||
- g_clear_error (&error);
|
||||
- }
|
||||
} else {
|
||||
g_debug ("GdmManager: session has its display server, reusing our server for another login screen");
|
||||
}
|
@ -1,264 +0,0 @@
|
||||
Index: gdm-3.32.0+2/daemon/gdm-display-store.c
|
||||
===================================================================
|
||||
--- gdm-3.32.0+2.orig/daemon/gdm-display-store.c
|
||||
+++ gdm-3.32.0+2/daemon/gdm-display-store.c
|
||||
@@ -136,6 +136,35 @@ typedef struct
|
||||
gpointer user_data;
|
||||
} FindClosure;
|
||||
|
||||
+static void
|
||||
+copy_func (StoredDisplay *stored_display,
|
||||
+ FindClosure *closure)
|
||||
+{
|
||||
+ closure->user_data = g_list_append (closure->user_data,
|
||||
+ stored_display->display);
|
||||
+}
|
||||
+
|
||||
+GList *
|
||||
+gdm_display_store_get_displays (GdmDisplayStore *store)
|
||||
+{
|
||||
+ GList *displays = NULL;
|
||||
+ GList *store_displays = NULL;
|
||||
+ FindClosure closure;
|
||||
+ g_return_val_if_fail (store != NULL, NULL);
|
||||
+
|
||||
+ store_displays = g_hash_table_get_values (store->priv->displays);
|
||||
+
|
||||
+ closure.user_data = displays;
|
||||
+
|
||||
+ g_list_foreach (store_displays,
|
||||
+ (GFunc) copy_func,
|
||||
+ &closure);
|
||||
+ displays = closure.user_data;
|
||||
+
|
||||
+ g_list_free (store_displays);
|
||||
+ return displays;
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
find_func (const char *id,
|
||||
StoredDisplay *stored_display,
|
||||
Index: gdm-3.32.0+2/daemon/gdm-display-store.h
|
||||
===================================================================
|
||||
--- gdm-3.32.0+2.orig/daemon/gdm-display-store.h
|
||||
+++ gdm-3.32.0+2/daemon/gdm-display-store.h
|
||||
@@ -86,6 +86,8 @@ GdmDisplay * gdm_display_store_fi
|
||||
GdmDisplayStoreFunc predicate,
|
||||
gpointer user_data);
|
||||
|
||||
+GList * gdm_display_store_get_displays (GdmDisplayStore *store);
|
||||
+
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
Index: gdm-3.32.0+2/daemon/gdm-manager.c
|
||||
===================================================================
|
||||
--- gdm-3.32.0+2.orig/daemon/gdm-manager.c
|
||||
+++ gdm-3.32.0+2/daemon/gdm-manager.c
|
||||
@@ -2735,9 +2735,7 @@ unexport_display (const char *id,
|
||||
}
|
||||
|
||||
static void
|
||||
-finish_display (const char *id,
|
||||
- GdmDisplay *display,
|
||||
- GdmManager *manager)
|
||||
+finish_display (GdmDisplay *display)
|
||||
{
|
||||
gdm_display_stop_greeter_session (display);
|
||||
if (gdm_display_get_status (display) == GDM_DISPLAY_MANAGED)
|
||||
@@ -2749,6 +2747,7 @@ static void
|
||||
gdm_manager_dispose (GObject *object)
|
||||
{
|
||||
GdmManager *manager;
|
||||
+ GList *displays = NULL;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GDM_IS_MANAGER (object));
|
||||
@@ -2790,9 +2789,11 @@ gdm_manager_dispose (GObject *object)
|
||||
g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (manager));
|
||||
}
|
||||
|
||||
- gdm_display_store_foreach (manager->priv->display_store,
|
||||
- (GdmDisplayStoreFunc) finish_display,
|
||||
- manager);
|
||||
+ displays = gdm_display_store_get_displays (manager->priv->display_store);
|
||||
+ g_list_foreach (displays,
|
||||
+ (GFunc) finish_display,
|
||||
+ NULL);
|
||||
+ g_list_free (displays);
|
||||
|
||||
gdm_display_store_clear (manager->priv->display_store);
|
||||
|
||||
Index: gdm-3.32.0+2/daemon/gdm-session-worker.c
|
||||
===================================================================
|
||||
--- gdm-3.32.0+2.orig/daemon/gdm-session-worker.c
|
||||
+++ gdm-3.32.0+2/daemon/gdm-session-worker.c
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <errno.h>
|
||||
#include <grp.h>
|
||||
#include <pwd.h>
|
||||
+#include <signal.h>
|
||||
|
||||
#include <security/pam_appl.h>
|
||||
|
||||
@@ -181,6 +182,8 @@ struct GdmSessionWorkerPrivate
|
||||
GdmSessionSettings *user_settings;
|
||||
|
||||
GDBusMethodInvocation *pending_invocation;
|
||||
+
|
||||
+ GMainLoop *main_loop;
|
||||
};
|
||||
|
||||
#ifdef SUPPORTS_PAM_EXTENSIONS
|
||||
@@ -197,6 +200,7 @@ enum {
|
||||
PROP_0,
|
||||
PROP_SERVER_ADDRESS,
|
||||
PROP_IS_REAUTH_SESSION,
|
||||
+ PROP_MAIN_LOOP,
|
||||
};
|
||||
|
||||
static void gdm_session_worker_class_init (GdmSessionWorkerClass *klass);
|
||||
@@ -2456,6 +2460,13 @@ gdm_session_worker_set_is_reauth_session
|
||||
}
|
||||
|
||||
static void
|
||||
+gdm_session_worker_set_main_loop (GdmSessionWorker *worker,
|
||||
+ GMainLoop *main_loop)
|
||||
+{
|
||||
+ worker->priv->main_loop = main_loop;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
gdm_session_worker_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
@@ -2472,6 +2483,9 @@ gdm_session_worker_set_property (GObject
|
||||
case PROP_IS_REAUTH_SESSION:
|
||||
gdm_session_worker_set_is_reauth_session (self, g_value_get_boolean (value));
|
||||
break;
|
||||
+ case PROP_MAIN_LOOP:
|
||||
+ gdm_session_worker_set_main_loop (self, g_value_get_pointer (value));
|
||||
+ break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -2495,6 +2509,9 @@ gdm_session_worker_get_property (GObject
|
||||
case PROP_IS_REAUTH_SESSION:
|
||||
g_value_set_boolean (value, self->priv->is_reauth_session);
|
||||
break;
|
||||
+ case PROP_MAIN_LOOP:
|
||||
+ g_value_set_pointer (value, self->priv->main_loop);
|
||||
+ break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -2764,6 +2781,16 @@ do_open_session (GdmSessionWorker *worke
|
||||
worker->priv->pending_invocation = NULL;
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+on_shutdown_signal_cb (gpointer user_data)
|
||||
+{
|
||||
+ GMainLoop *mainloop = user_data;
|
||||
+
|
||||
+ g_main_loop_quit (mainloop);
|
||||
+
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
do_start_session (GdmSessionWorker *worker)
|
||||
{
|
||||
@@ -2773,6 +2800,9 @@ do_start_session (GdmSessionWorker *work
|
||||
error = NULL;
|
||||
res = gdm_session_worker_start_session (worker, &error);
|
||||
if (res) {
|
||||
+ g_unix_signal_add (SIGTERM, on_shutdown_signal_cb, worker->priv->main_loop);
|
||||
+ g_unix_signal_add (SIGINT, on_shutdown_signal_cb, worker->priv->main_loop);
|
||||
+
|
||||
gdm_dbus_worker_complete_start_program (GDM_DBUS_WORKER (worker),
|
||||
worker->priv->pending_invocation,
|
||||
worker->priv->child_pid);
|
||||
@@ -3471,6 +3501,13 @@ gdm_session_worker_class_init (GdmSessio
|
||||
"is reauth session",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
|
||||
+
|
||||
+ g_object_class_install_property (object_class,
|
||||
+ PROP_MAIN_LOOP,
|
||||
+ g_param_spec_pointer ("main-loop",
|
||||
+ "main loop",
|
||||
+ "main loop",
|
||||
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3561,13 +3598,15 @@ gdm_session_worker_finalize (GObject *ob
|
||||
|
||||
GdmSessionWorker *
|
||||
gdm_session_worker_new (const char *address,
|
||||
- gboolean is_reauth_session)
|
||||
+ gboolean is_reauth_session,
|
||||
+ GMainLoop *main_loop)
|
||||
{
|
||||
GObject *object;
|
||||
|
||||
object = g_object_new (GDM_TYPE_SESSION_WORKER,
|
||||
"server-address", address,
|
||||
"is-reauth-session", is_reauth_session,
|
||||
+ "main-loop", main_loop,
|
||||
NULL);
|
||||
|
||||
return GDM_SESSION_WORKER (object);
|
||||
Index: gdm-3.32.0+2/daemon/gdm-session-worker.h
|
||||
===================================================================
|
||||
--- gdm-3.32.0+2.orig/daemon/gdm-session-worker.h
|
||||
+++ gdm-3.32.0+2/daemon/gdm-session-worker.h
|
||||
@@ -51,6 +51,7 @@ typedef struct
|
||||
GType gdm_session_worker_get_type (void);
|
||||
|
||||
GdmSessionWorker * gdm_session_worker_new (const char *server_address,
|
||||
- gboolean is_for_reauth) G_GNUC_MALLOC;
|
||||
+ gboolean is_for_reauth,
|
||||
+ GMainLoop *main_loop) G_GNUC_MALLOC;
|
||||
G_END_DECLS
|
||||
#endif /* GDM_SESSION_WORKER_H */
|
||||
Index: gdm-3.32.0+2/daemon/session-worker-main.c
|
||||
===================================================================
|
||||
--- gdm-3.32.0+2.orig/daemon/session-worker-main.c
|
||||
+++ gdm-3.32.0+2/daemon/session-worker-main.c
|
||||
@@ -64,12 +64,6 @@ is_debug_set (void)
|
||||
return debug;
|
||||
}
|
||||
|
||||
-static void
|
||||
-on_sigterm_cb (int signal_number)
|
||||
-{
|
||||
- _exit (EXIT_SUCCESS);
|
||||
-}
|
||||
-
|
||||
int
|
||||
main (int argc,
|
||||
char **argv)
|
||||
@@ -83,8 +77,6 @@ main (int argc,
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
- signal (SIGTERM, on_sigterm_cb);
|
||||
-
|
||||
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
|
||||
textdomain (GETTEXT_PACKAGE);
|
||||
setlocale (LC_ALL, "");
|
||||
@@ -120,10 +112,10 @@ main (int argc,
|
||||
|
||||
is_for_reauth = g_getenv ("GDM_SESSION_FOR_REAUTH") != NULL;
|
||||
|
||||
- worker = gdm_session_worker_new (address, is_for_reauth);
|
||||
-
|
||||
main_loop = g_main_loop_new (NULL, FALSE);
|
||||
|
||||
+ worker = gdm_session_worker_new (address, is_for_reauth, main_loop);
|
||||
+
|
||||
g_unix_signal_add (SIGUSR1, on_sigusr1_cb, NULL);
|
||||
|
||||
g_main_loop_run (main_loop);
|
@ -1,99 +0,0 @@
|
||||
Index: gdm-3.32.0+2/libgdm/gdm-sessions.c
|
||||
===================================================================
|
||||
--- gdm-3.32.0+2.orig/libgdm/gdm-sessions.c
|
||||
+++ gdm-3.32.0+2/libgdm/gdm-sessions.c
|
||||
@@ -111,14 +111,6 @@ key_file_is_relevant (GKeyFile *key_
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
-static gboolean
|
||||
-find_session_with_same_name (const char *id,
|
||||
- GdmSessionFile *session,
|
||||
- const char *translated_name)
|
||||
-{
|
||||
- return g_strcmp0 (session->translated_name, translated_name) == 0;
|
||||
-}
|
||||
-
|
||||
static void
|
||||
load_session_file (const char *id,
|
||||
const char *path)
|
||||
@@ -126,7 +118,7 @@ load_session_file (const char
|
||||
GKeyFile *key_file;
|
||||
GError *error;
|
||||
gboolean res;
|
||||
- GdmSessionFile *session, *session_with_same_name;
|
||||
+ GdmSessionFile *session;
|
||||
|
||||
key_file = g_key_file_new ();
|
||||
|
||||
@@ -162,13 +154,6 @@ load_session_file (const char
|
||||
session->translated_name = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, "Name", NULL, NULL);
|
||||
session->translated_comment = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, "Comment", NULL, NULL);
|
||||
|
||||
- session_with_same_name = g_hash_table_find (gdm_available_sessions_map,
|
||||
- (GHRFunc) find_session_with_same_name,
|
||||
- session->translated_name);
|
||||
-
|
||||
- if (session_with_same_name != NULL)
|
||||
- g_hash_table_remove (gdm_available_sessions_map, session_with_same_name->id);
|
||||
-
|
||||
g_hash_table_insert (gdm_available_sessions_map,
|
||||
g_strdup (id),
|
||||
session);
|
||||
@@ -176,6 +161,29 @@ load_session_file (const char
|
||||
g_key_file_free (key_file);
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+remove_duplicate_sessions (gpointer key,
|
||||
+ gpointer value,
|
||||
+ gpointer user_data)
|
||||
+{
|
||||
+ gboolean already_known;
|
||||
+ const char *id;
|
||||
+ GHashTable *names_seen_before;
|
||||
+ GdmSessionFile *session;
|
||||
+
|
||||
+ id = (const char *) key;
|
||||
+ names_seen_before = (GHashTable *) user_data;
|
||||
+ session = (GdmSessionFile *) value;
|
||||
+ already_known = !g_hash_table_add (names_seen_before, session->translated_name);
|
||||
+
|
||||
+ if (already_known)
|
||||
+ g_debug ("GdmSession: Removing %s (%s) as we already have a session by this name",
|
||||
+ session->id,
|
||||
+ session->path);
|
||||
+
|
||||
+ return already_known;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
collect_sessions_from_directory (const char *dirname)
|
||||
{
|
||||
@@ -230,6 +238,7 @@ collect_sessions_from_directory (const c
|
||||
static void
|
||||
collect_sessions (void)
|
||||
{
|
||||
+ g_autoptr(GHashTable) names_seen_before = NULL;
|
||||
GArray *xorg_search_array = NULL;
|
||||
GArray *wayland_search_array = NULL;
|
||||
gchar *session_dir = NULL;
|
||||
@@ -241,6 +250,8 @@ collect_sessions (void)
|
||||
DATADIR "/xsessions/",
|
||||
};
|
||||
|
||||
+ names_seen_before = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
+
|
||||
xorg_search_array = g_array_new (TRUE, TRUE, sizeof (char *));
|
||||
|
||||
const gchar * const *system_data_dirs = g_get_system_data_dirs ();
|
||||
@@ -292,6 +303,9 @@ collect_sessions (void)
|
||||
|
||||
g_array_free (wayland_search_array, TRUE);
|
||||
#endif
|
||||
+ g_hash_table_foreach_remove (gdm_available_sessions_map,
|
||||
+ remove_duplicate_sessions,
|
||||
+ names_seen_before);
|
||||
}
|
||||
|
||||
/**
|
@ -8,7 +8,7 @@ Index: gdm-3.32.0+2/daemon/main.c
|
||||
|
||||
+#define SHELLSCRIPT "\
|
||||
+/bin/bash -c \
|
||||
+\'PROCESS=\"X Xwayland\"\;\
|
||||
+\'PROCESS=\"X Xwayland plymouth\"\;\
|
||||
+R=$(pidof $PROCESS)\;\
|
||||
+while [ $? == 0 ]\;\
|
||||
+do sleep 1\;\
|
||||
|
@ -1,8 +1,7 @@
|
||||
Index: gdm-3.31.91/common/gdm-common.c
|
||||
===================================================================
|
||||
--- gdm-3.31.91.orig/common/gdm-common.c 2019-02-21 20:44:14.000000000 +0100
|
||||
+++ gdm-3.31.91/common/gdm-common.c 2019-02-27 07:47:16.998264608 +0100
|
||||
@@ -632,6 +632,8 @@ gdm_get_script_environment (const char *
|
||||
diff -urp gdm-3.33.90.orig/common/gdm-common.c gdm-3.33.90/common/gdm-common.c
|
||||
--- gdm-3.33.90.orig/common/gdm-common.c 2019-08-13 14:42:23.000000000 -0500
|
||||
+++ gdm-3.33.90/common/gdm-common.c 2019-08-31 20:49:56.456485182 -0500
|
||||
@@ -631,6 +631,8 @@ gdm_get_script_environment (const char *
|
||||
|
||||
if (display_hostname) {
|
||||
g_hash_table_insert (hash, g_strdup ("REMOTE_HOST"), g_strdup (display_hostname));
|
||||
@ -11,9 +10,9 @@ Index: gdm-3.31.91/common/gdm-common.c
|
||||
}
|
||||
|
||||
/* Runs as root */
|
||||
@@ -843,3 +845,14 @@ gdm_shell_expand (const char *str,
|
||||
}
|
||||
return g_string_free (s, FALSE);
|
||||
@@ -952,3 +954,14 @@ gdm_find_display_session_for_uid (const
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
+
|
||||
+char *
|
||||
@ -26,11 +25,10 @@ Index: gdm-3.31.91/common/gdm-common.c
|
||||
+ return g_strdup ("localhost");
|
||||
+ }
|
||||
+}
|
||||
Index: gdm-3.31.91/common/gdm-common.h
|
||||
===================================================================
|
||||
--- gdm-3.31.91.orig/common/gdm-common.h 2019-02-21 20:44:14.000000000 +0100
|
||||
+++ gdm-3.31.91/common/gdm-common.h 2019-02-27 07:47:16.998264608 +0100
|
||||
@@ -56,6 +56,7 @@ char *gdm_generate_random_bytes
|
||||
diff -urp gdm-3.33.90.orig/common/gdm-common.h gdm-3.33.90/common/gdm-common.h
|
||||
--- gdm-3.33.90.orig/common/gdm-common.h 2019-08-13 14:42:23.000000000 -0500
|
||||
+++ gdm-3.33.90/common/gdm-common.h 2019-08-31 20:49:56.460485202 -0500
|
||||
@@ -65,6 +65,7 @@ char *gdm_generate_random_bytes
|
||||
gboolean gdm_get_login_window_session_id (const char *seat_id,
|
||||
char **session_id);
|
||||
gboolean gdm_goto_login_session (GError **error);
|
||||
@ -38,10 +36,9 @@ Index: gdm-3.31.91/common/gdm-common.h
|
||||
|
||||
GPtrArray *gdm_get_script_environment (const char *username,
|
||||
const char *display_name,
|
||||
Index: gdm-3.31.91/daemon/gdm-display-access-file.c
|
||||
===================================================================
|
||||
--- gdm-3.31.91.orig/daemon/gdm-display-access-file.c 2019-02-21 20:44:14.000000000 +0100
|
||||
+++ gdm-3.31.91/daemon/gdm-display-access-file.c 2019-02-27 07:47:16.998264608 +0100
|
||||
diff -urp gdm-3.33.90.orig/daemon/gdm-display-access-file.c gdm-3.33.90/daemon/gdm-display-access-file.c
|
||||
--- gdm-3.33.90.orig/daemon/gdm-display-access-file.c 2019-08-02 14:44:35.000000000 -0500
|
||||
+++ gdm-3.33.90/daemon/gdm-display-access-file.c 2019-08-31 20:49:56.460485202 -0500
|
||||
@@ -441,13 +441,10 @@ _get_auth_info_for_display (GdmDisplayAc
|
||||
*
|
||||
* https://bugs.freedesktop.org/show_bug.cgi?id=43425
|
||||
@ -59,11 +56,10 @@ Index: gdm-3.31.91/daemon/gdm-display-access-file.c
|
||||
} else {
|
||||
*family = FamilyWild;
|
||||
gdm_display_get_remote_hostname (display, address, NULL);
|
||||
Index: gdm-3.31.91/daemon/gdm-launch-environment.c
|
||||
===================================================================
|
||||
--- gdm-3.31.91.orig/daemon/gdm-launch-environment.c 2019-02-21 20:44:14.000000000 +0100
|
||||
+++ gdm-3.31.91/daemon/gdm-launch-environment.c 2019-02-27 07:47:16.998264608 +0100
|
||||
@@ -218,6 +218,11 @@ build_launch_environment (GdmLaunchEnvir
|
||||
diff -urp gdm-3.33.90.orig/daemon/gdm-launch-environment.c gdm-3.33.90/daemon/gdm-launch-environment.c
|
||||
--- gdm-3.33.90.orig/daemon/gdm-launch-environment.c 2019-08-13 20:37:16.000000000 -0500
|
||||
+++ gdm-3.33.90/daemon/gdm-launch-environment.c 2019-08-31 20:49:56.460485202 -0500
|
||||
@@ -216,6 +216,11 @@ build_launch_environment (GdmLaunchEnvir
|
||||
g_hash_table_insert (hash, g_strdup ("GDM_SEAT_ID"), g_strdup (seat_id));
|
||||
}
|
||||
|
||||
@ -75,10 +71,9 @@ Index: gdm-3.31.91/daemon/gdm-launch-environment.c
|
||||
g_hash_table_insert (hash, g_strdup ("RUNNING_UNDER_GDM"), g_strdup ("true"));
|
||||
|
||||
return hash;
|
||||
Index: gdm-3.31.91/daemon/gdm-session.c
|
||||
===================================================================
|
||||
--- gdm-3.31.91.orig/daemon/gdm-session.c 2019-02-27 07:47:16.990264560 +0100
|
||||
+++ gdm-3.31.91/daemon/gdm-session.c 2019-02-27 07:47:16.998264608 +0100
|
||||
diff -urp gdm-3.33.90.orig/daemon/gdm-session.c gdm-3.33.90/daemon/gdm-session.c
|
||||
--- gdm-3.33.90.orig/daemon/gdm-session.c 2019-08-31 20:49:31.756354259 -0500
|
||||
+++ gdm-3.33.90/daemon/gdm-session.c 2019-08-31 20:49:56.464485224 -0500
|
||||
@@ -2683,6 +2683,14 @@ set_up_session_environment (GdmSession *
|
||||
}
|
||||
}
|
||||
|
77
gdm.changes
77
gdm.changes
@ -1,3 +1,74 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 8 11:37:53 UTC 2019 - Felix Zhang <fezhang@suse.com>
|
||||
|
||||
- Add gdm-initial-setup-hardening.patch: Introduce a persistent
|
||||
state file to prevent gnome-initial-setup from running if any
|
||||
regular users has previously logged into the system, replacing
|
||||
the current runtime state file that pervents initial-setup from
|
||||
running more than once per boot, so as to reduce the security
|
||||
attack surface.
|
||||
Make this fix openSUSE only for now as upstream discussion is
|
||||
heading another way involving more complicated mechanisms
|
||||
(boo#1140851, glgo#GNOME/gnome-initial-setup#76).
|
||||
- Rebase gdm-disable-gnome-initial-setup.patch.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 7 10:02:43 UTC 2019 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 3.34.1:
|
||||
+ De-duplicate sessions on pure Xorg too.
|
||||
+ Fix fast user switching by assuming the login screen VT is
|
||||
always the initial one.
|
||||
+ Updated translations.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Sep 18 02:59:55 UTC 2019 - Xiaoguang Wang <xwang@suse.com>
|
||||
|
||||
- Update gdm-switch-to-tty1.patch: switch tty after plymouth
|
||||
terminates.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Sep 11 16:25:58 UTC 2019 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 3.34.0:
|
||||
+ Updated translations.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Sep 5 12:30:54 NZST 2019 - luke@ljones.dev
|
||||
|
||||
- Update to version 3.33.92:
|
||||
+ Fix typo in debug message
|
||||
+ Revert vt changing fix, because it exposes logind bug and it
|
||||
wasn't quite right anyway
|
||||
+ Ensure login screen gets reaped when user switching
|
||||
+ Translation updates
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Sep 1 01:53:57 UTC 2019 - Michael Gorse <mgorse@suse.com>
|
||||
|
||||
- Update to version 3.33.90:
|
||||
+ Update for changes to gnome-settings-daemon.
|
||||
+ initial-setup permissions fix.
|
||||
+ allow users to set PATH from ~/.config/environment.
|
||||
+ support systemd user sessions.
|
||||
+ misc warning fixes.
|
||||
+ leak fix in libgdm.
|
||||
+ vt changing fix.
|
||||
+ drop some deprecations.
|
||||
+ drop unused icons.
|
||||
+ Translation updates.
|
||||
+ Changes in version 3.33.4:
|
||||
+ Fix session search directories.
|
||||
+ Kill user sessions when stopping gdm.
|
||||
+ Add way for sessions to register when they successfully started
|
||||
+ Translation updates.
|
||||
- Rebased gdm-xauthlocalhostname.patch and
|
||||
gdm-disable-gnome-initial-setup.patch.
|
||||
- Drop gdm-fails-to-restart-gnome-shell.patch,
|
||||
gdm-kill-user-session.patch, and
|
||||
gdm-remove-duplicate-sessions.patch: fixed upstream.
|
||||
- Drop icons and pixmaps from files.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Aug 02 19:05:30 UTC 2019 - bjorn.lie@gmail.com
|
||||
|
||||
@ -34,9 +105,9 @@ Thu May 9 08:58:52 UTC 2019 - Xiaoguang Wang <xwang@suse.com>
|
||||
-------------------------------------------------------------------
|
||||
Sun Apr 28 07:23:07 UTC 2019 - qzheng <qzheng@suse.com>
|
||||
|
||||
- Add gdm-remove-duplicate-sessions.patch: Backport from upstream
|
||||
commit 187c8515 and 1795bb31 to remove duplicate sessions once,
|
||||
after all sessions have been processed (boo#1131625,
|
||||
- Add gdm-remove-duplicate-sessions.patch: Backport from upstream
|
||||
commit 187c8515 and 1795bb31 to remove duplicate sessions once,
|
||||
after all sessions have been processed (boo#1131625,
|
||||
glgo#GNOME/gdm#473).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
@ -1,5 +1,5 @@
|
||||
name: gdm
|
||||
version: 3.32.0+2
|
||||
mtime: 1552499029
|
||||
commit: 820f90f5a78b81b2e4610da14627266c2135c8b0
|
||||
version: 3.34.1
|
||||
mtime: 1570438590
|
||||
commit: 80e010198217284d3cf52e8b334862a80b00cbd1
|
||||
|
||||
|
19
gdm.spec
19
gdm.spec
@ -19,14 +19,15 @@
|
||||
%define systemdsystemunitdir %(pkg-config --variable=systemdsystemunitdir systemd)
|
||||
# FIXME: need to check what should be done to enable this (at least adapt the pam files). See bnc#699999
|
||||
%define enable_split_authentication 0
|
||||
|
||||
Name: gdm
|
||||
Version: 3.32.0+2
|
||||
Version: 3.34.1
|
||||
Release: 0
|
||||
Summary: The GNOME Display Manager
|
||||
License: GPL-2.0-or-later
|
||||
Group: System/GUI/GNOME
|
||||
URL: https://wiki.gnome.org/Projects/GDM
|
||||
# We are using source services, so no download url for source
|
||||
|
||||
Source0: %{name}-%{version}.tar.xz
|
||||
Source1: gdm.pamd
|
||||
Source2: gdm-autologin.pamd
|
||||
@ -54,16 +55,12 @@ Patch3: gdm-default-wm.patch
|
||||
Patch4: gdm-xauthlocalhostname.patch
|
||||
# PATCH-FIX-OPENSUSE gdm-switch-to-tty1.patch bsc#1113700 xwang@suse.com -- switch to tty1 when stopping gdm service
|
||||
Patch6: gdm-switch-to-tty1.patch
|
||||
# PATCH-FIX-UPSTREAM gdm-fails-to-restart-gnome-shell.patch bsc#981976 glgo#GNOME/gdm#266 tyang@suse.com -- Gdm should stop after a few times fails
|
||||
Patch7: gdm-fails-to-restart-gnome-shell.patch
|
||||
# PATCH-FIX-OPENSUSE gdm-add-runtime-option-to-disable-starting-X-server-as-u.patch bnc#1075805 bgo#793255 msrb@suse.com -- Add runtime option to start X under root instead of regular user. Necessary if no DRI drivers are present. rejected upstream
|
||||
Patch8: gdm-add-runtime-option-to-disable-starting-X-server-as-u.patch
|
||||
# PATCH-FIX-UPSTREAM gdm-kill-user-session.patch bsc#1112294 glgo#GNOME/gdm#400 xwang@suse.com -- Kill all sessions when stopping gdm service
|
||||
Patch11: gdm-kill-user-session.patch
|
||||
# PATCH-FIX-OPENSUSE gdm-initial-setup-hardening.patch boo#1140851, glgo#GNOME/gnome-initial-setup#76 fezhang@suse.com -- Prevent gnome-initial-setup running if any regular user has perviously logged into the system
|
||||
Patch9: gdm-initial-setup-hardening.patch
|
||||
# PATCH-FIX-OPENSUSE gdm-s390-not-require-g-s-d_wacom.patch bsc#1129412 yfjiang@suse.com -- Remove the runtime requirement of g-s-d Wacom plugin
|
||||
Patch13: gdm-s390-not-require-g-s-d_wacom.patch
|
||||
# PATCH-FIX-UPSTREAM gdm-remove-duplicate-sessions.patch boo#1131625 glgo#GNOME/gdm#473 qzheng@suse.com -- Remove duplicate sessions once, after all sessions have been processed.
|
||||
Patch14: gdm-remove-duplicate-sessions.patch
|
||||
### NOTE: Keep please SLE-only patches at bottom (starting on 1000).
|
||||
# PATCH-FIX-SLE gdm-disable-gnome-initial-setup.patch bnc#1067976 qzhao@suse.com -- Disable gnome-initial-setup runs before gdm, g-i-s will only serve for CJK people to choose the input-method after login.
|
||||
Patch1000: gdm-disable-gnome-initial-setup.patch
|
||||
@ -214,13 +211,11 @@ cp %{SOURCE8} .
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch11 -p1
|
||||
%patch9 -p1
|
||||
%ifarch s390 s390x
|
||||
%patch13 -p1
|
||||
%endif
|
||||
%patch14 -p1
|
||||
|
||||
# SLE-only patches start at 1000
|
||||
%if !0%{?is_opensuse}
|
||||
@ -343,8 +338,6 @@ dconf update
|
||||
%{_datadir}/gdm/
|
||||
%{_datadir}/gnome-session/sessions/gnome-login.session
|
||||
%{_datadir}/glib-2.0/schemas/org.gnome.login-screen.gschema.xml
|
||||
%{_datadir}/icons/*/*/*/*.*
|
||||
%{_datadir}/pixmaps/*.png
|
||||
/%{_lib}/security/pam_gdm.so
|
||||
%dir %{_libexecdir}/gdm
|
||||
%{_libexecdir}/gdm/gdm-*
|
||||
|
Loading…
x
Reference in New Issue
Block a user