summary refs log tree commit diff
path: root/src/settings/nm-agent-manager.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2018-04-23 18:00:21 +0200
committerMichael Biebl <biebl@debian.org>2018-04-23 18:00:21 +0200
commitf60117b41d5433be1b4a96d82cd11d0c3dce9b63 (patch)
tree2dd55c4ab0fdcbe9cddb26adb4a554b1a45c73c8 /src/settings/nm-agent-manager.c
parent7e9ff09fcb2366b383b7ebbec80d2f6fff117290 (diff)
New upstream version 1.11.3 upstream/1.11.3
Diffstat (limited to 'src/settings/nm-agent-manager.c')
-rw-r--r--src/settings/nm-agent-manager.c160
1 files changed, 103 insertions, 57 deletions
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c
index a68db47e..453136e4 100644
--- a/src/settings/nm-agent-manager.c
+++ b/src/settings/nm-agent-manager.c
@@ -31,14 +31,12 @@
 #include "nm-auth-utils.h"
 #include "nm-setting-vpn.h"
 #include "nm-auth-manager.h"
-#include "nm-bus-manager.h"
+#include "nm-dbus-manager.h"
 #include "nm-session-monitor.h"
 #include "nm-simple-connection.h"
 #include "NetworkManagerUtils.h"
 #include "nm-core-internal.h"
-#include "nm-utils/c-list.h"
-
-#include "introspection/org.freedesktop.NetworkManager.AgentManager.h"
+#include "c-list/src/c-list.h"
 
 /*****************************************************************************/
 
@@ -67,15 +65,15 @@ typedef struct {
 } NMAgentManagerPrivate;
 
 struct _NMAgentManager {
-	NMExportedObject parent;
+	NMDBusObject parent;
 	NMAgentManagerPrivate _priv;
 };
 
 struct _NMAgentManagerClass {
-	NMExportedObjectClass parent;
+	NMDBusObjectClass parent;
 };
 
-G_DEFINE_TYPE (NMAgentManager, nm_agent_manager, NM_TYPE_EXPORTED_OBJECT)
+G_DEFINE_TYPE (NMAgentManager, nm_agent_manager, NM_TYPE_DBUS_OBJECT)
 
 #define NM_AGENT_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMAgentManager, NM_IS_AGENT_MANAGER)
 
@@ -362,7 +360,7 @@ agent_register_permissions_done (NMAuthChain *chain,
 			request_add_agent (c_list_entry (iter, Request, lst_request), agent);
 	}
 
-	nm_auth_chain_unref (chain);
+	nm_auth_chain_destroy (chain);
 }
 
 static NMSecretAgent *
@@ -392,10 +390,10 @@ agent_disconnected_cb (NMSecretAgent *agent, gpointer user_data)
 }
 
 static void
-impl_agent_manager_register_with_capabilities (NMAgentManager *self,
-                                               GDBusMethodInvocation *context,
-                                               const char *identifier,
-                                               guint32 capabilities)
+agent_manager_register_with_capabilities (NMAgentManager *self,
+                                          GDBusMethodInvocation *context,
+                                          const char *identifier,
+                                          guint32 capabilities)
 {
 	NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
 	NMAuthSubject *subject;
@@ -460,45 +458,56 @@ done:
 }
 
 static void
-impl_agent_manager_register (NMAgentManager *self,
-                             GDBusMethodInvocation *context,
-                             const char *identifier)
+impl_agent_manager_register (NMDBusObject *obj,
+                             const NMDBusInterfaceInfoExtended *interface_info,
+                             const NMDBusMethodInfoExtended *method_info,
+                             GDBusConnection *connection,
+                             const char *sender,
+                             GDBusMethodInvocation *invocation,
+                             GVariant *parameters)
 {
-	impl_agent_manager_register_with_capabilities (self, context, identifier, 0);
+	const char *identifier;
+
+	g_variant_get (parameters, "(&s)", &identifier);
+	agent_manager_register_with_capabilities (NM_AGENT_MANAGER (obj), invocation, identifier, 0);
 }
 
 static void
