summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-07-08 09:32:53 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2016-08-11 11:54:18 +0200
commitd23f43f2b9cad550bf2ce2f53579bed08f1e0911 (patch)
tree41c7133bd648a45cd304f4d33d6b4ca0ae5c3589
parent3d30004710d46c3e7aa66773e3c9a2c36ad048e6 (diff)
downloadNetworkManager-d23f43f2b9cad550bf2ce2f53579bed08f1e0911.tar.gz
core: add nm_bus_manager_ensure_root() helper
-rw-r--r--src/nm-bus-manager.c30
-rw-r--r--src/nm-bus-manager.h5
-rw-r--r--src/settings/nm-settings.c31
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)) {