summary refs log tree commit diff
path: root/src/settings/nm-agent-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings/nm-agent-manager.c')
-rw-r--r--src/settings/nm-agent-manager.c153
1 files changed, 81 insertions, 72 deletions
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c
index 54ca2f55..0db20979 100644
--- a/src/settings/nm-agent-manager.c
+++ b/src/settings/nm-agent-manager.c
@@ -30,7 +30,6 @@
 #include "nm-secret-agent.h"
 #include "nm-auth-utils.h"
 #include "nm-setting-vpn.h"
-#include "nm-enum-types.h"
 #include "nm-auth-manager.h"
 #include "nm-bus-manager.h"
 #include "nm-session-monitor.h"
@@ -38,9 +37,49 @@
 #include "NetworkManagerUtils.h"
 #include "nm-core-internal.h"
 
-#include "nmdbus-agent-manager.h"
+#include "introspection/org.freedesktop.NetworkManager.AgentManager.h"
 
-NM_DEFINE_SINGLETON_INSTANCE (NMAgentManager);
+/*****************************************************************************/
+
+enum {
+	AGENT_REGISTERED,
+	LAST_SIGNAL,
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+typedef struct {
+	NMAuthManager *auth_mgr;
+
+	/* Auth chains for checking agent permissions */
+	GSList *chains;
+
+	/* Hashed by owner name, not identifier, since two agents in different
+	 * sessions can use the same identifier.
+	 */
+	GHashTable *agents;
+
+	GHashTable *requests;
+} NMAgentManagerPrivate;
+
+struct _NMAgentManager {
+	NMExportedObject parent;
+	NMAgentManagerPrivate _priv;
+};
+
+struct _NMAgentManagerClass {
+	NMExportedObjectClass parent;
+};
+
+G_DEFINE_TYPE (NMAgentManager, nm_agent_manager, NM_TYPE_EXPORTED_OBJECT)
+
+#define NM_AGENT_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMAgentManager, NM_IS_AGENT_MANAGER)
+
+/*****************************************************************************/
+
+NM_DEFINE_SINGLETON_GETTER (NMAgentManager, nm_agent_manager_get, NM_TYPE_AGENT_MANAGER);
+
+/*****************************************************************************/
 
 #define _NMLOG_PREFIX_NAME    "agent-manager"
 #define _NMLOG_DOMAIN         LOGD_AGENTS
@@ -78,6 +117,24 @@ NM_DEFINE_SINGLETON_INSTANCE (NMAgentManager);
 	                     "/\"", (req)->con.get.setting_name, "\"", \
 	                     ((req)->request_type == REQUEST_TYPE_CON_GET ? "/(none)" : _request_type_to_string ((req)->request_type, FALSE)))
 
+/*****************************************************************************/
+
+typedef struct _NMAgentManagerCallId Request;
+
+static void request_add_agent (Request *req, NMSecretAgent *agent);
+
+static void request_remove_agent (Request *req, NMSecretAgent *agent, GSList **pending_reqs);
+
+static void request_next_agent (Request *req);
+
+static void _con_get_request_start (Request *req);
+static void _con_save_request_start (Request *req);
+static void _con_del_request_start (Request *req);
+
+static gboolean _con_get_try_complete_early (Request *req);
+
+/*****************************************************************************/
+
 typedef enum {
 	REQUEST_TYPE_INVALID,
 	REQUEST_TYPE_CON_GET,
@@ -96,49 +153,7 @@ _request_type_to_string (RequestType request_type, gboolean verbose)
 	}
 }
 
-G_DEFINE_TYPE (NMAgentManager, nm_agent_manager, NM_TYPE_EXPORTED_OBJECT)
-
-#define NM_AGENT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
-                                         NM_TYPE_AGENT_MANAGER, \
-                                         NMAgentManagerPrivate))
-
-typedef struct {
-	NMAuthManager *auth_mgr;
-
-	/* Auth chains for checking agent permissions */
-	GSList *chains;
-
-	/* Hashed by owner name, not identifier, since two agents in different
-	 * sessions can use the same identifier.
-	 */
-	GHashTable *agents;
-
-	GHashTable *requests;
-} NMAgentManagerPrivate;
-
-enum {
-        AGENT_REGISTERED,
-
-        LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-typedef struct _NMAgentManagerCallId Request;
-
-static void request_add_agent (Request *req, NMSecretAgent *agent);
-
-static void request_remove_agent (Request *req, NMSecretAgent *agent, GSList **pending_reqs);
-
-static void request_next_agent (Request *req);
-
-static void _con_get_request_start (Request *req);
-static void _con_save_request_start (Request *req);
-static void _con_del_request_start (Request *req);
-
-static gboolean _con_get_try_complete_early (Request *req);
-
-/*************************************************************/
+/*****************************************************************************/
 
 static gboolean
 remove_agent (NMAgentManager *self, const char *owner)
@@ -186,7 +201,7 @@ maybe_remove_agent_on_error (NMSecretAgent *agent,
 		remove_agent (nm_agent_manager_get (), nm_secret_agent_get_dbus_owner (agent));
 }
 
-/*************************************************************/
+/*****************************************************************************/
 
 static gboolean
 validate_identifier (const char *identifier, GError **error)
@@ -433,7 +448,7 @@ done:
 	g_free (sender);
 }
 
-/*************************************************************/
+/*****************************************************************************/
 
 struct _NMAgentManagerCallId {
 	NMAgentManager *self;
@@ -582,7 +597,7 @@ req_complete_cancel (Request *req, gboolean is_disposing)
 	gs_free_error GError *error = NULL;
 
 	nm_assert (req && req->self);
-	nm_assert (!g_hash_table_contains (NM_AGENT_MANAGER_GET_PRIVATE (req->self)->requests, req));
+	nm_assert (!g_hash_table_contains (req->self->_priv.requests, req));
 
 	nm_utils_error_set_cancelled (&error, is_disposing, "NMAgentManager");
 	req_complete_release (req, NULL, NULL, NULL, error);
@@ -815,7 +830,7 @@ out:
 	return FALSE;
 }
 
-/*************************************************************/
+/*****************************************************************************/
 
 static void
 _con_get_request_done (NMSecretAgent *agent,
@@ -1263,7 +1278,7 @@ nm_agent_manager_cancel_secrets (NMAgentManager *self,
 	req_complete_cancel (request_id, FALSE);
 }
 
-/*************************************************************/
+/*****************************************************************************/
 
 static void
 _con_save_request_done (NMSecretAgent *agent,
@@ -1352,7 +1367,7 @@ nm_agent_manager_save_secrets (NMAgentManager *self,
 	req->idle_id = g_idle_add (request_start, req);
 }
 
-/*************************************************************/
+/*****************************************************************************/
 
 static void
 _con_del_request_done (NMSecretAgent *agent,
@@ -1440,7 +1455,7 @@ nm_agent_manager_delete_secrets (NMAgentManager *self,
 	req->idle_id = g_idle_add (request_start, req);
 }
 
-/*************************************************************/
+/*****************************************************************************/
 
 NMSecretAgent *
 nm_agent_manager_get_agent_by_user (NMAgentManager *self, const char *username)
@@ -1458,7 +1473,7 @@ nm_agent_manager_get_agent_by_user (NMAgentManager *self, const char *username)
 	return NULL;
 }
 
-/*************************************************************/
+/*****************************************************************************/
 
 gboolean
 nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
@@ -1484,7 +1499,7 @@ nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
 	return TRUE;
 }
 
-/*************************************************************/
+/*****************************************************************************/
 
 static void
 agent_permissions_changed_done (NMAuthChain *chain,
@@ -1548,9 +1563,7 @@ authority_changed_cb (NMAuthManager *auth_manager, NMAgentManager *self)
 	}
 }
 
-/*************************************************************/
-
-NM_DEFINE_SINGLETON_GETTER (NMAgentManager, nm_agent_manager_get, NM_TYPE_AGENT_MANAGER);
+/*****************************************************************************/
 
 static void
 nm_agent_manager_init (NMAgentManager *self)
@@ -1564,7 +1577,7 @@ nm_agent_manager_init (NMAgentManager *self)
 static void
 constructed (GObject *object)
 {
-	NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (object);
+	NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE ((NMAgentManager *) object);
 
 	G_OBJECT_CLASS (nm_agent_manager_parent_class)->constructed (object);
 
@@ -1583,7 +1596,7 @@ constructed (GObject *object)
 static void
 dispose (GObject *object)
 {
-	NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (object);
+	NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE ((NMAgentManager *) object);
 
 	if (priv->requests) {
 		GHashTableIter iter;
@@ -1626,24 +1639,20 @@ 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);
 
-	g_type_class_add_private (agent_manager_class, sizeof (NMAgentManagerPrivate));
-
 	exported_object_class->export_path = NM_DBUS_PATH_AGENT_MANAGER;
 
-	/* virtual methods */
 	object_class->constructed = constructed;
 	object_class->dispose = dispose;
 
-	/* Signals */
 	signals[AGENT_REGISTERED] =
-		g_signal_new ("agent-registered",
-		              G_OBJECT_CLASS_TYPE (object_class),
-		              G_SIGNAL_RUN_FIRST,
-		              G_STRUCT_OFFSET (NMAgentManagerClass, agent_registered),
-		              NULL, NULL,
-		              g_cclosure_marshal_VOID__OBJECT,
-		              G_TYPE_NONE, 1,
-		              G_TYPE_OBJECT);
+	    g_signal_new ("agent-registered",
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  0,
+	                  NULL, NULL,
+	                  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,