-impl_agent_manager_unregister (NMAgentManager *self,
-                               GDBusMethodInvocation *context)
+impl_agent_manager_register_with_capabilities (NMDBusObject *obj,
+                                               const NMDBusInterfaceInfoExtended *interface_info,
+                                               const NMDBusMethodInfoExtended *method_info,
+                                               GDBusConnection *connection,
+                                               const char *sender,
+                                               GDBusMethodInvocation *invocation,
+                                               GVariant *parameters)
 {
-	GError *error = NULL;
-	char *sender = NULL;
+	const char *identifier;
+	guint32 capabilities;
 
-	if (!nm_bus_manager_get_caller_info (nm_bus_manager_get (),
-	                                     context,
-	                                     &sender,
-	                                     NULL,
-	                                     NULL)) {
-		error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
-		                             NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED,
-		                             "Unable to determine request sender.");
-		goto done;
-	}
+	g_variant_get (parameters, "(&su)", &identifier, &capabilities);
+	agent_manager_register_with_capabilities (NM_AGENT_MANAGER (obj), invocation, identifier, capabilities);
+}
+
+static void
+impl_agent_manager_unregister (NMDBusObject *obj,
+                               const NMDBusInterfaceInfoExtended *interface_info,
+                               const NMDBusMethodInfoExtended *method_info,
+                               GDBusConnection *connection,
+                               const char *sender,
+                               GDBusMethodInvocation *invocation,
+                               GVariant *parameters)
+{
+	NMAgentManager *self = NM_AGENT_MANAGER (obj);
 
-	/* Found the agent, unregister and remove it */
 	if (!remove_agent (self, sender)) {
-		error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
-		                             NM_AGENT_MANAGER_ERROR_NOT_REGISTERED,
-		                             "Caller is not registered as an Agent");
-		goto done;
+		g_dbus_method_invocation_return_error_literal (invocation,
+		                                               NM_AGENT_MANAGER_ERROR,
+		                                               NM_AGENT_MANAGER_ERROR_NOT_REGISTERED,
+		                                               "Caller is not registered as an Agent");
+		return;
 	}
 
-	g_dbus_method_invocation_return_value (context, NULL);
-
-done:
-	if (error)
-		g_dbus_method_invocation_take_error (context, error);
-	g_free (sender);
+	g_dbus_method_invocation_return_value (invocation, NULL);
 }
 
 /*****************************************************************************/
@@ -530,7 +539,7 @@ request_free (Request *req)
 		g_object_unref (req->con.connection);
 		g_free (req->con.path);
 		if (req->con.chain)
-			nm_auth_chain_unref (req->con.chain);
+			nm_auth_chain_destroy (req->con.chain);
 		if (req->request_type == REQUEST_TYPE_CON_GET) {
 			g_free (req->con.get.setting_name);
 			g_strfreev (req->con.get.hints);
@@ -801,7 +810,7 @@ request_remove_agent (Request *req, NMSecretAgent *agent)
 		case REQUEST_TYPE_CON_DEL:
 			if (req->con.chain) {
 				/* This cancels the pending authorization requests. */
-				nm_auth_chain_unref (req->con.chain);
+				nm_auth_chain_destroy (req->con.chain);
 				req->con.chain = NULL;
 			}
 			break;
@@ -1038,7 +1047,7 @@ _con_get_request_start_validated (NMAuthChain *chain,
 		_con_get_request_start_proceed (req, req->con.current_has_modify);
 	}
 
-	nm_auth_chain_unref (chain);
+	nm_auth_chain_destroy (chain);
 }
 
 static void
@@ -1532,7 +1541,7 @@ agent_permissions_changed_done (NMAuthChain *chain,
 	nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, share_protected);
 	nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, share_open);
 
-	nm_auth_chain_unref (chain);
+	nm_auth_chain_destroy (chain);
 }
 
 static void
@@ -1586,7 +1595,7 @@ constructed (GObject *object)
 	priv->auth_mgr = g_object_ref (nm_auth_manager_get ());
 	priv->session_monitor = g_object_ref (nm_session_monitor_get ());
 
-	nm_exported_object_export (NM_EXPORTED_OBJECT (object));
+	nm_dbus_object_export (NM_DBUS_OBJECT (object));
 
 	g_signal_connect (priv->auth_mgr,
 	                  NM_AUTH_MANAGER_SIGNAL_CHANGED,
@@ -1607,7 +1616,7 @@ cancel_more:
 		goto cancel_more;
 	}
 
