Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package geoclue2 for openSUSE:Factory checked in at 2026-04-16 18:45:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/geoclue2 (Old) and /work/SRC/openSUSE:Factory/.geoclue2.new.11940 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "geoclue2" Thu Apr 16 18:45:20 2026 rev:52 rq:1347136 version:2.8.1 Changes: -------- --- /work/SRC/openSUSE:Factory/geoclue2/geoclue2.changes 2025-10-03 15:43:16.864178043 +0200 +++ /work/SRC/openSUSE:Factory/.geoclue2.new.11940/geoclue2.changes 2026-04-16 18:46:28.092127887 +0200 @@ -1,0 +2,13 @@ +Sun Apr 12 10:56:51 UTC 2026 - Martin Hauke <[email protected]> + +- Update to version 2.8.1 + * Accept NMEA GGA sentences with 11 or more parts (needed 14 or + more previously). + * Use async D-bus 'Set' methods to set client properties in + libgeoclue to improve robustness. + * Do not change Client Location property on updates which are + below threshold to avoid leaking location to D-bus. + * Ignore wired WPA interfaces when finding an interface for WiFi + scanning. + +------------------------------------------------------------------- Old: ---- geoclue-2.8.0.tar.bz2 New: ---- geoclue-2.8.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ geoclue2.spec ++++++ --- /var/tmp/diff_new_pack.dMhNeR/_old 2026-04-16 18:46:28.704152843 +0200 +++ /var/tmp/diff_new_pack.dMhNeR/_new 2026-04-16 18:46:28.704152843 +0200 @@ -1,7 +1,7 @@ # # spec file for package geoclue2 # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %define _name geoclue Name: geoclue2 -Version: 2.8.0 +Version: 2.8.1 Release: 0 Summary: GeoLocation Framework License: GPL-2.0-or-later ++++++ geoclue-2.8.0.tar.bz2 -> geoclue-2.8.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoclue-2.8.0/NEWS new/geoclue-2.8.1/NEWS --- old/geoclue-2.8.0/NEWS 2025-08-30 16:33:34.000000000 +0200 +++ new/geoclue-2.8.1/NEWS 2026-04-09 11:20:48.000000000 +0200 @@ -1,3 +1,17 @@ +2.8.1 +===== + +Fixes: +- Accept NMEA GGA sentences with 11 or more parts (needed 14 or more previously) +- Use async D-bus 'Set' methods to set client properties in libgeoclue to improve robustness +- Do not change Client Location property on updates which are below threshold to avoid leaking location to D-bus +- Ignore wired WPA interfaces when finding an interface for WiFi scanning + +Contributors: +- Thorben T +- Teemu Ikonen +- Markus Teich + 2.8.0 ===== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoclue-2.8.0/interface/fi.w1.wpa_supplicant1.xml new/geoclue-2.8.1/interface/fi.w1.wpa_supplicant1.xml --- old/geoclue-2.8.0/interface/fi.w1.wpa_supplicant1.xml 2025-08-30 16:33:34.000000000 +0200 +++ new/geoclue-2.8.1/interface/fi.w1.wpa_supplicant1.xml 2026-04-09 11:20:48.000000000 +0200 @@ -28,6 +28,7 @@ </signal> <property access="read" name="State" type="s"/> <property access="read" name="Ifname" type="s"/> + <property access="read" name="Driver" type="s"/> <property access="read" name="BSSs" type="ao"/> </interface> <interface name="fi.w1.wpa_supplicant1.BSS"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoclue-2.8.0/libgeoclue/gclue-helpers.c new/geoclue-2.8.1/libgeoclue/gclue-helpers.c --- old/geoclue-2.8.0/libgeoclue/gclue-helpers.c 2025-08-30 16:33:34.000000000 +0200 +++ new/geoclue-2.8.1/libgeoclue/gclue-helpers.c 2026-04-09 11:20:48.000000000 +0200 @@ -118,28 +118,75 @@ } static void +on_req_accuracy_level_set (GObject *source_object, + GAsyncResult* res, + gpointer user_data) +{ + g_autoptr(GVariant) retval = NULL; + g_autoptr(GError) error = NULL; + g_autoptr(GDBusProxy) client = G_DBUS_PROXY (source_object); + g_autoptr(GTask) task = G_TASK (user_data); + + retval = g_dbus_proxy_call_finish (client, res, &error); // NOLINT (unread variable warning) + if (error != NULL) { + g_task_return_error (task, g_steal_pointer (&error)); + return; + } + + g_task_return_pointer (task, g_steal_pointer (&client), g_object_unref); +} + +static void +on_desktop_id_set (GObject *source_object, + GAsyncResult* res, + gpointer user_data) +{ + g_autoptr(GError) error = NULL; + g_autoptr(GVariant) retval = NULL; + g_autoptr(GVariant) params = NULL; + g_autoptr(GDBusProxy) client = G_DBUS_PROXY (source_object); + g_autoptr(GTask) task = G_TASK (user_data); + ClientCreateData *data = g_task_get_task_data (task); + + retval = g_dbus_proxy_call_finish (client, res, &error); // NOLINT (unread variable warning) + if (error != NULL) { + g_task_return_error (task, g_steal_pointer (&error)); + return; + } + + params = g_variant_new ("(ssv)", + "org.freedesktop.GeoClue2.Client", + "RequestedAccuracyLevel", + g_variant_new_uint32 (data->accuracy_level)); + g_dbus_proxy_call (g_steal_pointer (&client), + "org.freedesktop.DBus.Properties.Set", + params, + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + on_req_accuracy_level_set, + g_steal_pointer (&task)); +} + +static void on_client_proxy_ready (GObject *source_object, GAsyncResult *res, gpointer user_data) { - GTask *task = G_TASK (user_data); ClientCreateData *data; ClientDestroyData *destroy; - GClueClient *client; - GError *error = NULL; + g_autoptr(GClueClient) client = NULL; + g_autoptr(GError) error = NULL; + g_autoptr(GVariant) params = NULL; + g_autoptr(GTask) task = G_TASK (user_data); client = gclue_client_proxy_new_for_bus_finish (res, &error); if (error != NULL) { - g_task_return_error (task, error); - g_object_unref (task); - + g_task_return_error (task, g_steal_pointer (&error)); return; } data = g_task_get_task_data (task); - gclue_client_set_desktop_id (client, data->desktop_id); - gclue_client_set_requested_accuracy_level (client, data->accuracy_level); - if (data->flags & GCLUE_CLIENT_PROXY_CREATE_AUTO_DELETE) { destroy = client_destroy_data_new ( data->manager, @@ -150,8 +197,18 @@ destroy); } - g_task_return_pointer (task, client, g_object_unref); - g_object_unref (task); + params = g_variant_new ("(ssv)", + "org.freedesktop.GeoClue2.Client", + "DesktopId", + g_variant_new_string (data->desktop_id)); + g_dbus_proxy_call (G_DBUS_PROXY (g_steal_pointer (&client)), + "org.freedesktop.DBus.Properties.Set", + params, + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + on_desktop_id_set, + g_steal_pointer (&task)); } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoclue-2.8.0/meson.build new/geoclue-2.8.1/meson.build --- old/geoclue-2.8.0/meson.build 2025-08-30 16:33:34.000000000 +0200 +++ new/geoclue-2.8.1/meson.build 2026-04-09 11:20:48.000000000 +0200 @@ -1,4 +1,4 @@ -project('geoclue', 'c', version: '2.8.0', meson_version : '>= 0.60.0') +project('geoclue', 'c', version: '2.8.1', meson_version : '>= 0.60.0') gclue_version = meson.project_version() ver_arr = gclue_version.split('.') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoclue-2.8.0/src/gclue-location.c new/geoclue-2.8.1/src/gclue-location.c --- old/geoclue-2.8.0/src/gclue-location.c 2025-08-30 16:33:34.000000000 +0200 +++ new/geoclue-2.8.1/src/gclue-location.c 2026-04-09 11:20:48.000000000 +0200 @@ -626,8 +626,8 @@ g_auto(GStrv) parts = NULL; parts = g_strsplit (gga, ",", -1); - if (g_strv_length (parts) < 14) { - g_warning ("Invalid NMEA GGA sentence."); + if (g_strv_length (parts) < 11) { + g_warning ("Received short NMEA GGA sentence, discarding."); return NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoclue-2.8.0/src/gclue-service-client.c new/geoclue-2.8.1/src/gclue-service-client.c --- old/geoclue-2.8.0/src/gclue-service-client.c 2025-08-30 16:33:34.000000000 +0200 +++ new/geoclue-2.8.1/src/gclue-service-client.c 2026-04-09 11:20:48.000000000 +0200 @@ -49,7 +49,6 @@ GClueServiceLocation *location; GClueServiceLocation *prev_location; - GClueLocation *signaled_location; guint distance_threshold; guint time_threshold; @@ -127,14 +126,16 @@ GClueServiceClientPrivate *priv = client->priv; gdouble distance; gdouble threshold; + g_autoptr(GClueLocation) current_location = NULL; if (priv->distance_threshold == 0) return FALSE; - if (!priv->signaled_location) + if (!priv->location) return FALSE; - distance = gclue_location_get_distance_from (priv->signaled_location, + g_object_get (priv->location, "location", ¤t_location, NULL); + distance = gclue_location_get_distance_from (current_location, location); threshold = priv->distance_threshold; if (distance < threshold) { @@ -154,14 +155,16 @@ GClueServiceClientPrivate *priv = client->priv; gint64 cur_ts, new_ts; guint64 diff_ts; + g_autoptr(GClueLocation) current_location = NULL; if (priv->time_threshold == 0) return FALSE; - if (!priv->signaled_location) + if (!priv->location) return FALSE; - cur_ts = gclue_location_get_timestamp (priv->signaled_location); + g_object_get (priv->location, "location", ¤t_location, NULL); + cur_ts = gclue_location_get_timestamp (current_location); new_ts = gclue_location_get_timestamp (location); diff_ts = ABS (new_ts - cur_ts); @@ -201,6 +204,7 @@ GClueServiceClientPrivate *priv = client->priv; GClueLocationSource *locator = GCLUE_LOCATION_SOURCE (gobject); GClueLocation *new_location; + GClueServiceLocation *new_service_location; g_autofree char *path = NULL; const char *prev_path; g_autoptr(GError) error = NULL; @@ -210,27 +214,26 @@ return; /* No location found yet */ if (priv->location != NULL && below_threshold (client, new_location)) { - g_debug ("Updating location, below threshold"); - g_object_set (priv->location, - "location", new_location, - NULL); + g_debug ("New location is below threshold, not updating"); return; } + path = next_location_path (client); + new_service_location = gclue_service_location_new (priv->client_info, + path, + priv->connection, + new_location, + &error); + if (new_service_location == NULL) + goto error_out; + if (priv->prev_location != NULL) // Lets try to ensure that apps are not still accessing the // last location before unrefing (and therefore destroying) it. g_timeout_add_seconds (5, on_prev_location_timeout, priv->prev_location); - priv->prev_location = priv->location; - path = next_location_path (client); - priv->location = gclue_service_location_new (priv->client_info, - path, - priv->connection, - new_location, - &error); - if (priv->location == NULL) - goto error_out; + priv->prev_location = priv->location; + priv->location = new_service_location; if (priv->prev_location != NULL) prev_path = gclue_service_location_get_path (priv->prev_location); @@ -239,9 +242,6 @@ gclue_dbus_client_set_location (GCLUE_DBUS_CLIENT (client), path); - g_clear_object (&priv->signaled_location); - priv->signaled_location = g_object_ref (new_location); - if (!emit_location_updated (client, prev_path, path, &error)) goto error_out; @@ -650,7 +650,6 @@ g_clear_object (&priv->locator); g_clear_object (&priv->location); g_clear_object (&priv->prev_location); - g_clear_object (&priv->signaled_location); g_clear_object (&priv->client_info); /* Chain up to the parent class */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoclue-2.8.0/src/gclue-wifi.c new/geoclue-2.8.1/src/gclue-wifi.c --- old/geoclue-2.8.0/src/gclue-wifi.c 2025-08-30 16:33:34.000000000 +0200 +++ new/geoclue-2.8.1/src/gclue-wifi.c 2026-04-09 11:20:48.000000000 +0200 @@ -903,8 +903,9 @@ gpointer user_data) { GClueWifi *wifi; - WPAInterface *interface; + g_autoptr(WPAInterface) interface = NULL; g_autoptr(GError) error = NULL; + const gchar *driver; interface = wpa_interface_proxy_new_for_bus_finish (res, &error); if (interface == NULL) { @@ -920,21 +921,25 @@ return; } + driver = wpa_interface_get_driver (interface); + if (g_strcmp0 (driver, "wired") == 0) { + g_info ("Skipping wired interface '%s'", wpa_interface_get_ifname (interface)); + return; + } + wifi = GCLUE_WIFI (user_data); if (wifi->priv->interface != NULL) { - g_object_unref (interface); return; } - wifi->priv->interface = interface; + wifi->priv->interface = g_steal_pointer (&interface); g_debug ("WiFi device '%s' added.", - wpa_interface_get_ifname (interface)); + wpa_interface_get_ifname (wifi->priv->interface)); if (gclue_location_source_get_active (GCLUE_LOCATION_SOURCE (wifi))) connect_bss_signals (wifi); else gclue_web_source_refresh_available_accuracy_level (GCLUE_WEB_SOURCE (wifi)); - } static void @@ -1019,6 +1024,7 @@ static void gclue_wifi_constructed (GObject *object) { + guint i; GClueWifi *wifi = GCLUE_WIFI (object); GClueWifiPrivate *priv = wifi->priv; const gchar *const *interfaces; @@ -1051,11 +1057,18 @@ wifi, 0); interfaces = wpa_supplicant_get_interfaces (priv->supplicant); - if (interfaces != NULL && interfaces[0] != NULL) + if (interfaces == NULL) + return; + + /* Dispatch proxy creation for all initial interfaces. The asyncs + * callback `on_interface_proxy_ready` will filter out wired ones and + * keep only the first valid WiFi interface. */ + for (i = 0; interfaces[i] != NULL; i++) { on_interface_added (priv->supplicant, - interfaces[0], + interfaces[i], NULL, wifi); + } } static void
