Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP1:Update
NetworkManager-applet
nm-applet-private-connection.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nm-applet-private-connection.patch of Package NetworkManager-applet
From 1a06498ed24c3580acb286a539aba0c99a544b0f Mon Sep 17 00:00:00 2001 From: Gary Ching-Pang Lin <chingpang@gmail.com> Date: Thu, 2 Feb 2012 18:08:56 +0800 Subject: [PATCH] Create private connections if the user is not authorized Some distributions do not allow the normal user to create a system connection without the polkit authentication. This commit checks the polkit policy and creates private connections if the user is not authorized. https://bugzilla.gnome.org/show_bug.cgi?id=646187 --- configure.ac | 4 +++ src/applet-device-ethernet.c | 7 +++++ src/applet-device-wifi.c | 12 ++++++++ src/applet-device-wimax.c | 7 +++++ src/connection-editor/Makefile.am | 2 ++ src/connection-editor/ce-page.c | 47 ++++++++++++++++++++++++++++++ src/gnome-bluetooth/Makefile.am | 2 ++ src/gnome-bluetooth/nma-bt-device.c | 58 +++++++++++++++++++++++++++++++++++++ src/mobile-helpers.c | 6 ++++ src/utils/Makefile.am | 3 +- src/utils/utils.c | 40 +++++++++++++++++++++++++ src/utils/utils.h | 2 ++ 12 files changed, 189 insertions(+), 1 deletion(-) Index: network-manager-applet-1.0.10/configure.ac =================================================================== --- network-manager-applet-1.0.10.orig/configure.ac +++ network-manager-applet-1.0.10/configure.ac @@ -86,6 +86,10 @@ PKG_CHECK_MODULES(NMA, NMA_CFLAGS="$NMA_CFLAGS -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32" +PKG_CHECK_MODULES(POLKIT, [polkit-gobject-1]) +AC_SUBST(POLKIT_CFLAGS) +AC_SUBST(POLKIT_LIBS) + AC_MSG_CHECKING([whether to build nm-applet-migration-tool]) AC_ARG_ENABLE([migration], [AS_HELP_STRING([--disable-migration], [Don't build migration tool for NM <= 0.8 settings])], Index: network-manager-applet-1.0.10/src/applet-device-ethernet.c =================================================================== --- network-manager-applet-1.0.10.orig/src/applet-device-ethernet.c +++ network-manager-applet-1.0.10/src/applet-device-ethernet.c @@ -40,6 +40,7 @@ #include "applet-device-ethernet.h" #include "ethernet-dialog.h" #include "nm-ui-utils.h" +#include "utils.h" #define DEFAULT_ETHERNET_NAME _("Auto Ethernet") @@ -68,6 +69,12 @@ ethernet_new_auto_connection (NMDevice * NM_SETTING_CONNECTION_UUID, uuid, NULL); g_free (uuid); + if (!utils_system_connection_authorized ()) { + nm_setting_connection_add_permission (s_con, + "user", + g_get_user_name(), + NULL); + } nm_connection_add_setting (connection, NM_SETTING (s_con)); Index: network-manager-applet-1.0.10/src/applet-device-wifi.c =================================================================== --- network-manager-applet-1.0.10.orig/src/applet-device-wifi.c +++ network-manager-applet-1.0.10/src/applet-device-wifi.c @@ -445,6 +445,18 @@ _do_new_auto_connection (NMApplet *apple nm_connection_add_setting (connection, NM_SETTING (s_8021x)); } + if (!utils_system_connection_authorized ()) { + s_con = nm_connection_get_setting_connection (connection); + if (!s_con) { + s_con = (NMSettingConnection *) nm_setting_connection_new (); + nm_connection_add_setting (connection, NM_SETTING (s_con)); + } + nm_setting_connection_add_permission (s_con, + "user", + g_get_user_name(), + NULL); + } + /* If it's an 802.1x connection, we need more information, so pop up the * Dialog Of Doom. */ Index: network-manager-applet-1.0.10/src/applet-device-wimax.c =================================================================== --- network-manager-applet-1.0.10.orig/src/applet-device-wimax.c +++ network-manager-applet-1.0.10/src/applet-device-wimax.c @@ -39,6 +39,7 @@ #include "nma-marshal.h" #include "mb-menu-item.h" #include "nm-ui-utils.h" +#include "utils.h" #define ACTIVE_NSP_TAG "active-nsp" @@ -94,6 +95,12 @@ wimax_new_auto_connection (NMDevice *dev NM_SETTING_CONNECTION_UUID, uuid, NULL); g_free (uuid); + if (!utils_system_connection_authorized ()) { + nm_setting_connection_add_permission (s_con, + "user", + g_get_user_name(), + NULL); + } nm_connection_add_setting (connection, NM_SETTING (s_con)); Index: network-manager-applet-1.0.10/src/connection-editor/Makefile.am =================================================================== --- network-manager-applet-1.0.10.orig/src/connection-editor/Makefile.am +++ network-manager-applet-1.0.10/src/connection-editor/Makefile.am @@ -13,6 +13,7 @@ nm_connection_editor_CPPFLAGS = \ -DDATADIR=\""$(datadir)"\" \ -DNMALOCALEDIR=\"$(datadir)/locale\" \ $(DBUS_CFLAGS) \ + $(POLKIT_CFLAGS) \ $(DISABLE_DEPRECATED) \ -I${top_srcdir}/src/utils \ -I${top_srcdir}/src/wireless-security \ @@ -94,6 +95,7 @@ nm_connection_editor_LDADD = \ ${top_builddir}/src/libnm-gtk/libnm-gtk.la \ $(GTK_LIBS) \ $(NMA_LIBS) \ + $(POLKIT_LIBS) \ -lm uidir = $(datadir)/nm-applet Index: network-manager-applet-1.0.10/src/connection-editor/ce-page.c =================================================================== --- network-manager-applet-1.0.10.orig/src/connection-editor/ce-page.c +++ network-manager-applet-1.0.10/src/connection-editor/ce-page.c @@ -29,6 +29,8 @@ #include <glib/gi18n.h> +#include <polkit/polkit.h> + #include <nm-setting-connection.h> #include <nm-utils.h> #include <nm-device-bt.h> @@ -868,6 +870,44 @@ ce_page_class_init (CEPageClass *page_cl G_TYPE_NONE, 1, G_TYPE_POINTER); } +static gboolean +polkit_system_connection_authorized (void) +{ + PolkitSubject *subject; + PolkitAuthority *authority; + PolkitAuthorizationResult *result; + GError *error = NULL; + static gboolean is_checked = FALSE; + static gboolean is_authorized = FALSE; + + if (is_checked) + return is_authorized; + + /* Check the polkit authorization */ + authority = polkit_authority_get_sync (NULL, NULL); + subject = polkit_unix_process_new_for_owner (getpid (), 0, -1); + result = polkit_authority_check_authorization_sync (authority, + subject, + "org.freedesktop.NetworkManager.settings.modify.system", + NULL, + POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE, + NULL, + &error); + if (error || !result) { + g_warning ("%s: failed to check polkit authorization! %s", __func__, + error ? error->message : "(unknown)"); + g_clear_error (&error); + } else if (polkit_authorization_result_get_is_authorized (result)) { + is_authorized = TRUE; + } + g_object_unref (result); + g_object_unref (authority); + g_object_unref (subject); + + is_checked = TRUE; + + return is_authorized; +} NMConnection * ce_page_new_connection (const char *format, @@ -902,6 +942,13 @@ ce_page_new_connection (const char *form g_free (uuid); g_free (id); + if (!polkit_system_connection_authorized ()) { + nm_setting_connection_add_permission (s_con, + "user", + g_get_user_name(), + NULL); + } + return connection; } Index: network-manager-applet-1.0.10/src/gnome-bluetooth/Makefile.am =================================================================== --- network-manager-applet-1.0.10.orig/src/gnome-bluetooth/Makefile.am +++ network-manager-applet-1.0.10/src/gnome-bluetooth/Makefile.am @@ -7,6 +7,7 @@ AM_CPPFLAGS = \ -I${top_srcdir}/src/utils \ -I${top_srcdir}/src/libnm-gtk \ $(GNOME_BLUETOOTH_CFLAGS) \ + $(POLKIT_CFLAGS) \ $(DISABLE_DEPRECATED) \ $(WARN_CFLAGS) @@ -34,6 +35,7 @@ libnma_la_LIBADD = \ $(top_builddir)/src/marshallers/libmarshallers.la \ $(top_builddir)/src/utils/libutils.la \ $(top_builddir)/src/libnm-gtk/libnm-gtk.la \ + $(POLKIT_LIBS) \ $(GNOME_BLUETOOTH_LIBS) if WITH_MODEM_MANAGER_1 Index: network-manager-applet-1.0.10/src/gnome-bluetooth/nma-bt-device.c =================================================================== --- network-manager-applet-1.0.10.orig/src/gnome-bluetooth/nma-bt-device.c +++ network-manager-applet-1.0.10/src/gnome-bluetooth/nma-bt-device.c @@ -34,6 +34,8 @@ #include <glib.h> #include <glib/gi18n-lib.h> +#include <polkit/polkit.h> + #include <nm-remote-settings.h> #include <nm-remote-connection.h> @@ -227,6 +229,44 @@ recheck_services_enabled (NmaBtDevice *s } /*********************************************************************/ +static gboolean +polkit_system_connection_authorized (void) +{ + PolkitSubject *subject; + PolkitAuthority *authority; + PolkitAuthorizationResult *result; + GError *error = NULL; + static gboolean is_checked = FALSE; + static gboolean is_authorized = FALSE; + + if (is_checked) + return is_authorized; + + /* Check the polkit authorization */ + authority = polkit_authority_get_sync (NULL, NULL); + subject = polkit_unix_process_new_for_owner (getpid (), 0, -1); + result = polkit_authority_check_authorization_sync (authority, + subject, + "org.freedesktop.NetworkManager.settings.modify.system", + NULL, + POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE, + NULL, + &error); + if (error || !result) { + g_warning ("%s: failed to check polkit authorization! %s", __func__, + error ? error->message : "(unknown)"); + g_clear_error (&error); + } else if (polkit_authorization_result_get_is_authorized (result)) { + is_authorized = TRUE; + } + g_object_unref (result); + g_object_unref (authority); + g_object_unref (subject); + + is_checked = TRUE; + + return is_authorized; +} const char * nma_bt_device_get_bdaddr (NmaBtDevice *device) @@ -368,6 +408,12 @@ dun_new_cdma (NMAMobileWizardAccessMetho NULL); g_free (uuid); g_free (id); + if (!polkit_system_connection_authorized ()) { + nm_setting_connection_add_permission ((NMSettingConnection *)setting, + "user", + g_get_user_name(), + NULL); + } nm_connection_add_setting (connection, setting); return connection; @@ -414,6 +460,12 @@ dun_new_gsm (NMAMobileWizardAccessMethod NULL); g_free (uuid); g_free (id); + if (!polkit_system_connection_authorized ()) { + nm_setting_connection_add_permission ((NMSettingConnection *)setting, + "user", + g_get_user_name(), + NULL); + } nm_connection_add_setting (connection, setting); return connection; @@ -978,6 +1030,12 @@ add_pan_connection (NmaBtDevice *self) NULL); g_free (id); g_free (uuid); + if (!polkit_system_connection_authorized ()) { + nm_setting_connection_add_permission ((NMSettingConnection *)setting, + "user", + g_get_user_name(), + NULL); + } nm_connection_add_setting (connection, setting); /* The Bluetooth settings */ Index: network-manager-applet-1.0.10/src/mobile-helpers.c =================================================================== --- network-manager-applet-1.0.10.orig/src/mobile-helpers.c +++ network-manager-applet-1.0.10/src/mobile-helpers.c @@ -219,6 +219,12 @@ mobile_wizard_done (NMAMobileWizard *wiz "user", g_get_user_name (), NULL); g_free (uuid); g_free (id); + if (!utils_system_connection_authorized ()) { + nm_setting_connection_add_permission ((NMSettingConnection *)setting, + "user", + g_get_user_name(), + NULL); + } nm_connection_add_setting (connection, setting); } Index: network-manager-applet-1.0.10/src/utils/Makefile.am =================================================================== --- network-manager-applet-1.0.10.orig/src/utils/Makefile.am +++ network-manager-applet-1.0.10/src/utils/Makefile.am @@ -10,7 +10,8 @@ libutils_la_SOURCES = \ libutils_la_CPPFLAGS = \ $(GTK_CFLAGS) \ $(NMA_CFLAGS) \ + $(POLKIT_CFLAGS) \ $(DISABLE_DEPRECATED) \ -I${top_srcdir}/src -libutils_la_LIBADD = $(GTK_LIBS) $(NMA_LIBS) +libutils_la_LIBADD = $(GTK_LIBS) $(NMA_LIBS) $(POLKIT_LIBS) Index: network-manager-applet-1.0.10/src/utils/utils.c =================================================================== --- network-manager-applet-1.0.10.orig/src/utils/utils.c +++ network-manager-applet-1.0.10/src/utils/utils.c @@ -27,6 +27,8 @@ #include <glib/gi18n.h> #include <gtk/gtk.h> +#include <polkit/polkit.h> + #include <nm-setting-connection.h> #include <nm-utils.h> @@ -286,3 +288,41 @@ utils_filter_editable_on_insert_text (Gt return count > 0; } +gboolean +utils_system_connection_authorized (void) +{ + PolkitSubject *subject; + PolkitAuthority *authority; + PolkitAuthorizationResult *result; + GError *error = NULL; + static gboolean is_checked = FALSE; + static gboolean is_authorized = FALSE; + + if (is_checked) + return is_authorized; + + /* Check the polkit authorization */ + authority = polkit_authority_get_sync (NULL, NULL); + subject = polkit_unix_process_new_for_owner (getpid (), 0, -1); + result = polkit_authority_check_authorization_sync (authority, + subject, + "org.freedesktop.NetworkManager.settings.modify.system", + NULL, + POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE, + NULL, + &error); + if (error || !result) { + g_warning ("%s: failed to check polkit authorization! %s", __func__, + error ? error->message : "(unknown)"); + g_clear_error (&error); + } else if (polkit_authorization_result_get_is_authorized (result)) { + is_authorized = TRUE; + } + g_object_unref (result); + g_object_unref (authority); + g_object_unref (subject); + + is_checked = TRUE; + + return is_authorized; +} Index: network-manager-applet-1.0.10/src/utils/utils.h =================================================================== --- network-manager-applet-1.0.10.orig/src/utils/utils.h +++ network-manager-applet-1.0.10/src/utils/utils.h @@ -107,5 +107,7 @@ gboolean utils_filter_editable_on_insert UtilsFilterGtkEditableFunc validate_character, gpointer block_func); +gboolean utils_system_connection_authorized (void); + #endif /* UTILS_H */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor