diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2018-07-14 20:58:29 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2018-07-14 20:58:29 +0100 |
commit | 0cf2f20608308acdf3cb922c3736446bbd8f3388 (patch) | |
tree | 07815070629c7c11000a7f51ceb8ccbccb49a809 /gnome-extra/nm-applet/files | |
parent | 1798c4aeca70ac8d0a243684d6a798fbc65735f8 (diff) |
gentoo resync : 14.07.2018
Diffstat (limited to 'gnome-extra/nm-applet/files')
6 files changed, 0 insertions, 585 deletions
diff --git a/gnome-extra/nm-applet/files/1.4.6-CVE-2017-6590.patch b/gnome-extra/nm-applet/files/1.4.6-CVE-2017-6590.patch deleted file mode 100644 index 25270e1f4c83..000000000000 --- a/gnome-extra/nm-applet/files/1.4.6-CVE-2017-6590.patch +++ /dev/null @@ -1,253 +0,0 @@ -This is a squashed to one diff of the following 3 upstream commits: - -From d1ebd01abfad506d9a8797a252d4549c2df2045a Mon Sep 17 00:00:00 2001 -From: Iain Lane <iain@orangesquash.org.uk> -Date: Fri, 3 Mar 2017 12:27:23 +0000 -Subject: [PATCH 1/3] applet: check permissions before showing 802.1x wifi - dialog (CVE-2017-6590) - -In most places, we (or NM) check permissions before performing actions. -One place we don't is when we need more information when connecting to -and 802.1x network. In that case we pop up a dialog to ask for more -information before initiaing the connection. - -The dialog contains a GTK+ filechooser. We don't want unprivileged users -to have access to this as it allows opening files. - -Check for MODIFY_SYSTEM or MODIFY_OWN before showing the dialog for -802.1x connections. If the user doesn't have or can't get it, don't show -the dialog. They wouldn't have been able to create the connection -anyway. - -This fixes CVE-2017-6590. - -https://mail.gnome.org/archives/networkmanager-list/2017-March/msg00032.html -https://bugs.launchpad.net/bugs/1668321 - -[bgalvani@redhat.com: changed commit subject line, added links] - -(cherry picked from commit 523d0439c9d5633daccc77474f793c82cbd731ee) - -From f1f61ade24296b93044b9719fb2de1b561955e83 Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani <bgalvani@redhat.com> -Date: Tue, 14 Mar 2017 14:18:06 +0100 -Subject: [PATCH 2/3] applet-device-wifi: remove unused functions - -They are not needed since commit 9b002809514a ("applet: remove usage -of dbus-glib and private session D-Bus API"). - -(cherry picked from commit d1c7f4d61f2eca23d90078c587059e4d8d11d3fc) - -From 7a582c5e6536b9e9a542d4791ae38a9d2840936b Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani <bgalvani@redhat.com> -Date: Tue, 14 Mar 2017 14:37:19 +0100 -Subject: [PATCH 3/3] applet-device-wifi: return FALSE on failure of - new_auto_connection() method - -If the permission check fails, we never run the callback: return FALSE -so that the caller can free resources. - -(cherry picked from commit 38303e04cefb56a0a2176c5e30b399b14f21fc05) - -diff --git a/src/applet-device-wifi.c b/src/applet-device-wifi.c -index 7b8fa6e..cd44e05 100644 ---- a/src/applet-device-wifi.c -+++ b/src/applet-device-wifi.c -@@ -40,12 +40,6 @@ static void wifi_dialog_response_cb (GtkDialog *dialog, gint response, gpointer - - static NMAccessPoint *update_active_ap (NMDevice *device, NMDeviceState state, NMApplet *applet); - --static void _do_new_auto_connection (NMApplet *applet, -- NMDevice *device, -- NMAccessPoint *ap, -- AppletNewAutoConnectionCallback callback, -- gpointer callback_data); -- - /*****************************************************************************/ - - typedef struct { -@@ -292,74 +286,6 @@ nma_menu_add_create_network_item (GtkWidget *menu, NMApplet *applet) - gtk_widget_set_sensitive (GTK_WIDGET (menu_item), FALSE); - } - --static void --dbus_8021x_add_and_activate_cb (GObject *client, -- GAsyncResult *result, -- gpointer user_data) --{ -- GError *error = NULL; -- NMActiveConnection *active; -- -- active = nm_client_add_and_activate_connection_finish (NM_CLIENT (client), result, &error); -- if (error) -- g_warning ("Failed to add/activate connection: (%d) %s", error->code, error->message); -- -- g_clear_object (&active); -- g_clear_error (&error); --} -- --typedef struct { -- NMApplet *applet; -- NMDevice *device; -- NMAccessPoint *ap; --} Dbus8021xInfo; -- --static void --dbus_connect_8021x_cb (NMConnection *connection, -- gboolean auto_created, -- gboolean canceled, -- gpointer user_data) --{ -- Dbus8021xInfo *info = user_data; -- -- if (canceled == FALSE) { -- g_return_if_fail (connection != NULL); -- -- /* Ask NM to add the new connection and activate it; NM will fill in the -- * missing details based on the specific object and the device. -- */ -- nm_client_add_and_activate_connection_async (info->applet->nm_client, -- connection, -- info->device, -- nm_object_get_path (NM_OBJECT (info->ap)), -- NULL, -- dbus_8021x_add_and_activate_cb, -- info->applet); -- } -- -- g_object_unref (info->device); -- g_object_unref (info->ap); -- memset (info, 0, sizeof (*info)); -- g_free (info); --} -- --gboolean --applet_wifi_connect_to_8021x_network (NMApplet *applet, -- NMDevice *device, -- NMAccessPoint *ap) --{ -- Dbus8021xInfo *info; -- -- info = g_malloc0 (sizeof (*info)); -- info->applet = applet; -- info->device = g_object_ref (device); -- info->ap = g_object_ref (ap); -- -- _do_new_auto_connection (applet, device, ap, dbus_connect_8021x_cb, info); -- return TRUE; --} -- -- - typedef struct { - NMApplet *applet; - NMDeviceWifi *device; -@@ -514,17 +440,28 @@ done: - gtk_widget_destroy (GTK_WIDGET (dialog)); - } - --static void --_do_new_auto_connection (NMApplet *applet, -- NMDevice *device, -- NMAccessPoint *ap, -- AppletNewAutoConnectionCallback callback, -- gpointer callback_data) -+static gboolean -+can_get_permission (NMApplet *applet, NMClientPermission perm) - { -- NMConnection *connection = NULL; -- NMSettingConnection *s_con = NULL; -+ if ( applet->permissions[perm] == NM_CLIENT_PERMISSION_RESULT_YES -+ || applet->permissions[perm] == NM_CLIENT_PERMISSION_RESULT_AUTH) -+ return TRUE; -+ return FALSE; -+} -+ -+static gboolean -+wifi_new_auto_connection (NMDevice *device, -+ gpointer dclass_data, -+ AppletNewAutoConnectionCallback callback, -+ gpointer callback_data) -+{ -+ WifiMenuItemInfo *info = (WifiMenuItemInfo *) dclass_data; -+ NMApplet *applet; -+ NMAccessPoint *ap; -+ NMConnection *connection; -+ NMSettingConnection *s_con; - NMSettingWireless *s_wifi = NULL; -- NMSettingWirelessSecurity *s_wsec = NULL; -+ NMSettingWirelessSecurity *s_wsec; - NMSetting8021x *s_8021x = NULL; - GBytes *ssid; - NM80211ApSecurityFlags wpa_flags, rsn_flags; -@@ -532,9 +469,13 @@ _do_new_auto_connection (NMApplet *applet, - MoreInfo *more_info; - char *uuid; - -- g_assert (applet); -- g_assert (device); -- g_assert (ap); -+ g_return_val_if_fail (dclass_data, FALSE); -+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE); -+ g_return_val_if_fail (NM_IS_ACCESS_POINT (info->ap), FALSE); -+ g_return_val_if_fail (NM_IS_APPLET (info->applet), FALSE); -+ -+ applet = info->applet; -+ ap = info->ap; - - connection = nm_simple_connection_new (); - -@@ -590,6 +531,15 @@ _do_new_auto_connection (NMApplet *applet, - * Dialog Of Doom. - */ - if (s_8021x) { -+ if (!can_get_permission (applet, NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM) && -+ !can_get_permission (applet, NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN)) { -+ const char *text = _("Failed to add new connection"); -+ const char *err_text = _("Insufficient privileges."); -+ g_warning ("%s: %s", text, err_text); -+ utils_show_error_dialog (_("Connection failure"), text, err_text, FALSE, NULL); -+ g_clear_object (&connection); -+ return FALSE; -+ } - more_info = g_malloc0 (sizeof (*more_info)); - more_info->applet = applet; - more_info->callback = callback; -@@ -606,24 +556,10 @@ _do_new_auto_connection (NMApplet *applet, - /* Everything else can just get activated right away */ - callback (connection, TRUE, FALSE, callback_data); - } --} - --static gboolean --wifi_new_auto_connection (NMDevice *device, -- gpointer dclass_data, -- AppletNewAutoConnectionCallback callback, -- gpointer callback_data) --{ -- WifiMenuItemInfo *info = (WifiMenuItemInfo *) dclass_data; -- -- g_return_val_if_fail (device != NULL, FALSE); -- g_return_val_if_fail (info->ap != NULL, FALSE); -- -- _do_new_auto_connection (info->applet, device, info->ap, callback, callback_data); - return TRUE; - } - -- - static void - wifi_menu_item_activate (GtkMenuItem *item, gpointer user_data) - { -diff --git a/src/applet.h b/src/applet.h -index 41e95a1..b28dfa2 100644 ---- a/src/applet.h -+++ b/src/applet.h -@@ -285,9 +285,6 @@ GdkPixbuf * nma_icon_check_and_load (const char *name, - NMApplet *applet); - - gboolean applet_wifi_connect_to_hidden_network (NMApplet *applet); --gboolean applet_wifi_connect_to_8021x_network (NMApplet *applet, -- NMDevice *device, -- NMAccessPoint *ap); - gboolean applet_wifi_create_wifi_network (NMApplet *applet); - gboolean applet_wifi_can_create_wifi_network (NMApplet *applet); - diff --git a/gnome-extra/nm-applet/files/1.4.6-fix-nma-bindings.patch b/gnome-extra/nm-applet/files/1.4.6-fix-nma-bindings.patch deleted file mode 100644 index 2a04a5327394..000000000000 --- a/gnome-extra/nm-applet/files/1.4.6-fix-nma-bindings.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 58e47dc92d38974141e1053b25cae02d7c8414b0 Mon Sep 17 00:00:00 2001 -From: Thomas Haller <thaller@redhat.com> -Date: Tue, 7 Mar 2017 09:43:03 +0100 -Subject: [PATCH] libnma/pygobject: libnma/NMA must use libnm/NM instead of - legacy libraries - -libnma uses libnm, and not libnm-util/libnm-glib. Hence, the python bindings -must load "NM" and not "NMClient"/"NetworkManager". - -As it was, the generated bindings for libnma were unusable and loading -them would fail with - - libnm-ERROR **: libnm-util symbols detected; Mixing libnm with libnm-util/libnm-glib is not supported - -https://bugzilla.gnome.org/show_bug.cgi?id=779153 - -Fixes: 76a12beac4e8692f30071169e11e2b521ec4eab7 -(cherry picked from commit 7a59d41e5f6666d0da51f1f7aae7518befdb1182) ---- - Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile.am b/Makefile.am -index a57e15f..e76c9ba 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -532,7 +532,7 @@ pkgconfig_DATA += src/libnma/libnma.pc - - if HAVE_INTROSPECTION - src/libnma/NMA-1.0.gir: src/libnma/libnma.la --src_libnma_NMA_1_0_gir_INCLUDES = NMClient-1.0 NetworkManager-1.0 Gtk-3.0 -+src_libnma_NMA_1_0_gir_INCLUDES = NM-1.0 Gtk-3.0 - src_libnma_NMA_1_0_gir_EXPORT_PACKAGES = libnma - src_libnma_NMA_1_0_gir_CFLAGS = $(src_libnma_libnma_la_CFLAGS) - src_libnma_NMA_1_0_gir_LIBS = src/libnma/libnma.la --- -2.10.1 - diff --git a/gnome-extra/nm-applet/files/1.4.6-fix-translations-in-g-c-c.patch b/gnome-extra/nm-applet/files/1.4.6-fix-translations-in-g-c-c.patch deleted file mode 100644 index 8a1fe825e38e..000000000000 --- a/gnome-extra/nm-applet/files/1.4.6-fix-translations-in-g-c-c.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 718b24286559169ba29f89536c3f6c81dcfe6e30 Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani <bgalvani@redhat.com> -Date: Mon, 13 Mar 2017 21:57:28 +0100 -Subject: [PATCH] libnma,libnm-gtk: use package-aware gettext() macro - -gettext("str") expands to dcgettext(NULL, "str") which gets -translations from the last used domain, while _("str") is equivalent -to g_dgettext(GETTEXT_PACKAGE, "str") which uses the library's -translations. - -https://bugzilla.gnome.org/show_bug.cgi?id=772362 -(cherry picked from commit 9df10e2e758a7b78aa5a69a15900030f45e48fff) ---- - src/libnm-gtk/nm-ui-utils.c | 10 +++++----- - src/libnma/nma-ui-utils.c | 10 +++++----- - 2 files changed, 10 insertions(+), 10 deletions(-) - -diff --git a/src/libnm-gtk/nm-ui-utils.c b/src/libnm-gtk/nm-ui-utils.c -index e92ff80..eec9a5f 100644 ---- a/src/libnm-gtk/nm-ui-utils.c -+++ b/src/libnm-gtk/nm-ui-utils.c -@@ -642,7 +642,7 @@ change_password_storage_icon (GtkWidget *passwd_entry, MenuItem item) - icon_name_table[item]); - gtk_entry_set_icon_tooltip_text (GTK_ENTRY (passwd_entry), - GTK_ENTRY_ICON_SECONDARY, -- gettext (icon_desc_table[item])); -+ _(icon_desc_table[item])); - - /* We want to make entry insensitive when ITEM_STORAGE_ASK is selected - * Unfortunately, making GtkEntry insensitive will also make the icon -@@ -843,12 +843,12 @@ nma_utils_setup_password_storage (GtkWidget *passwd_entry, - g_object_set_data (G_OBJECT (popup_menu), PASSWORD_STORAGE_MENU_TAG, GUINT_TO_POINTER (TRUE)); - g_object_set_data (G_OBJECT (popup_menu), MENU_WITH_NOT_REQUIRED_TAG, GUINT_TO_POINTER (with_not_required)); - group = NULL; -- item[0] = gtk_radio_menu_item_new_with_label (group, gettext (icon_desc_table[0])); -+ item[0] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[0])); - group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item[0])); -- item[1] = gtk_radio_menu_item_new_with_label (group, gettext (icon_desc_table[1])); -- item[2] = gtk_radio_menu_item_new_with_label (group, gettext (icon_desc_table[2])); -+ item[1] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[1])); -+ item[2] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[2])); - if (with_not_required) -- item[3] = gtk_radio_menu_item_new_with_label (group, gettext (icon_desc_table[3])); -+ item[3] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[3])); - - gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[0]); - gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[1]); -diff --git a/src/libnma/nma-ui-utils.c b/src/libnma/nma-ui-utils.c -index 99e2e97..418ef5f 100644 ---- a/src/libnma/nma-ui-utils.c -+++ b/src/libnma/nma-ui-utils.c -@@ -76,7 +76,7 @@ change_password_storage_icon (GtkWidget *passwd_entry, MenuItem item) - icon_name_table[item]); - gtk_entry_set_icon_tooltip_text (GTK_ENTRY (passwd_entry), - GTK_ENTRY_ICON_SECONDARY, -- gettext (icon_desc_table[item])); -+ _(icon_desc_table[item])); - - /* We want to make entry insensitive when ITEM_STORAGE_ASK is selected - * Unfortunately, making GtkEntry insensitive will also make the icon -@@ -277,12 +277,12 @@ nma_utils_setup_password_storage (GtkWidget *passwd_entry, - g_object_set_data (G_OBJECT (popup_menu), PASSWORD_STORAGE_MENU_TAG, GUINT_TO_POINTER (TRUE)); - g_object_set_data (G_OBJECT (popup_menu), MENU_WITH_NOT_REQUIRED_TAG, GUINT_TO_POINTER (with_not_required)); - group = NULL; -- item[0] = gtk_radio_menu_item_new_with_label (group, gettext (icon_desc_table[0])); -+ item[0] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[0])); - group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item[0])); -- item[1] = gtk_radio_menu_item_new_with_label (group, gettext (icon_desc_table[1])); -- item[2] = gtk_radio_menu_item_new_with_label (group, gettext (icon_desc_table[2])); -+ item[1] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[1])); -+ item[2] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[2])); - if (with_not_required) -- item[3] = gtk_radio_menu_item_new_with_label (group, gettext (icon_desc_table[3])); -+ item[3] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[3])); - - gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[0]); - gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[1]); --- -2.10.1 - diff --git a/gnome-extra/nm-applet/files/1.4.6-improved-certfile-error-msg.patch b/gnome-extra/nm-applet/files/1.4.6-improved-certfile-error-msg.patch deleted file mode 100644 index e83d4c34ca0e..000000000000 --- a/gnome-extra/nm-applet/files/1.4.6-improved-certfile-error-msg.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 3609f9687728f2f7f8cdb33723c1d44660b81004 Mon Sep 17 00:00:00 2001 -From: Thomas Haller <thaller@redhat.com> -Date: Thu, 23 Mar 2017 12:28:12 +0100 -Subject: [PATCH] c-e: improve error message for non-existing certificate file - -When the connection references a certifiate file that does not exist, -the GUI's file picker button shows an "(None)", however the "Save" -button is disable with message: - - "Invalid setting Wi-Fi Security: invalid EAP-PEAP CA certificate: unspecified error validating eap-method file" - -Slightly improve that by showing instead - - "Invalid setting Wi-Fi Security: invalid EAP-PEAP CA certificate: file "..." does not exist" - -The solution is not optimal because the GUI shows file "(None)", -with is some hidden information that makes the connection invalid. - -https://bugzilla.gnome.org/show_bug.cgi?id=780423 -(cherry picked from commit b603844fc50679fc8683227bfa0f3b6c8e77c2c7) ---- - src/wireless-security/eap-method.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/wireless-security/eap-method.c b/src/wireless-security/eap-method.c -index cb733e8..b5c6609 100644 ---- a/src/wireless-security/eap-method.c -+++ b/src/wireless-security/eap-method.c -@@ -237,6 +237,7 @@ eap_method_validate_filepicker (GtkBuilder *builder, - - if (!g_file_test (filename, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) { - success = FALSE; -+ g_set_error (error, NMA_ERROR, NMA_ERROR_GENERIC, _("file \"%s\" does not exist"), filename); - goto out; - } - --- -2.10.1 - 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 deleted file mode 100644 index 9aad2396953e..000000000000 --- a/gnome-extra/nm-applet/files/nm-applet-1.8.10-cert-chooser.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 4d2523b482ab78134dafc02c9b99bd15f1a9174a Mon Sep 17 00:00:00 2001 -From: Ben Wiederhake <BenWiederhake.GitHub@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. - -[lkundrak@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 deleted file mode 100644 index 8f217af2dac6..000000000000 --- a/gnome-extra/nm-applet/files/nm-applet-1.8.10-vpn-crash.patch +++ /dev/null @@ -1,137 +0,0 @@ -From 46f99b295e59f44dfde50ec90e7c09627d32431e Mon Sep 17 00:00:00 2001 -From: "Jan Alexander Steffens (heftig)" <jan.steffens@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. - -[thaller@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.steffens@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. - -[thaller@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 - |