-	g_slist_free_full (priv->chains, (GDestroyNotify) nm_auth_chain_unref);
+	g_slist_free_full (priv->chains, (GDestroyNotify) nm_auth_chain_destroy);
 	priv->chains = NULL;
 
 	if (priv->agents) {
@@ -1622,20 +1631,64 @@ cancel_more:
 		g_clear_object (&priv->auth_mgr);
 	}
 
-	nm_exported_object_unexport (NM_EXPORTED_OBJECT (object));
+	nm_dbus_object_unexport (NM_DBUS_OBJECT (object));
 
 	g_clear_object (&priv->session_monitor);
 
 	G_OBJECT_CLASS (nm_agent_manager_parent_class)->dispose (object);
 }
 
+static const NMDBusInterfaceInfoExtended interface_info_agent_manager = {
+	.parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT (
+		NM_DBUS_INTERFACE_AGENT_MANAGER,
+		.methods = NM_DEFINE_GDBUS_METHOD_INFOS (
+			NM_DEFINE_DBUS_METHOD_INFO_EXTENDED (
+				NM_DEFINE_GDBUS_METHOD_INFO_INIT (
+					"Register",
+					.in_args = NM_DEFINE_GDBUS_ARG_INFOS (
+						NM_DEFINE_GDBUS_ARG_INFO ("identifier", "s"),
+					),
+				),
+				.handle = impl_agent_manager_register,
+			),
+			NM_DEFINE_DBUS_METHOD_INFO_EXTENDED (
+				NM_DEFINE_GDBUS_METHOD_INFO_INIT (
+					"RegisterWithCapabilities",
+					.in_args = NM_DEFINE_GDBUS_ARG_INFOS (
+						NM_DEFINE_GDBUS_ARG_INFO ("identifier",   "s"),
+						NM_DEFINE_GDBUS_ARG_INFO ("capabilities", "u"),
+					),
+				),
+				.handle = impl_agent_manager_register_with_capabilities,
+			),
+			NM_DEFINE_DBUS_METHOD_INFO_EXTENDED (
+				NM_DEFINE_GDBUS_METHOD_INFO_INIT (
+					"RegisterWithCapabilities",
+					.in_args = NM_DEFINE_GDBUS_ARG_INFOS (
+						NM_DEFINE_GDBUS_ARG_INFO ("identifier",   "s"),
+						NM_DEFINE_GDBUS_ARG_INFO ("capabilities", "u"),
+					),
+				),
+				.handle = impl_agent_manager_register_with_capabilities,
+			),
+			NM_DEFINE_DBUS_METHOD_INFO_EXTENDED (
+				NM_DEFINE_GDBUS_METHOD_INFO_INIT (
+					"Unregister",
+				),
+				.handle = impl_agent_manager_unregister,
+			),
+		),
+	),
+};
+
 static void
 nm_agent_manager_class_init (NMAgentManagerClass *agent_manager_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (agent_manager_class);
-	NMExportedObjectClass *exported_object_class = NM_EXPORTED_OBJECT_CLASS (agent_manager_class);
+	NMDBusObjectClass *dbus_object_class = NM_DBUS_OBJECT_CLASS (agent_manager_class);
 
-	exported_object_class->export_path = NM_DBUS_PATH_AGENT_MANAGER;
+	dbus_object_class->export_path = NM_DBUS_EXPORT_PATH_STATIC (NM_DBUS_PATH_AGENT_MANAGER);
+	dbus_object_class->interface_infos = NM_DBUS_INTERFACE_INFOS (&interface_info_agent_manager);
 
 	object_class->constructed = constructed;
 	object_class->dispose = dispose;
@@ -1649,11 +1702,4 @@ nm_agent_manager_class_init (NMAgentManagerClass *agent_manager_class)
 	                  g_cclosure_marshal_VOID__OBJECT,
 	                  G_TYPE_NONE, 1,
 	                  G_TYPE_OBJECT);
-
-	nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (agent_manager_class),
-	                                        NMDBUS_TYPE_AGENT_MANAGER_SKELETON,
-	                                        "Register", impl_agent_manager_register,
-	                                        "RegisterWithCapabilities", impl_agent_manager_register_with_capabilities,
-	                                        "Unregister", impl_agent_manager_unregister,
-	                                        NULL);
 }