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", &current_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", &current_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

Reply via email to