diff options
author | Thomas Haller <thaller@redhat.com> | 2016-07-08 09:32:53 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2016-08-11 11:54:18 +0200 |
commit | d23f43f2b9cad550bf2ce2f53579bed08f1e0911 (patch) | |
tree | 41c7133bd648a45cd304f4d33d6b4ca0ae5c3589 | |
parent | 3d30004710d46c3e7aa66773e3c9a2c36ad048e6 (diff) | |
download | NetworkManager-d23f43f2b9cad550bf2ce2f53579bed08f1e0911.tar.gz |
core: add nm_bus_manager_ensure_root() helper
-rw-r--r-- | src/nm-bus-manager.c | 30 | ||||
-rw-r--r-- | src/nm-bus-manager.h | 5 | ||||
-rw-r--r-- | src/settings/nm-settings.c | 31 |
3 files changed, 39 insertions, 27 deletions
diff --git a/src/nm-bus-manager.c b/src/nm-bus-manager.c index 656e7dbf6b..5894d7570d 100644 --- a/src/nm-bus-manager.c +++ b/src/nm-bus-manager.c @@ -534,6 +534,36 @@ nm_bus_manager_get_caller_info_from_message (NMBusManager *self, } gboolean +nm_bus_manager_ensure_root (NMBusManager *self, + GDBusMethodInvocation *context, + GQuark error_domain, + int error_code) +{ + gulong caller_uid; + GError *error = NULL; + + g_return_val_if_fail (NM_IS_BUS_MANAGER (self), FALSE); + g_return_val_if_fail (G_IS_DBUS_METHOD_INVOCATION (context), FALSE); + + if (!nm_bus_manager_get_caller_info (self, context, NULL, &caller_uid, NULL)) { + error = g_error_new_literal (error_domain, + error_code, + "Unable to determine request UID."); + g_dbus_method_invocation_take_error (context, error); + return FALSE; + } + if (caller_uid != 0) { + error = g_error_new_literal (error_domain, + error_code, + "Permission denied"); + g_dbus_method_invocation_take_error (context, error); + return FALSE; + } + + return TRUE; +} + +gboolean nm_bus_manager_get_unix_user (NMBusManager *self, const char *sender, gulong *out_uid) diff --git a/src/nm-bus-manager.h b/src/nm-bus-manager.h index 49579d462a..f8a2cb6b5b 100644 --- a/src/nm-bus-manager.h +++ b/src/nm-bus-manager.h @@ -68,6 +68,11 @@ gboolean nm_bus_manager_get_caller_info (NMBusManager *self, gulong *out_uid, gulong *out_pid); +gboolean nm_bus_manager_ensure_root (NMBusManager *self, + GDBusMethodInvocation *context, + GQuark error_domain, + int error_code); + const char *nm_bus_manager_connection_get_private_name (NMBusManager *self, GDBusConnection *connection); diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index 284e173d24..529d7581de 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -1512,31 +1512,6 @@ impl_settings_add_connection_unsaved (NMSettings *self, impl_settings_add_connection_helper (self, context, settings, FALSE); } -static gboolean -ensure_root (NMBusManager *dbus_mgr, - GDBusMethodInvocation *context) -{ - gulong caller_uid; - GError *error = NULL; - - if (!nm_bus_manager_get_caller_info (dbus_mgr, context, NULL, &caller_uid, NULL)) { - error = g_error_new_literal (NM_SETTINGS_ERROR, - NM_SETTINGS_ERROR_PERMISSION_DENIED, - "Unable to determine request UID."); - g_dbus_method_invocation_take_error (context, error); - return FALSE; - } - if (caller_uid != 0) { - error = g_error_new_literal (NM_SETTINGS_ERROR, - NM_SETTINGS_ERROR_PERMISSION_DENIED, - "Permission denied"); - g_dbus_method_invocation_take_error (context, error); - return FALSE; - } - - return TRUE; -} - static void impl_settings_load_connections (NMSettings *self, GDBusMethodInvocation *context, @@ -1547,7 +1522,8 @@ impl_settings_load_connections (NMSettings *self, GSList *iter; int i; - if (!ensure_root (nm_bus_manager_get (), context)) + if (!nm_bus_manager_ensure_root (nm_bus_manager_get (), context, + NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_PERMISSION_DENIED)) return; failures = g_ptr_array_new (); @@ -1583,7 +1559,8 @@ impl_settings_reload_connections (NMSettings *self, NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self); GSList *iter; - if (!ensure_root (nm_bus_manager_get (), context)) + if (!nm_bus_manager_ensure_root (nm_bus_manager_get (), context, + NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_PERMISSION_DENIED)) return; for (iter = priv->plugins; iter; iter = g_slist_next (iter)) { |