Am 13.05.2017 um 20:40 schrieb Michael Biebl: > The complete debdiff is attached. I only filtered autotools related > noise.
Oops, one pipe too many. Seems I managed to attach the diffstat, not the actual debdiff. Please find it attached now. Michael -- Why is it that all of the instruments seeking intelligent life in the universe are pointed away from Earth?
diff -Nru gdm3-3.22.1/common/gdm-address.c gdm3-3.22.3/common/gdm-address.c --- gdm3-3.22.1/common/gdm-address.c 2016-09-21 21:27:19.000000000 +0200 +++ gdm3-3.22.3/common/gdm-address.c 2017-03-03 21:32:41.000000000 +0100 @@ -220,14 +220,13 @@ static void _gdm_address_debug (GdmAddress *address, - const char *hostname, const char *host, const char *port) { - g_debug ("Address family:%d (%s) hostname:%s host:%s port:%s local:%d loopback:%d", + g_debug ("Address family:%d (%s) host:%s port:%s local:%d loopback:%d", + address->ss->ss_family, address_family_str (address) ? address_family_str (address) : "(null)", - hostname ? hostname : "(null)", host ? host : "(null)", port ? port : "(null)", gdm_address_is_local (address), @@ -237,13 +236,14 @@ void gdm_address_debug (GdmAddress *address) { - char *hostname; - char *host; - char *port; + char *hostname = NULL; + char *host = NULL; + char *port = NULL; - gdm_address_get_hostname (address, &hostname); gdm_address_get_numeric_info (address, &host, &port); + _gdm_address_debug (address, host, port); + g_free (hostname); g_free (host); g_free (port); @@ -277,7 +277,8 @@ err_msg = gai_strerror (res); g_warning ("Unable to lookup hostname: %s", err_msg ? err_msg : "(null)"); - _gdm_address_debug (address, NULL, NULL, NULL); + _gdm_address_debug (address, NULL, NULL); + } /* try numeric? */ @@ -318,7 +319,7 @@ err_msg = gai_strerror (res); g_warning ("Unable to lookup numeric info: %s", err_msg ? err_msg : "(null)"); - _gdm_address_debug (address, NULL, NULL, NULL); + _gdm_address_debug (address, NULL, NULL); } else { ret = TRUE; } @@ -404,8 +405,6 @@ address = gdm_address_new_from_sockaddr ((struct sockaddr *)&ifreq.ifr_addr, sizeof (struct sockaddr)); - gdm_address_debug (address); - *list = g_list_append (*list, address); } } @@ -437,7 +436,8 @@ memset (&hints, 0, sizeof (hints)); hints.ai_family = AF_UNSPEC; - hints.ai_flags = AI_CANONNAME; + hints.ai_flags = AI_CANONNAME | AI_NUMERICHOST; + g_debug ("GdmAddress: looking up hostname: %s", hostbuf); result = NULL; diff -Nru gdm3-3.22.1/configure.ac gdm3-3.22.3/configure.ac --- gdm3-3.22.1/configure.ac 2016-10-12 19:58:41.000000000 +0200 +++ gdm3-3.22.3/configure.ac 2017-03-06 18:09:04.000000000 +0100 @@ -1,7 +1,7 @@ AC_PREREQ([2.60]) AC_INIT([gdm], - [3.22.1], + [3.22.3], [http://bugzilla.gnome.org/enter_bug.cgi?product=gdm]) AC_CONFIG_SRCDIR([daemon/gdm-manager.c]) @@ -84,6 +84,7 @@ 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) @@ -194,6 +195,16 @@ AC_DEFINE(ENABLE_SPLIT_AUTHENTICATION, 1, [Define if split authentication is enabled]) fi +AC_ARG_ENABLE(user-display-server, + AS_HELP_STRING([--enable-user-display-server], + [Enable running X server as user @<:@default=yes@:>@]),, + enable_user_display_server=yes) +AM_CONDITIONAL(ENABLE_USER_DISPLAY_SERVER, test x$user_display_server = xyes) + +if test x$enable_user_display_server = xyes; then + AC_DEFINE(ENABLE_USER_DISPLAY_SERVER, 1, [Define if user display servers are supported]) +fi + AC_ARG_WITH(default-pam-config, AS_HELP_STRING([--with-default-pam-config: One of redhat, openembedded, exherbo, lfs, arch, none @<:@default=auto@:>@])) dnl If not given, try autodetecting from release files (see NetworkManager source) diff -Nru gdm3-3.22.1/daemon/gdm-display.c gdm3-3.22.3/daemon/gdm-display.c --- gdm3-3.22.1/daemon/gdm-display.c 2016-09-21 21:27:19.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-display.c 2017-03-01 21:58:01.000000000 +0100 @@ -34,8 +34,7 @@ #include <glib/gi18n.h> #include <glib-object.h> -#include <X11/Xlib.h> -#include <X11/Xatom.h> +#include <xcb/xcb.h> #include "gdm-common.h" #include "gdm-display.h" @@ -76,7 +75,8 @@ guint finish_idle_id; - Display *x11_display; + xcb_connection_t *xcb_connection; + int xcb_screen_number; GDBusConnection *connection; GdmDisplayAccessFile *user_access_file; @@ -292,32 +292,17 @@ } static void -setup_xhost_auth (XHostAddress *host_entries, - XServerInterpretedAddress *si_entries) +setup_xhost_auth (XHostAddress *host_entries) { - si_entries[0].type = "localuser"; - si_entries[0].typelength = strlen ("localuser"); - si_entries[1].type = "localuser"; - si_entries[1].typelength = strlen ("localuser"); - si_entries[2].type = "localuser"; - si_entries[2].typelength = strlen ("localuser"); - - si_entries[0].value = "root"; - si_entries[0].valuelength = strlen ("root"); - si_entries[1].value = GDM_USERNAME; - si_entries[1].valuelength = strlen (GDM_USERNAME); - si_entries[2].value = "gnome-initial-setup"; - si_entries[2].valuelength = strlen ("gnome-initial-setup"); - host_entries[0].family = FamilyServerInterpreted; - host_entries[0].address = (char *) &si_entries[0]; - host_entries[0].length = sizeof (XServerInterpretedAddress); + host_entries[0].address = "localuser\0root"; + host_entries[0].length = sizeof ("localuser\0root"); host_entries[1].family = FamilyServerInterpreted; - host_entries[1].address = (char *) &si_entries[1]; - host_entries[1].length = sizeof (XServerInterpretedAddress); + host_entries[1].address = "localuser\0" GDM_USERNAME; + host_entries[1].length = sizeof ("localuser\0" GDM_USERNAME); host_entries[2].family = FamilyServerInterpreted; - host_entries[2].address = (char *) &si_entries[2]; - host_entries[2].length = sizeof (XServerInterpretedAddress); + host_entries[2].address = "localuser\0gnome-initial-setup"; + host_entries[2].length = sizeof ("localuser\0gnome-initial-setup"); } gboolean @@ -331,8 +316,8 @@ gboolean res; int i; - XServerInterpretedAddress si_entries[3]; XHostAddress host_entries[3]; + xcb_void_cookie_t cookies[3]; g_return_val_if_fail (GDM_IS_DISPLAY (self), FALSE); @@ -382,14 +367,25 @@ /* Remove access for the programs run by greeter now that the * user session is starting. */ - setup_xhost_auth (host_entries, si_entries); - gdm_error_trap_push (); + setup_xhost_auth (host_entries); + for (i = 0; i < G_N_ELEMENTS (host_entries); i++) { - XRemoveHost (self->priv->x11_display, &host_entries[i]); + cookies[i] = xcb_change_hosts_checked (self->priv->xcb_connection, + XCB_HOST_MODE_DELETE, + host_entries[i].family, + host_entries[i].length, + (uint8_t *) host_entries[i].address); } - XSync (self->priv->x11_display, False); - if (gdm_error_trap_pop ()) { - g_warning ("Failed to remove greeter program access to the display. Trying to proceed."); + + for (i = 0; i < G_N_ELEMENTS (cookies); i++) { + xcb_generic_error_t *xcb_error; + + xcb_error = xcb_request_check (self->priv->xcb_connection, cookies[i]); + + if (xcb_error != NULL) { + g_warning ("Failed to remove greeter program access to the display. Trying to proceed."); + free (xcb_error); + } } return TRUE; @@ -649,6 +645,41 @@ return TRUE; } +static void +gdm_display_disconnect (GdmDisplay *self) +{ + /* These 3 bits are reserved/unused by the X protocol */ + guint32 unused_bits = 0b11100000000000000000000000000000; + XID highest_client, client; + guint32 client_increment; + const xcb_setup_t *setup; + + if (self->priv->xcb_connection == NULL) { + return; + } + + setup = xcb_get_setup (self->priv->xcb_connection); + + /* resource_id_mask is the bits given to each client for + * addressing resources */ + highest_client = (XID) ~unused_bits & ~setup->resource_id_mask; + client_increment = setup->resource_id_mask + 1; + + /* Kill every client but ourselves, then close our own connection + */ + for (client = 0; + client <= highest_client; + client += client_increment) { + + if (client != setup->resource_id_base) + xcb_kill_client (self->priv->xcb_connection, client); + } + + xcb_flush (self->priv->xcb_connection); + + g_clear_pointer (&self->priv->xcb_connection, xcb_disconnect); +} + gboolean gdm_display_unmanage (GdmDisplay *self) { @@ -658,6 +689,8 @@ g_debug ("GdmDisplay: unmanage display"); + gdm_display_disconnect (self); + g_timer_stop (self->priv->server_timer); if (self->priv->user_access_file != NULL) { @@ -943,7 +976,7 @@ g_value_set_boolean (value, self->priv->is_local); break; case PROP_IS_CONNECTED: - g_value_set_boolean (value, self->priv->x11_display != NULL); + g_value_set_boolean (value, self->priv->xcb_connection != NULL); break; case PROP_LAUNCH_ENVIRONMENT: g_value_set_object (value, self->priv->launch_environment); @@ -1187,7 +1220,7 @@ "x11-display-name", "x11-display-name", NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_SEAT_ID, g_param_spec_string ("seat-id", @@ -1593,70 +1626,78 @@ } } +static xcb_window_t +get_root_window (xcb_connection_t *connection, + int screen_number) +{ + xcb_screen_t *screen = NULL; + xcb_screen_iterator_t iter; + + iter = xcb_setup_roots_iterator (xcb_get_setup (connection)); + while (iter.rem) { + if (screen_number == 0) + screen = iter.data; + screen_number--; + xcb_screen_next (&iter); + } + + if (screen != NULL) { + return screen->root; + } + + return XCB_WINDOW_NONE; +} + static void gdm_display_set_windowpath (GdmDisplay *self) { /* setting WINDOWPATH for clients */ - Atom prop; - Atom actualtype; - int actualformat; - unsigned long nitems; - unsigned long bytes_after; - unsigned char *buf; + xcb_intern_atom_cookie_t atom_cookie; + xcb_intern_atom_reply_t *atom_reply = NULL; + xcb_get_property_cookie_t get_property_cookie; + xcb_get_property_reply_t *get_property_reply = NULL; + xcb_window_t root_window = XCB_WINDOW_NONE; const char *windowpath; char *newwindowpath; - unsigned long num; + uint32_t num; char nums[10]; int numn; - prop = XInternAtom (self->priv->x11_display, "XFree86_VT", False); - if (prop == None) { + atom_cookie = xcb_intern_atom (self->priv->xcb_connection, 0, strlen("XFree86_VT"), "XFree86_VT"); + atom_reply = xcb_intern_atom_reply (self->priv->xcb_connection, atom_cookie, NULL); + + if (atom_reply == NULL) { g_debug ("no XFree86_VT atom\n"); - return; - } - if (XGetWindowProperty (self->priv->x11_display, - DefaultRootWindow (self->priv->x11_display), prop, 0, 1, - False, AnyPropertyType, &actualtype, &actualformat, - &nitems, &bytes_after, &buf)) { - g_debug ("no XFree86_VT property\n"); - return; + goto out; } - if (nitems != 1) { - g_debug ("%lu items in XFree86_VT property!\n", nitems); - XFree (buf); - return; + root_window = get_root_window (self->priv->xcb_connection, + self->priv->xcb_screen_number); + + if (root_window == XCB_WINDOW_NONE) { + g_debug ("couldn't find root window\n"); + goto out; } - switch (actualtype) { - case XA_CARDINAL: - case XA_INTEGER: - case XA_WINDOW: - switch (actualformat) { - case 8: - num = (*(uint8_t *)(void *)buf); - break; - case 16: - num = (*(uint16_t *)(void *)buf); - break; - case 32: - num = (*(long *)(void *)buf); - break; - default: - g_debug ("format %d in XFree86_VT property!\n", actualformat); - XFree (buf); - return; - } - break; - default: - g_debug ("type %lx in XFree86_VT property!\n", actualtype); - XFree (buf); - return; + get_property_cookie = xcb_get_property (self->priv->xcb_connection, + FALSE, + root_window, + atom_reply->atom, + XCB_ATOM_INTEGER, + 0, + 1); + + get_property_reply = xcb_get_property_reply (self->priv->xcb_connection, get_property_cookie, NULL); + + if (get_property_reply == NULL) { + g_debug ("no XFree86_VT property\n"); + goto out; } - XFree (buf); + + num = ((uint32_t *) xcb_get_property_value (get_property_reply))[0]; windowpath = getenv ("WINDOWPATH"); - numn = snprintf (nums, sizeof (nums), "%lu", num); + numn = snprintf (nums, sizeof (nums), "%u", num); if (!windowpath) { newwindowpath = malloc (numn + 1); sprintf (newwindowpath, "%s", nums); @@ -1666,11 +1707,15 @@ } g_setenv ("WINDOWPATH", newwindowpath, TRUE); +out: + g_clear_pointer (&atom_reply, free); + g_clear_pointer (&get_property_reply, free); } gboolean gdm_display_connect (GdmDisplay *self) { + xcb_auth_info_t *auth_info = NULL; gboolean ret; ret = FALSE; @@ -1679,21 +1724,26 @@ /* Get access to the display independent of current hostname */ if (self->priv->x11_cookie != NULL) { - XSetAuthorization ("MIT-MAGIC-COOKIE-1", - strlen ("MIT-MAGIC-COOKIE-1"), - (gpointer) - self->priv->x11_cookie, - self->priv->x11_cookie_size); + auth_info = g_alloca (sizeof (xcb_auth_info_t)); + + auth_info->namelen = strlen ("MIT-MAGIC-COOKIE-1"); + auth_info->name = "MIT-MAGIC-COOKIE-1"; + auth_info->datalen = self->priv->x11_cookie_size; + auth_info->data = self->priv->x11_cookie; + } - self->priv->x11_display = XOpenDisplay (self->priv->x11_display_name); + self->priv->xcb_connection = xcb_connect_to_display_with_auth_info (self->priv->x11_display_name, + auth_info, + &self->priv->xcb_screen_number); - if (self->priv->x11_display == NULL) { + if (xcb_connection_has_error (self->priv->xcb_connection)) { + g_clear_pointer (&self->priv->xcb_connection, xcb_disconnect); g_warning ("Unable to connect to display %s", self->priv->x11_display_name); ret = FALSE; } else if (self->priv->is_local) { - XServerInterpretedAddress si_entries[3]; XHostAddress host_entries[3]; + xcb_void_cookie_t cookies[3]; int i; g_debug ("GdmDisplay: Connected to display %s", self->priv->x11_display_name); @@ -1701,17 +1751,27 @@ /* Give programs access to the display independent of current hostname */ - setup_xhost_auth (host_entries, si_entries); - - gdm_error_trap_push (); + setup_xhost_auth (host_entries); for (i = 0; i < G_N_ELEMENTS (host_entries); i++) { - XAddHost (self->priv->x11_display, &host_entries[i]); + cookies[i] = xcb_change_hosts_checked (self->priv->xcb_connection, + XCB_HOST_MODE_INSERT, + host_entries[i].family, + host_entries[i].length, + (uint8_t *) host_entries[i].address); } - XSync (self->priv->x11_display, False); - if (gdm_error_trap_pop ()) { - g_debug ("Failed to give some system users access to the display. Trying to proceed."); + for (i = 0; i < G_N_ELEMENTS (cookies); i++) { + xcb_generic_error_t *xcb_error; + + xcb_error = xcb_request_check (self->priv->xcb_connection, cookies[i]); + + if (xcb_error != NULL) { + g_debug ("Failed to give system user '%s' access to the display. Trying to proceed.", host_entries[i].address + sizeof ("localuser")); + free (xcb_error); + } else { + g_debug ("Gave system user '%s' access to the display.", host_entries[i].address + sizeof ("localuser")); + } } gdm_display_set_windowpath (self); diff -Nru gdm3-3.22.1/daemon/gdm-local-display-factory.c gdm3-3.22.3/daemon/gdm-local-display-factory.c --- gdm3-3.22.1/daemon/gdm-local-display-factory.c 2016-09-21 21:27:20.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-local-display-factory.c 2017-03-01 16:58:36.000000000 +0100 @@ -206,7 +206,17 @@ 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" @@ -358,13 +368,14 @@ g_debug ("GdmLocalDisplayFactory: Adding display on seat %s", seat_id); - +#ifdef ENABLE_USER_DISPLAY_SERVER if (g_strcmp0 (seat_id, "seat0") == 0) { display = gdm_local_display_new (); if (session_type != NULL) { g_object_set (G_OBJECT (display), "session-type", session_type, NULL); } } +#endif if (display == NULL) { guint32 num; diff -Nru gdm3-3.22.1/daemon/gdm-manager.c gdm3-3.22.3/daemon/gdm-manager.c --- gdm3-3.22.1/daemon/gdm-manager.c 2016-09-21 21:27:20.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-manager.c 2017-03-03 21:32:43.000000000 +0100 @@ -618,10 +618,12 @@ if (existing_session != NULL) { ssid_to_activate = gdm_session_get_session_id (existing_session); - res = activate_session_id (manager, seat_id, ssid_to_activate); - if (! res) { - g_debug ("GdmManager: unable to activate session: %s", ssid_to_activate); - goto out; + if (seat_id != NULL) { + res = activate_session_id (manager, seat_id, ssid_to_activate); + if (! res) { + g_debug ("GdmManager: unable to activate session: %s", ssid_to_activate); + goto out; + } } res = session_unlock (manager, ssid_to_activate); @@ -781,8 +783,10 @@ if (session != NULL) { GPid pid; - if (x11_display_name != NULL) + if (x11_display_name != NULL) { g_object_set (G_OBJECT (session), "display-name", x11_display_name, NULL); + g_object_set (G_OBJECT (display), "x11-display-name", x11_display_name, NULL); + } /* FIXME: this should happen in gdm-session.c when the session is opened */ @@ -1329,9 +1333,6 @@ GdmSession *session; char *display_session_type = NULL; gboolean is_initial; -#ifdef ENABLE_WAYLAND_SUPPORT - gboolean greeter_would_have_been_wayland; -#endif /* 0 is root user; since the daemon talks to the session object * directly, itself, for automatic login @@ -1343,15 +1344,8 @@ "session-type", &display_session_type, NULL); -#ifdef ENABLE_WAYLAND_SUPPORT - greeter_would_have_been_wayland = g_strcmp0 (display_session_type, "wayland") == 0; -#endif - g_object_set (G_OBJECT (session), "display-is-initial", is_initial, -#ifdef ENABLE_WAYLAND_SUPPORT - "ignore-wayland", !greeter_would_have_been_wayland, -#endif NULL); g_debug ("GdmManager: Starting automatic login conversation"); @@ -1362,13 +1356,8 @@ set_up_greeter_session (GdmManager *manager, GdmDisplay *display) { - GdmSession *session; const char *allowed_user; struct passwd *passwd_entry; -#ifdef ENABLE_WAYLAND_SUPPORT - char *display_session_type = NULL; - gboolean greeter_is_wayland; -#endif allowed_user = get_username_for_greeter_display (manager, display); @@ -1380,20 +1369,7 @@ return; } - session = create_embryonic_user_session_for_display (manager, display, passwd_entry->pw_uid); - -#ifdef ENABLE_WAYLAND_SUPPORT - /* If the greeter display isn't a wayland session, - * then don't allow the user session to be a wayland - * session either. - */ - g_object_get (G_OBJECT (display), - "session-type", &display_session_type, - NULL); - greeter_is_wayland = g_strcmp0 (display_session_type, "wayland") == 0; - g_object_set (G_OBJECT (session), "ignore-wayland", !greeter_is_wayland, NULL); -#endif - + create_embryonic_user_session_for_display (manager, display, passwd_entry->pw_uid); gdm_display_start_greeter_session (display); } @@ -1759,6 +1735,15 @@ } static void +on_session_start_failed (GdmSession *session, + const char *service_name, + GdmManager *manager) +{ + g_debug ("GdmManager: session failed to start"); + remove_user_session (manager, session); +} + +static void on_user_session_exited (GdmSession *session, int code, GdmManager *manager) @@ -2060,6 +2045,10 @@ char *display_auth_file = NULL; char *display_seat_id = NULL; char *display_id = NULL; +#ifdef ENABLE_WAYLAND_SUPPORT + char *display_session_type = NULL; + gboolean greeter_is_wayland; +#endif g_object_get (G_OBJECT (display), "id", &display_id, @@ -2068,6 +2057,9 @@ "remote-hostname", &remote_hostname, "x11-authority-file", &display_auth_file, "seat-id", &display_seat_id, +#ifdef ENABLE_WAYLAND_SUPPORT + "session-type", &display_session_type, +#endif NULL); display_device = get_display_device (manager, display); @@ -2130,6 +2122,10 @@ G_CALLBACK (on_user_session_started), manager); g_signal_connect (session, + "session-start-failed", + G_CALLBACK (on_session_start_failed), + manager); + g_signal_connect (session, "session-exited", G_CALLBACK (on_user_session_exited), manager); @@ -2143,6 +2139,12 @@ g_object_ref (session), (GDestroyNotify) clean_embryonic_user_session); + +#ifdef ENABLE_WAYLAND_SUPPORT + greeter_is_wayland = g_strcmp0 (display_session_type, "wayland") == 0; + g_object_set (G_OBJECT (session), "ignore-wayland", !greeter_is_wayland, NULL); +#endif + return session; } diff -Nru gdm3-3.22.1/daemon/gdm-manager-glue.c gdm3-3.22.3/daemon/gdm-manager-glue.c --- gdm3-3.22.1/daemon/gdm-manager-glue.c 2016-10-12 20:00:32.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-manager-glue.c 2017-02-27 22:45:47.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Generated by gdbus-codegen 2.49.6. DO NOT EDIT. + * Generated by gdbus-codegen 2.46.2. DO NOT EDIT. * * The license of this code is the same as for the source it was derived from. */ diff -Nru gdm3-3.22.1/daemon/gdm-manager-glue.h gdm3-3.22.3/daemon/gdm-manager-glue.h --- gdm3-3.22.1/daemon/gdm-manager-glue.h 2016-10-12 20:00:32.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-manager-glue.h 2017-02-27 22:45:47.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Generated by gdbus-codegen 2.49.6. DO NOT EDIT. + * Generated by gdbus-codegen 2.46.2. DO NOT EDIT. * * The license of this code is the same as for the source it was derived from. */ @@ -162,10 +162,6 @@ GType gdm_dbus_manager_proxy_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmDBusManagerProxy, g_object_unref) -#endif - void gdm_dbus_manager_proxy_new ( GDBusConnection *connection, GDBusProxyFlags flags, @@ -232,10 +228,6 @@ GType gdm_dbus_manager_skeleton_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmDBusManagerSkeleton, g_object_unref) -#endif - GdmDBusManager *gdm_dbus_manager_skeleton_new (void); diff -Nru gdm3-3.22.1/daemon/gdm-session.c gdm3-3.22.3/daemon/gdm-session.c --- gdm3-3.22.1/daemon/gdm-session.c 2016-09-21 21:27:21.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-session.c 2017-03-03 21:31:20.000000000 +0100 @@ -340,10 +340,9 @@ static const char ** get_system_session_dirs (GdmSession *self) { - static const char *search_dirs[] = { -#ifdef ENABLE_WAYLAND_SUPPORT - DATADIR "/wayland-sessions/", -#endif + static GArray *search_array = NULL; + + static const char *x_search_dirs[] = { "/etc/X11/sessions/", DMCONFDIR "/Sessions/", DATADIR "/gdm/BuiltInSessions/", @@ -351,13 +350,25 @@ NULL }; + static const char *wayland_search_dir = DATADIR "/wayland-sessions/"; + + if (search_array == NULL) { + search_array = g_array_new (TRUE, TRUE, sizeof (char *)); + + g_array_append_vals (search_array, x_search_dirs, G_N_ELEMENTS (x_search_dirs)); + #ifdef ENABLE_WAYLAND_SUPPORT - if (self->priv->ignore_wayland) { - return search_dirs + 1; - } + if (!self->priv->ignore_wayland) { +#ifdef ENABLE_USER_DISPLAY_SERVER + g_array_prepend_val (search_array, wayland_search_dir); +#else + g_array_append_val (search_array, wayland_search_dir); #endif + } +#endif + } - return search_dirs; + return (const char **) search_array->data; } static gboolean @@ -3102,6 +3113,7 @@ return GDM_SESSION_DISPLAY_MODE_REUSE_VT; } +#ifdef ENABLE_USER_DISPLAY_SERVER /* All other cases (wayland login screen, X login screen, * wayland user session, X user session) use the NEW_VT * display mode. That display mode means that GDM allocates @@ -3124,6 +3136,18 @@ * are paused when handed out. */ return GDM_SESSION_DISPLAY_MODE_NEW_VT; +#else + +#ifdef ENABLE_WAYLAND_SUPPORT + /* Wayland sessions are for now assumed to run in a + * mutter-launch-like environment, so we allocate + * a new VT for them. */ + if (g_strcmp0 (self->priv->session_type, "wayland") == 0) { + return GDM_SESSION_DISPLAY_MODE_NEW_VT; + } +#endif + return GDM_SESSION_DISPLAY_MODE_REUSE_VT; +#endif } void diff -Nru gdm3-3.22.1/daemon/gdm-session-worker.c gdm3-3.22.3/daemon/gdm-session-worker.c --- gdm3-3.22.1/daemon/gdm-session-worker.c 2016-09-21 21:27:21.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-session-worker.c 2017-03-03 21:32:37.000000000 +0100 @@ -1666,6 +1666,8 @@ worker->priv->service, status); + killpg (pid, SIGHUP); + worker->priv->child_pid = -1; worker->priv->child_watch_id = 0; run_script (worker, GDMCONFDIR "/PostSession"); @@ -1854,6 +1856,24 @@ jump_to_vt (worker, worker->priv->session_vt); } + if (!worker->priv->is_program_session && !run_script (worker, GDMCONFDIR "/PostLogin")) { + g_set_error (error, + GDM_SESSION_WORKER_ERROR, + GDM_SESSION_WORKER_ERROR_OPENING_SESSION, + "Failed to execute PostLogin script"); + error_code = PAM_ABORT; + goto out; + } + + if (!worker->priv->is_program_session && !run_script (worker, GDMCONFDIR "/PreSession")) { + g_set_error (error, + GDM_SESSION_WORKER_ERROR, + GDM_SESSION_WORKER_ERROR_OPENING_SESSION, + "Failed to execute PreSession script"); + error_code = PAM_ABORT; + goto out; + } + session_pid = fork (); if (session_pid < 0) { @@ -2102,6 +2122,41 @@ } static gboolean +set_xdg_vtnr_to_current_vt (GdmSessionWorker *worker) +{ + int fd; + char vt_string[256]; + struct vt_stat vt_state = { 0 }; + + fd = open ("/dev/tty0", O_RDWR | O_NOCTTY); + + if (fd < 0) { + g_debug ("GdmSessionWorker: couldn't open VT master: %m"); + return FALSE; + } + + if (ioctl (fd, VT_GETSTATE, &vt_state) < 0) { + g_debug ("GdmSessionWorker: couldn't get current VT: %m"); + goto fail; + } + + close (fd); + fd = -1; + + g_snprintf (vt_string, sizeof (vt_string), "%d", vt_state.v_active); + + gdm_session_worker_set_environment_variable (worker, + "XDG_VTNR", + vt_string); + + return TRUE; + +fail: + close (fd); + return FALSE; +} + +static gboolean set_up_for_current_vt (GdmSessionWorker *worker, GError **error) { @@ -2166,6 +2221,14 @@ g_free (pam_xauth); } #endif + + if (g_strcmp0 (worker->priv->display_seat_id, "seat0") == 0) { + g_debug ("GdmSessionWorker: setting XDG_VTNR to current vt"); + set_xdg_vtnr_to_current_vt (worker); + } else { + g_debug ("GdmSessionWorker: not setting XDG_VTNR since not seat0"); + } + return TRUE; out: return FALSE; @@ -2206,14 +2269,6 @@ flags |= PAM_SILENT; } - if (!run_script (worker, GDMCONFDIR "/PostLogin")) { - g_set_error (error, - GDM_SESSION_WORKER_ERROR, - GDM_SESSION_WORKER_ERROR_OPENING_SESSION, - "Failed to execute PostLogin script"); - return FALSE; - } - error_code = pam_open_session (worker->priv->pam_handle, flags); if (error_code != PAM_SUCCESS) { @@ -2229,14 +2284,6 @@ session_id = gdm_session_worker_get_environment_variable (worker, "XDG_SESSION_ID"); - /* FIXME: should we do something here? - * Note that error return status from PreSession script should - * be ignored in the case of a X-GDM-BypassXsession session, which can - * be checked by calling: - * gdm_session_bypasses_xsession (session) - */ - run_script (worker, GDMCONFDIR "/PreSession"); - if (session_id != NULL) { g_free (worker->priv->session_id); worker->priv->session_id = session_id; diff -Nru gdm3-3.22.1/daemon/gdm-wayland-session.c gdm3-3.22.3/daemon/gdm-wayland-session.c --- gdm3-3.22.1/daemon/gdm-wayland-session.c 2016-09-21 21:54:52.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-wayland-session.c 2017-03-01 21:58:01.000000000 +0100 @@ -301,7 +301,7 @@ for (i = 0; state->environment[i] != NULL; i++) { g_auto(GStrv) environment_entry = NULL; - if (state->environment[i] == '\0') { + if (state->environment[i][0] == '\0') { continue; } diff -Nru gdm3-3.22.1/daemon/gdm-xdmcp-display-factory.c gdm3-3.22.3/daemon/gdm-xdmcp-display-factory.c --- gdm3-3.22.1/daemon/gdm-xdmcp-display-factory.c 2016-09-21 21:27:21.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-xdmcp-display-factory.c 2017-03-01 21:58:01.000000000 +0100 @@ -210,7 +210,10 @@ static void gdm_xdmcp_display_factory_class_init (GdmXdmcpDisplayFactoryClass *klass); static void gdm_xdmcp_display_factory_init (GdmXdmcpDisplayFactory *manager); static void gdm_xdmcp_display_factory_finalize (GObject *object); - +static void gdm_xdmcp_send_alive (GdmXdmcpDisplayFactory *factory, + GdmAddress *address, + CARD16 dspnum, + CARD32 sessid); static gpointer xdmcp_display_factory_object = NULL; G_DEFINE_TYPE (GdmXdmcpDisplayFactory, gdm_xdmcp_display_factory, GDM_TYPE_DISPLAY_FACTORY) @@ -2065,6 +2068,9 @@ 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)); @@ -2081,6 +2087,13 @@ g_debug ("GdmXdmcpDisplayFactory: xdmcp display status changed: %d", status); switch (status) { case GDM_DISPLAY_FINISHED: + g_object_get (display, + "remote-address", &address, + "x11-display-number", &display_number, + "session-number", &session_number, + NULL); + gdm_xdmcp_send_alive (factory, address, display_number, session_number); + gdm_display_store_remove (store, display); break; case GDM_DISPLAY_FAILED: diff -Nru gdm3-3.22.1/daemon/gdm-x-session.c gdm3-3.22.3/daemon/gdm-x-session.c --- gdm3-3.22.1/daemon/gdm-x-session.c 2016-09-21 21:27:21.000000000 +0200 +++ gdm3-3.22.3/daemon/gdm-x-session.c 2017-03-02 22:33:50.000000000 +0100 @@ -619,7 +619,7 @@ for (i = 0; state->environment[i] != NULL; i++) { g_auto(GStrv) environment_entry = NULL; - if (state->environment[i] == '\0') { + if (state->environment[i][0] == '\0') { continue; } diff -Nru gdm3-3.22.1/debian/changelog gdm3-3.22.3/debian/changelog --- gdm3-3.22.1/debian/changelog 2017-01-29 12:07:50.000000000 +0100 +++ gdm3-3.22.3/debian/changelog 2017-05-09 23:51:57.000000000 +0200 @@ -1,3 +1,31 @@ +gdm3 (3.22.3-2) unstable; urgency=medium + + [ Laurent Bigonville ] + * d/p/stop-greeter-explicitly-when-finishing-display.patch: Properly stop + the greeter processes when restarting gdm, this fixes the respawn loop and + allow gdm to restart properly (Closes: #857995) + + [ Michael Biebl ] + * Setup pulseaudio to run as systemd user service for Debian-gdm. + Otherwise, if we start pulseaudio within the session, the idle-timeout of + pulseaudio will prevent the old session scope to be properly terminated + when the gdm service is restarted and the old logind session will remain + in state "closing". + + -- Michael Biebl <bi...@debian.org> Tue, 09 May 2017 23:51:57 +0200 + +gdm3 (3.22.3-1) unstable; urgency=medium + + * New upstream release. + * Refresh patches. + * Add Build-Depends on libxcb1-dev. Upstream switched from xlib to xcb for + the main gdm process to be more robust in cases where the display + connection has gone away. + * Use --with-pam-mod-dir configure switch to set the location of the pam + module directory instead of moving the .so file around manually. + + -- Michael Biebl <bi...@debian.org> Thu, 16 Mar 2017 21:46:47 +0100 + gdm3 (3.22.1-2) unstable; urgency=medium * Team upload. diff -Nru gdm3-3.22.1/debian/control gdm3-3.22.3/debian/control --- gdm3-3.22.1/debian/control 2017-01-29 12:07:50.000000000 +0100 +++ gdm3-3.22.3/debian/control 2017-05-09 23:51:57.000000000 +0200 @@ -21,6 +21,7 @@ gnome-settings-daemon-dev (>= 2.91.2), gnome-settings-daemon (>= 2.91.2), libnss3-dev (>= 3.11.1), + libxcb1-dev, libx11-dev, libxau-dev, libxt-dev, diff -Nru gdm3-3.22.1/debian/control.in gdm3-3.22.3/debian/control.in --- gdm3-3.22.1/debian/control.in 2016-10-16 22:56:47.000000000 +0200 +++ gdm3-3.22.3/debian/control.in 2017-03-16 20:23:49.000000000 +0100 @@ -17,6 +17,7 @@ gnome-settings-daemon-dev (>= 2.91.2), gnome-settings-daemon (>= 2.91.2), libnss3-dev (>= 3.11.1), + libxcb1-dev, libx11-dev, libxau-dev, libxt-dev, diff -Nru gdm3-3.22.1/debian/gdm3.install gdm3-3.22.3/debian/gdm3.install --- gdm3-3.22.1/debian/gdm3.install 2016-09-22 15:03:43.000000000 +0200 +++ gdm3-3.22.3/debian/gdm3.install 2017-03-16 20:44:52.000000000 +0100 @@ -1,5 +1,6 @@ etc/* -lib +lib/systemd/ +lib/*/security/*.so usr/bin/gdm-screenshot usr/lib/gdm3/gdm-* # gets renamed to gdm3 in binary-install diff -Nru gdm3-3.22.1/debian/gdm3.postinst gdm3-3.22.3/debian/gdm3.postinst --- gdm3-3.22.1/debian/gdm3.postinst 2016-10-16 23:03:42.000000000 +0200 +++ gdm3-3.22.3/debian/gdm3.postinst 2017-05-09 23:51:35.000000000 +0200 @@ -80,6 +80,14 @@ # debconf hangs if gdm3 gets started below without this db_stop || true +# Setup pulseaudio to run as user service +UNIT=/usr/lib/systemd/user/pulseaudio.socket +USERUNITDIR=/var/lib/gdm3/.config/systemd/user +if ! [ -L $USERUNITDIR/sockets.target.wants/pulseaudio.socket ]; then + mkdir -p $USERUNITDIR/sockets.target.wants + ln -sf $UNIT $USERUNITDIR/sockets.target.wants +fi + chown -R Debian-gdm:Debian-gdm /var/lib/gdm3 if [ -L /etc/pam.d/gdm-welcome ]; then diff -Nru gdm3-3.22.1/debian/patches/09_default_session.patch gdm3-3.22.3/debian/patches/09_default_session.patch --- gdm3-3.22.1/debian/patches/09_default_session.patch 2016-04-20 00:43:51.000000000 +0200 +++ gdm3-3.22.3/debian/patches/09_default_session.patch 2017-03-16 20:21:10.000000000 +0100 @@ -1,11 +1,11 @@ Description: Prefer "default.desktop", so that other desktop environments like XFCE can use gdm, too, without being forced to start GNOME. Ubuntu: https://launchpad.net/bugs/403291 Upstream: https://bugzilla.gnome.org/show_bug.cgi?id=594733 -Index: gdm-3.20.1/daemon/gdm-session.c +Index: b/daemon/gdm-session.c =================================================================== ---- gdm-3.20.1.orig/daemon/gdm-session.c 2016-04-20 00:34:53.144038467 +0200 -+++ gdm-3.20.1/daemon/gdm-session.c 2016-04-20 00:35:20.820367810 +0200 -@@ -523,7 +523,7 @@ +--- a/daemon/gdm-session.c ++++ b/daemon/gdm-session.c +@@ -534,7 +534,7 @@ } } diff -Nru gdm3-3.22.1/debian/patches/16_xserver_path.patch gdm3-3.22.3/debian/patches/16_xserver_path.patch --- gdm3-3.22.1/debian/patches/16_xserver_path.patch 2016-10-16 22:56:08.000000000 +0200 +++ gdm3-3.22.3/debian/patches/16_xserver_path.patch 2017-03-16 20:21:13.000000000 +0100 @@ -2,7 +2,7 @@ =================================================================== --- a/configure.ac +++ b/configure.ac -@@ -1196,7 +1196,10 @@ +@@ -1207,7 +1207,10 @@ # and /usr/X11 since they often symlink to each other, and configure # should use the more stable location (the real directory) if possible. # diff -Nru gdm3-3.22.1/debian/patches/Hack-D-Bus-messages-from-Debian-8-libgdm-to-work-wit.patch gdm3-3.22.3/debian/patches/Hack-D-Bus-messages-from-Debian-8-libgdm-to-work-wit.patch --- gdm3-3.22.1/debian/patches/Hack-D-Bus-messages-from-Debian-8-libgdm-to-work-wit.patch 2017-01-29 02:59:22.000000000 +0100 +++ gdm3-3.22.3/debian/patches/Hack-D-Bus-messages-from-Debian-8-libgdm-to-work-wit.patch 2017-03-16 20:21:38.000000000 +0100 @@ -14,11 +14,11 @@ daemon/gdm-session-worker.c | 81 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) -diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c -index 421ef028..6b14f003 100644 +Index: b/daemon/gdm-session-worker.c +=================================================================== --- a/daemon/gdm-session-worker.c +++ b/daemon/gdm-session-worker.c -@@ -3077,6 +3077,80 @@ gdm_session_worker_handle_start_reauthentication (GdmDBusWorker *object, +@@ -3122,6 +3122,80 @@ return TRUE; } @@ -99,7 +99,7 @@ static GObject * gdm_session_worker_constructor (GType type, guint n_construct_properties, -@@ -3104,6 +3178,13 @@ gdm_session_worker_constructor (GType type, +@@ -3149,6 +3223,13 @@ exit (1); } @@ -113,6 +113,3 @@ worker->priv->manager = GDM_DBUS_WORKER_MANAGER (gdm_dbus_worker_manager_proxy_new_sync (worker->priv->connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, /* dbus name */ --- -2.11.0 - diff -Nru gdm3-3.22.1/debian/patches/pam_gdm-allow-setting-pam-module-dir-at-configure-ti.patch gdm3-3.22.3/debian/patches/pam_gdm-allow-setting-pam-module-dir-at-configure-ti.patch --- gdm3-3.22.1/debian/patches/pam_gdm-allow-setting-pam-module-dir-at-configure-ti.patch 1970-01-01 01:00:00.000000000 +0100 +++ gdm3-3.22.3/debian/patches/pam_gdm-allow-setting-pam-module-dir-at-configure-ti.patch 2017-03-16 20:43:47.000000000 +0100 @@ -0,0 +1,63 @@ +From 5ed388af0ab4c62dc51efbb4cf3345d8fa634fca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?R=C3=A9mi=20Cardona?= <r...@gentoo.org> +Date: Mon, 21 Nov 2016 08:18:32 +0100 +Subject: [PATCH] pam_gdm: allow setting pam module dir at configure time + +Code taken almost verbatim from gnome-keyring. + +https://bugzilla.gnome.org/show_bug.cgi?id=774776 +(cherry picked from commit c6633b311f7ed8560a5c6847110d872d017672a6) +--- + configure.ac | 11 ++++++++++- + pam_gdm/Makefile.am | 2 +- + 2 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 6613097b..e09831ad 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -487,7 +487,7 @@ dnl --------------------------------------------------------------------------- + dnl - Check for PAM stuff + dnl --------------------------------------------------------------------------- + +-dnl PAM prefix ++dnl PAM prefix (configuration files) + withval="" + AC_ARG_WITH(pam-prefix, + AS_HELP_STRING([--with-pam-prefix=<prefix>], +@@ -503,6 +503,14 @@ else + fi + AC_SUBST(PAM_PREFIX) + ++dnl PAM dir (dynamic modules) ++AC_ARG_WITH([pam-mod-dir], ++ [AS_HELP_STRING([--with-pam-mod-dir=DIR], ++ [directory to install pam modules in])], ++ [], [with_pam_mod_dir='${libdir}/security']) ++PAM_MOD_DIR="$with_pam_mod_dir" ++AC_SUBST(PAM_MOD_DIR) ++ + have_pam=no + AC_CHECK_LIB(pam, pam_start, have_pam=yes) + +@@ -1592,6 +1600,7 @@ echo " + + dbus-1 system.d dir: ${DBUS_SYS_DIR} + PAM prefix: ${PAM_PREFIX} ++ PAM module dir: ${PAM_MOD_DIR} + PAM config: ${with_default_pam_config} + X server: ${X_SERVER} + " +diff --git a/pam_gdm/Makefile.am b/pam_gdm/Makefile.am +index 61d672b4..6b92cfcf 100644 +--- a/pam_gdm/Makefile.am ++++ b/pam_gdm/Makefile.am +@@ -36,4 +36,4 @@ pam_gdm_LTLIBRARIES = \ + pam_gdm.la \ + $(END_OF_LIST) + +-pam_gdmdir = $(libdir)/security ++pam_gdmdir = $(PAM_MOD_DIR) +-- +2.11.0 + diff -Nru gdm3-3.22.1/debian/patches/series gdm3-3.22.3/debian/patches/series --- gdm3-3.22.1/debian/patches/series 2017-01-29 02:59:22.000000000 +0100 +++ gdm3-3.22.3/debian/patches/series 2017-05-09 23:27:40.000000000 +0200 @@ -5,3 +5,5 @@ 92_systemd_unit.patch 94_retain_xorg_log.patch Hack-D-Bus-messages-from-Debian-8-libgdm-to-work-wit.patch +pam_gdm-allow-setting-pam-module-dir-at-configure-ti.patch +stop-greeter-explicitly-when-finishing-display.patch diff -Nru gdm3-3.22.1/debian/patches/stop-greeter-explicitly-when-finishing-display.patch gdm3-3.22.3/debian/patches/stop-greeter-explicitly-when-finishing-display.patch --- gdm3-3.22.1/debian/patches/stop-greeter-explicitly-when-finishing-display.patch 1970-01-01 01:00:00.000000000 +0100 +++ gdm3-3.22.3/debian/patches/stop-greeter-explicitly-when-finishing-display.patch 2017-05-09 23:27:10.000000000 +0200 @@ -0,0 +1,31 @@ +From 81f61eb4966e4652382ebee32f1830cfb4ca9126 Mon Sep 17 00:00:00 2001 +From: Ray Strode <rstr...@redhat.com> +Date: Mon, 8 May 2017 12:40:00 -0400 +Subject: manager: stop greeter explicitly when finishing display + +If GDM shuts down while the login screen is active, we fail to +kill off the login screen session. + +This commit fixes that, by explicitly stopping the greeter session +on the display (if there is one) + +https://bugzilla.gnome.org/show_bug.cgi?id=780213 +--- + daemon/gdm-manager.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index 994886f..d080b30 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -2736,6 +2736,7 @@ finish_display (const char *id, + GdmDisplay *display, + GdmManager *manager) + { ++ gdm_display_stop_greeter_session (display); + if (gdm_display_get_status (display) == GDM_DISPLAY_MANAGED) + gdm_display_unmanage (display); + gdm_display_finish (display); +-- +cgit v0.12 + diff -Nru gdm3-3.22.1/debian/rules gdm3-3.22.3/debian/rules --- gdm3-3.22.1/debian/rules 2016-10-17 01:11:11.000000000 +0200 +++ gdm3-3.22.3/debian/rules 2017-03-16 20:45:12.000000000 +0100 @@ -61,6 +61,7 @@ --with-xauth-dir=/var/run/gdm3 \ --with-pid-file=/var/run/gdm3.pid \ --with-log-dir=/var/log/gdm3 \ + --with-pam-mod-dir=/lib/$(DEB_HOST_MULTIARCH)/security \ --with-screenshot-dir=/var/run/gdm3/greeter \ --with-defaults-conf=/usr/share/gdm/defaults.conf \ --with-user=Debian-gdm --with-group=Debian-gdm \ @@ -86,8 +87,6 @@ rm -rf debian/gdm3/var/run rm -rf debian/gdm3/usr/include rm -rf debian/gdm3/usr/lib/pkgconfig - mkdir -p debian/gdm3/lib/$(DEB_HOST_MULTIARCH)/security/ - mv debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/security/pam_gdm.so debian/gdm3/lib/$(DEB_HOST_MULTIARCH)/security/ override_dh_installinit: dh_installinit --noscripts diff -Nru gdm3-3.22.1/libgdm/gdm-client-glue.h gdm3-3.22.3/libgdm/gdm-client-glue.h --- gdm3-3.22.1/libgdm/gdm-client-glue.h 2016-10-12 20:00:32.000000000 +0200 +++ gdm3-3.22.3/libgdm/gdm-client-glue.h 2017-02-27 22:45:58.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Generated by gdbus-codegen 2.49.6. DO NOT EDIT. + * Generated by gdbus-codegen 2.46.2. DO NOT EDIT. * * The license of this code is the same as for the source it was derived from. */ @@ -219,10 +219,6 @@ GType gdm_worker_manager_proxy_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmWorkerManagerProxy, g_object_unref) -#endif - void gdm_worker_manager_proxy_new ( GDBusConnection *connection, GDBusProxyFlags flags, @@ -289,10 +285,6 @@ GType gdm_worker_manager_skeleton_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmWorkerManagerSkeleton, g_object_unref) -#endif - GdmWorkerManager *gdm_worker_manager_skeleton_new (void); @@ -564,10 +556,6 @@ GType gdm_user_verifier_proxy_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmUserVerifierProxy, g_object_unref) -#endif - void gdm_user_verifier_proxy_new ( GDBusConnection *connection, GDBusProxyFlags flags, @@ -634,10 +622,6 @@ GType gdm_user_verifier_skeleton_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmUserVerifierSkeleton, g_object_unref) -#endif - GdmUserVerifier *gdm_user_verifier_skeleton_new (void); @@ -896,10 +880,6 @@ GType gdm_greeter_proxy_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmGreeterProxy, g_object_unref) -#endif - void gdm_greeter_proxy_new ( GDBusConnection *connection, GDBusProxyFlags flags, @@ -966,10 +946,6 @@ GType gdm_greeter_skeleton_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmGreeterSkeleton, g_object_unref) -#endif - GdmGreeter *gdm_greeter_skeleton_new (void); @@ -1054,10 +1030,6 @@ GType gdm_remote_greeter_proxy_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmRemoteGreeterProxy, g_object_unref) -#endif - void gdm_remote_greeter_proxy_new ( GDBusConnection *connection, GDBusProxyFlags flags, @@ -1124,10 +1096,6 @@ GType gdm_remote_greeter_skeleton_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmRemoteGreeterSkeleton, g_object_unref) -#endif - GdmRemoteGreeter *gdm_remote_greeter_skeleton_new (void); @@ -1239,10 +1207,6 @@ GType gdm_chooser_proxy_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmChooserProxy, g_object_unref) -#endif - void gdm_chooser_proxy_new ( GDBusConnection *connection, GDBusProxyFlags flags, @@ -1309,10 +1273,6 @@ GType gdm_chooser_skeleton_get_type (void) G_GNUC_CONST; -#if GLIB_CHECK_VERSION(2, 44, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GdmChooserSkeleton, g_object_unref) -#endif - GdmChooser *gdm_chooser_skeleton_new (void); diff -Nru gdm3-3.22.1/libgdm/gdm.pc gdm3-3.22.3/libgdm/gdm.pc --- gdm3-3.22.1/libgdm/gdm.pc 2016-10-12 20:04:12.000000000 +0200 +++ gdm3-3.22.3/libgdm/gdm.pc 2017-03-06 18:10:31.000000000 +0100 @@ -5,6 +5,6 @@ Name: GDM Client Library Description: Client Library for communicating with GDM daemon -Version: 3.22.1 +Version: 3.22.3 Libs: -L${libdir} -lgdm Cflags: -I${includedir}/gdm diff -Nru gdm3-3.22.1/NEWS gdm3-3.22.3/NEWS --- gdm3-3.22.1/NEWS 2016-10-12 19:58:19.000000000 +0200 +++ gdm3-3.22.3/NEWS 2017-03-06 18:08:14.000000000 +0100 @@ -1,4 +1,21 @@ ============== +Version 3.22.3 +============== +- Fix regression in wayland fallback code +- Fix for headless sessions +- Change around how PostLogin/PostSession scripts are run +- Fix XDMCP in network environments with poor network resolution +- Don't try to user switch with XDMCP + +============== +Version 3.22.2 +============== +- Fix book keeping of display name in some cases +- wayland fix +- xdmcp logout fix +- add knob to go back to running Xorg as root + +============== Version 3.22.1 ============== - Fix wayland login after Xorg logout for a user
signature.asc
Description: OpenPGP digital signature