commit:     5bfcfc6b649b7919173ea465aa1b8576f812e36c
Author:     Pacho Ramos <pacho <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 30 17:28:41 2018 +0000
Commit:     Pacho Ramos <pacho <AT> gentoo <DOT> org>
CommitDate: Mon Apr 30 17:29:38 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5bfcfc6b

gnome-extra/nm-applet: Enable gcr USE by default and fix crashes

- Enable gcr by default (#642730)
- Fix VPN crashes with openconnect (#654412)
- Fix crashes when editing certs
  (https://bugzilla.gnome.org/show_bug.cgi?id=785674)

Package-Manager: Portage-2.3.31, Repoman-2.3.9

 .../files/nm-applet-1.8.10-cert-chooser.patch      |  38 ++++++
 .../files/nm-applet-1.8.10-vpn-crash.patch         | 137 +++++++++++++++++++++
 gnome-extra/nm-applet/nm-applet-1.8.10-r1.ebuild   |  72 +++++++++++
 3 files changed, 247 insertions(+)

diff --git a/gnome-extra/nm-applet/files/nm-applet-1.8.10-cert-chooser.patch 
b/gnome-extra/nm-applet/files/nm-applet-1.8.10-cert-chooser.patch
new file mode 100644
index 00000000000..9aad2396953
--- /dev/null
+++ b/gnome-extra/nm-applet/files/nm-applet-1.8.10-cert-chooser.patch
@@ -0,0 +1,38 @@
+From 4d2523b482ab78134dafc02c9b99bd15f1a9174a Mon Sep 17 00:00:00 2001
+From: Ben Wiederhake <benwiederhake.git...@gmx.de>
+Date: Sun, 14 Jan 2018 23:28:15 +0100
+Subject: [PATCH 1/1] libnma/cert-chooser: handle case of no avalable modules
+
+Cause: Apparently it's perfectly okay if the list of modules is empty
+(e.g., NULL).  However, the code assume that this indicates an error,
+tries to print the NULL error, and crashes.
+
+[lkund...@v3.sk: cosmetic changes]
+
+https://bugzilla.gnome.org/show_bug.cgi?id=785674
+(cherry picked from commit a37483c1a364ef3cc1cfa29e7ad51ca108d75674)
+---
+ src/libnma/nma-cert-chooser-button.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/libnma/nma-cert-chooser-button.c 
b/src/libnma/nma-cert-chooser-button.c
+index c7089390..00651765 100644
+--- a/src/libnma/nma-cert-chooser-button.c
++++ b/src/libnma/nma-cert-chooser-button.c
+@@ -93,10 +93,10 @@ modules_initialized (GObject *object, GAsyncResult *res, 
gpointer user_data)
+       gchar *label;
+ 
+       modules = gck_modules_initialize_registered_finish (res, &error);
+-      if (!modules) {
++      if (error) {
+               /* The Front Fell Off. */
+-              g_critical ("Error getting registered modules: %s", 
error->message);
+-              g_error_free (error);
++              g_warning ("Error getting registered modules: %s", 
error->message);
++              g_clear_error (&error);
+       }
+ 
+       model = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (self)));
+-- 
+2.14.3
+

diff --git a/gnome-extra/nm-applet/files/nm-applet-1.8.10-vpn-crash.patch 
b/gnome-extra/nm-applet/files/nm-applet-1.8.10-vpn-crash.patch
new file mode 100644
index 00000000000..8f217af2dac
--- /dev/null
+++ b/gnome-extra/nm-applet/files/nm-applet-1.8.10-vpn-crash.patch
@@ -0,0 +1,137 @@
+From 46f99b295e59f44dfde50ec90e7c09627d32431e Mon Sep 17 00:00:00 2001
+From: "Jan Alexander Steffens (heftig)" <jan.steff...@gmail.com>
+Date: Wed, 20 Dec 2017 13:23:12 +0100
+Subject: [PATCH 1/2] shared/compat: fix memory handling of
+ nm_setting_vpn_get_*_keys
+
+The compat implementations return a (transfer none) strv instead of a
+(transfer container) one. This has caused double frees in nm-applet:
+https://bugs.archlinux.org/task/56772
+
+Don't copy the keys and don't free the container later.
+
+[thal...@redhat.com: patch adjusted to avoid compiler warning]
+
+Patch imported from NetworkManager commit 
8ac8c01162235c2c198bfaf25fb7d1a57a595ce5.
+
+Fixes: e93ca7fc129ec0f29f5313a3aa12839914df8fa2
+(cherry picked from commit 0c90e08f77b71d2bda699cf032fceec0122bbf82)
+---
+ shared/nm-utils/nm-compat.c | 10 +---------
+ 1 file changed, 1 insertion(+), 9 deletions(-)
+
+diff --git a/shared/nm-utils/nm-compat.c b/shared/nm-utils/nm-compat.c
+index 22ab675d..47035e62 100644
+--- a/shared/nm-utils/nm-compat.c
++++ b/shared/nm-utils/nm-compat.c
+@@ -30,7 +30,7 @@ _get_keys_cb (const char *key, const char *val, gpointer 
user_data)
+ {
+       GPtrArray *a = user_data;
+ 
+-      g_ptr_array_add (a, g_strdup (key));
++      g_ptr_array_add (a, (gpointer) key);
+ }
+ 
+ static const char **
+@@ -55,14 +55,6 @@ _get_keys (NMSettingVpn *setting,
+               g_ptr_array_sort (a, nm_strcmp_p);
+               g_ptr_array_add (a, NULL);
+               keys = (const char **) g_ptr_array_free (g_steal_pointer (&a), 
FALSE);
+-
+-              /* we need to cache the keys *somewhere*. */
+-              g_object_set_qdata_full (G_OBJECT (setting),
+-                                       is_secrets
+-                                       ? NM_CACHED_QUARK 
("libnm._nm_setting_vpn_get_secret_keys")
+-                                       : NM_CACHED_QUARK 
("libnm._nm_setting_vpn_get_data_keys"),
+-                                       keys,
+-                                       (GDestroyNotify) g_strfreev);
+       }
+ 
+       NM_SET_OUT (out_length, len);
+-- 
+2.14.3
+
+
+From 0d13a8b4064c83146714ecee86b69042aca35f9e Mon Sep 17 00:00:00 2001
+From: "Jan Alexander Steffens (heftig)" <jan.steff...@gmail.com>
+Date: Thu, 21 Dec 2017 20:36:48 +0100
+Subject: [PATCH 2/2] shared/compat: fix memory handling of
+ nm_setting_vpn_get_*_keys()
+
+The previous fix was bad because the keys do not come from NMSettingVpn's hash
+table but are copies that are freed by nm_setting_vpn_foreach_* before
+it returns.
+
+[thal...@redhat.com: import shared code from NetworkManager, merging
+three patches together.]
+
+Fixes: e93ca7fc129ec0f29f5313a3aa12839914df8fa2
+Fixes: 0c90e08f77b71d2bda699cf032fceec0122bbf82
+
+https://mail.gnome.org/archives/networkmanager-list/2017-December/msg00069.html
+https://mail.gnome.org/archives/networkmanager-list/2017-December/msg00070.html
+(cherry picked from commit a52ccb2fe170558fc0aab4dd1d15ba8808b10951)
+---
+ shared/nm-utils/nm-compat.c | 29 ++++++++++++++++++++++-------
+ 1 file changed, 22 insertions(+), 7 deletions(-)
+
+diff --git a/shared/nm-utils/nm-compat.c b/shared/nm-utils/nm-compat.c
+index 47035e62..90328c06 100644
+--- a/shared/nm-utils/nm-compat.c
++++ b/shared/nm-utils/nm-compat.c
+@@ -30,7 +30,7 @@ _get_keys_cb (const char *key, const char *val, gpointer 
user_data)
+ {
+       GPtrArray *a = user_data;
+ 
+-      g_ptr_array_add (a, (gpointer) key);
++      g_ptr_array_add (a, g_strdup (key));
+ }
+ 
+ static const char **
+@@ -40,22 +40,37 @@ _get_keys (NMSettingVpn *setting,
+ {
+       guint len;
+       const char **keys = NULL;
+-      gs_unref_ptrarray GPtrArray *a = NULL;
++      GPtrArray *a;
+ 
+       nm_assert (NM_IS_SETTING_VPN (setting));
+ 
+-      a = g_ptr_array_new ();
++      if (is_secrets)
++              len = nm_setting_vpn_get_num_secrets (setting);
++      else
++              len = nm_setting_vpn_get_num_data_items (setting);
++
++      a = g_ptr_array_sized_new (len + 1);
++
+       if (is_secrets)
+               nm_setting_vpn_foreach_secret (setting, _get_keys_cb, a);
+       else
+               nm_setting_vpn_foreach_data_item (setting, _get_keys_cb, a);
+-      len = a->len;
+ 
+-      if (a->len) {
++      len = a->len;
++      if (len) {
+               g_ptr_array_sort (a, nm_strcmp_p);
+               g_ptr_array_add (a, NULL);
+-              keys = (const char **) g_ptr_array_free (g_steal_pointer (&a), 
FALSE);
+-      }
++              keys = g_memdup (a->pdata, a->len * sizeof (gpointer));
++
++              /* we need to cache the keys *somewhere*. */
++              g_object_set_qdata_full (G_OBJECT (setting),
++                                       is_secrets
++                                       ? NM_CACHED_QUARK 
("libnm._nm_setting_vpn_get_secret_keys")
++                                       : NM_CACHED_QUARK 
("libnm._nm_setting_vpn_get_data_keys"),
++                                       g_ptr_array_free (a, FALSE),
++                                       (GDestroyNotify) g_strfreev);
++      } else
++              g_ptr_array_free (a, TRUE);
+ 
+       NM_SET_OUT (out_length, len);
+       return keys;
+-- 
+2.14.3
+

diff --git a/gnome-extra/nm-applet/nm-applet-1.8.10-r1.ebuild 
b/gnome-extra/nm-applet/nm-applet-1.8.10-r1.ebuild
new file mode 100644
index 00000000000..651cf34423a
--- /dev/null
+++ b/gnome-extra/nm-applet/nm-applet-1.8.10-r1.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+GNOME2_LA_PUNT="yes"
+GNOME_ORG_MODULE="network-manager-applet"
+
+inherit gnome2
+
+DESCRIPTION="GNOME applet for NetworkManager"
+HOMEPAGE="https://wiki.gnome.org/Projects/NetworkManager";
+
+LICENSE="GPL-2+"
+SLOT="0"
+IUSE="+introspection +gcr +modemmanager selinux teamd"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~x86"
+
+RDEPEND="
+       >=app-crypt/libsecret-0.18
+       >=dev-libs/glib-2.38:2[dbus]
+       >=dev-libs/dbus-glib-0.88
+       >=sys-apps/dbus-1.4.1
+       >=sys-auth/polkit-0.96-r1
+       >=x11-libs/gtk+-3.10:3[introspection?]
+       >=x11-libs/libnotify-0.7.0
+
+       app-text/iso-codes
+       >=net-misc/networkmanager-1.7:=[introspection?,modemmanager?,teamd?]
+       net-misc/mobile-broadband-provider-info
+
+       introspection? ( >=dev-libs/gobject-introspection-0.9.6:= )
+       virtual/freedesktop-icon-theme
+       virtual/libgudev:=
+       gcr? ( >=app-crypt/gcr-3.14:=[gtk] )
+       modemmanager? ( net-misc/modemmanager )
+       selinux? ( sys-libs/libselinux )
+       teamd? ( >=dev-libs/jansson-2.7 )
+"
+DEPEND="${RDEPEND}
+       >=dev-util/gtk-doc-am-1.0
+       >=dev-util/intltool-0.50.1
+       virtual/pkgconfig
+"
+
+PDEPEND="virtual/notification-daemon" #546134
+
+PATCHES=(
+       # shared/compat: fix memory handling of nm_setting_vpn_get_*_keys
+       # (from 'master')
+       "${FILESDIR}"/${P}-vpn-crash.patch
+
+       # libnma/cert-chooser: handle case of no avalable modules (from
+       # 'master')
+       "${FILESDIR}"/${P}-cert-chooser.patch
+)
+
+src_configure() {
+       local myconf=(
+               --without-appindicator
+               --disable-lto
+               --disable-ld-gc
+               --disable-more-warnings
+               --disable-static
+               --localstatedir=/var
+               $(use_enable introspection)
+               $(use_with gcr)
+               $(use_with modemmanager wwan)
+               $(use_with selinux)
+               $(use_with teamd team)
+       )
+       gnome2_src_configure "${myconf[@]}"
+}

Reply via email to