summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2017-06-02 18:05:36 +0200
committerLubomir Rintel <lkundrak@v3.sk>2017-06-02 20:53:24 +0200
commite90fba3a452233e0bdea51fc6b8538de172363ab (patch)
treec32a20c8970a289501cbe81a534fe00410c5a826
parent9fbc789d637505621739f4795cd4977c67b67493 (diff)
downloadNetworkManager-e90fba3a452233e0bdea51fc6b8538de172363ab.tar.gz
secret-agent: use the NMAgent interface
-rw-r--r--src/nm-types.h1
-rw-r--r--src/settings/nm-agent-manager.c125
-rw-r--r--src/settings/nm-agent-manager.h4
-rw-r--r--src/settings/nm-secret-agent.c166
-rw-r--r--src/settings/nm-secret-agent.h60
-rw-r--r--src/settings/nm-settings-connection.c4
6 files changed, 156 insertions, 204 deletions
diff --git a/src/nm-types.h b/src/nm-types.h
index 44b4fecbb3..cd511ce09c 100644
--- a/src/nm-types.h
+++ b/src/nm-types.h
@@ -197,7 +197,6 @@ typedef enum {
/* settings */
typedef struct _NMAgentManager NMAgentManager;
-typedef struct _NMSecretAgent NMSecretAgent;
typedef struct _NMSettings NMSettings;
typedef struct _NMSettingsConnection NMSettingsConnection;
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c
index 137f40329f..a87456d05b 100644
--- a/src/settings/nm-agent-manager.c
+++ b/src/settings/nm-agent-manager.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2010 - 2013 Red Hat, Inc.
+ * Copyright (C) 2010 - 2017 Red Hat, Inc.
*/
#include "nm-default.h"
@@ -27,6 +27,7 @@
#include "nm-common-macros.h"
#include "nm-dbus-interface.h"
+#include "nm-agent.h"
#include "nm-secret-agent.h"
#include "nm-auth-utils.h"
#include "nm-setting-vpn.h"
@@ -90,7 +91,7 @@ NM_DEFINE_SINGLETON_GETTER (NMAgentManager, nm_agent_manager_get, NM_TYPE_AGENT_
if (nm_logging_enabled ((level), (_NMLOG_DOMAIN))) { \
char __prefix1[32]; \
char __prefix2[128]; \
- NMSecretAgent *__agent = (agent); \
+ NMAgent *__agent = (agent); \
\
if (!(self)) \
g_snprintf (__prefix1, sizeof (__prefix1), "%s%s", ""_NMLOG_PREFIX_NAME"", "[]"); \
@@ -102,7 +103,7 @@ NM_DEFINE_SINGLETON_GETTER (NMAgentManager, nm_agent_manager_get, NM_TYPE_AGENT_
g_snprintf (__prefix2, sizeof (__prefix2), \
": req[%p, %s]", \
__agent, \
- nm_secret_agent_get_description (__agent)); \
+ nm_agent_get_description (__agent)); \
} else \
__prefix2[0] = '\0'; \
_nm_log ((level), (_NMLOG_DOMAIN), 0, NULL, NULL, \
@@ -123,9 +124,9 @@ NM_DEFINE_SINGLETON_GETTER (NMAgentManager, nm_agent_manager_get, NM_TYPE_AGENT_
typedef struct _NMAgentManagerCallId Request;
-static void request_add_agent (Request *req, NMSecretAgent *agent);
+static void request_add_agent (Request *req, NMAgent *agent);
-static void request_remove_agent (Request *req, NMSecretAgent *agent);
+static void request_remove_agent (Request *req, NMAgent *agent);
static void request_next_agent (Request *req);
@@ -169,10 +170,10 @@ struct _NMAgentManagerCallId {
NMAuthSubject *subject;
/* Current agent being asked for secrets */
- NMSecretAgent *current;
- NMSecretAgentCallId current_call_id;
+ NMAgent *current;
+ NMAgentCallId current_call_id;
- /* Stores the sorted list of NMSecretAgents which will be asked for secrets */
+ /* Stores the sorted list of NMAgents which will be asked for secrets */
GSList *pending;
guint idle_id;
@@ -211,7 +212,7 @@ static gboolean
remove_agent (NMAgentManager *self, const char *owner)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
- NMSecretAgent *agent;
+ NMAgent *agent;
CList *iter, *safe;
g_return_val_if_fail (owner != NULL, FALSE);
@@ -234,13 +235,13 @@ remove_agent (NMAgentManager *self, const char *owner)
/* Call this *after* calling request_next_agent() */
static void
-maybe_remove_agent_on_error (NMSecretAgent *agent,
+maybe_remove_agent_on_error (NMAgent *agent,
GError *error)
{
if ( g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CLOSED)
|| g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_DISCONNECTED)
|| g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_NAME_HAS_NO_OWNER))
- remove_agent (nm_agent_manager_get (), nm_secret_agent_get_dbus_owner (agent));
+ remove_agent (nm_agent_manager_get (), nm_agent_get_dbus_owner (agent));
}
/*****************************************************************************/
@@ -308,7 +309,7 @@ agent_register_permissions_done (NMAuthChain *chain,
{
NMAgentManager *self = NM_AGENT_MANAGER (user_data);
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
- NMSecretAgent *agent;
+ NMAgent *agent;
const char *sender;
GError *local = NULL;
NMAuthCallResult result;
@@ -330,13 +331,13 @@ agent_register_permissions_done (NMAuthChain *chain,
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED);
if (result == NM_AUTH_CALL_RESULT_YES)
- nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, TRUE);
+ nm_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, TRUE);
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN);
if (result == NM_AUTH_CALL_RESULT_YES)
- nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, TRUE);
+ nm_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, TRUE);
- sender = nm_secret_agent_get_dbus_owner (agent);
+ sender = nm_agent_get_dbus_owner (agent);
g_hash_table_insert (priv->agents, g_strdup (sender), agent);
_LOGD (agent, "agent registered");
g_dbus_method_invocation_return_value (context, NULL);
@@ -352,30 +353,30 @@ agent_register_permissions_done (NMAuthChain *chain,
nm_auth_chain_unref (chain);
}
-static NMSecretAgent *
+static NMAgent *
find_agent_by_identifier_and_uid (NMAgentManager *self,
const char *identifier,
gulong sender_uid)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
GHashTableIter iter;
- NMSecretAgent *agent;
+ NMAgent *agent;
g_hash_table_iter_init (&iter, priv->agents);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) {
- if ( g_strcmp0 (nm_secret_agent_get_identifier (agent), identifier) == 0
- && nm_secret_agent_get_owner_uid (agent) == sender_uid)
+ if ( g_strcmp0 (nm_agent_get_identifier (agent), identifier) == 0
+ && nm_agent_get_owner_uid (agent) == sender_uid)
return agent;
}
return NULL;
}
static void
-agent_disconnected_cb (NMSecretAgent *agent, gpointer user_data)
+agent_disconnected_cb (NMAgent *agent, gpointer user_data)
{
/* The agent quit, so remove it and let interested clients know */
remove_agent (NM_AGENT_MANAGER (user_data),
- nm_secret_agent_get_dbus_owner (agent));
+ nm_agent_get_dbus_owner (agent));
}
static void
@@ -388,7 +389,7 @@ impl_agent_manager_register_with_capabilities (NMAgentManager *self,
NMAuthSubject *subject;
gulong sender_uid = G_MAXULONG;
GError *error = NULL;
- NMSecretAgent *agent;
+ NMAgent *agent;
NMAuthChain *chain;
subject = nm_auth_subject_new_unix_process_from_context (context);
@@ -413,7 +414,7 @@ impl_agent_manager_register_with_capabilities (NMAgentManager *self,
}
/* Success, add the new agent */
- agent = nm_secret_agent_new (context, subject, identifier, capabilities);
+ agent = NM_AGENT (nm_secret_agent_new (context, subject, identifier, capabilities));
if (!agent) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_FAILED,
@@ -536,7 +537,7 @@ request_free (Request *req)
/* cancel-secrets invokes the done-callback synchronously -- in which case
* the handler just return.
* Hence, we can proceed to free @req... */
- nm_secret_agent_cancel_secrets (req->current, req->current_call_id);
+ nm_agent_cancel_secrets (req->current, req->current_call_id);
}
g_object_unref (req->subject);
@@ -623,8 +624,8 @@ req_complete_error (Request *req, GError *error)
static gint
agent_compare_func (gconstpointer aa, gconstpointer bb, gpointer user_data)
{
- NMSecretAgent *a = (NMSecretAgent *)aa;
- NMSecretAgent *b = (NMSecretAgent *)bb;
+ NMAgent *a = (NMAgent *)aa;
+ NMAgent *b = (NMAgent *)bb;
Request *req = user_data;
NMSessionMonitor *sm;
gboolean a_active, b_active;
@@ -633,8 +634,8 @@ agent_compare_func (gconstpointer aa, gconstpointer bb, gpointer user_data)
/* Prefer agents in the process the request came from */
if (nm_auth_subject_is_unix_process (req->subject)) {
requester = nm_auth_subject_get_unix_process_pid (req->subject);
- a_pid = nm_secret_agent_get_pid (a);
- b_pid = nm_secret_agent_get_pid (b);
+ a_pid = nm_agent_get_pid (a);
+ b_pid = nm_agent_get_pid (b);
if (a_pid != b_pid) {
if (a_pid == requester)
@@ -646,8 +647,8 @@ agent_compare_func (gconstpointer aa, gconstpointer bb, gpointer user_data)
/* Prefer agents in active sessions */
sm = NM_AGENT_MANAGER_GET_PRIVATE (req->self)->session_monitor;
- a_active = nm_session_monitor_session_exists (sm, nm_secret_agent_get_owner_uid (a), TRUE);
- b_active = nm_session_monitor_session_exists (sm, nm_secret_agent_get_owner_uid (b), TRUE);
+ a_active = nm_session_monitor_session_exists (sm, nm_agent_get_owner_uid (a), TRUE);
+ b_active = nm_session_monitor_session_exists (sm, nm_agent_get_owner_uid (b), TRUE);
if (a_active && !b_active)
return -1;
else if (a_active == b_active)
@@ -659,7 +660,7 @@ agent_compare_func (gconstpointer aa, gconstpointer bb, gpointer user_data)
}
static void
-request_add_agent (Request *req, NMSecretAgent *agent)
+request_add_agent (Request *req, NMAgent *agent)
{
NMAgentManager *self;
@@ -669,7 +670,7 @@ request_add_agent (Request *req, NMSecretAgent *agent)
self = req->self;
if (req->request_type == REQUEST_TYPE_CON_GET) {
- NMAuthSubject *subject = nm_secret_agent_get_subject (agent);
+ NMAuthSubject *subject = nm_agent_get_subject (agent);
/* Ensure the caller's username exists in the connection's permissions,
* or that the permissions is empty (ie, visible by everyone).
@@ -686,7 +687,7 @@ request_add_agent (Request *req, NMSecretAgent *agent)
if (nm_auth_subject_is_unix_process (req->subject)) {
uid_t agent_uid, subject_uid;
- agent_uid = nm_secret_agent_get_owner_uid (agent);
+ agent_uid = nm_agent_get_owner_uid (agent);
subject_uid = nm_auth_subject_get_unix_process_uid (req->subject);
if (agent_uid != subject_uid) {
_LOGD (agent, "agent ignored for secrets request "LOG_REQ_FMT" "
@@ -716,7 +717,7 @@ request_add_agents (NMAgentManager *self, Request *req)
g_hash_table_iter_init (&iter, priv->agents);
while (g_hash_table_iter_next (&iter, NULL, &data))
- request_add_agent (req, NM_SECRET_AGENT (data));
+ request_add_agent (req, NM_AGENT (data));
}
static void
@@ -729,7 +730,7 @@ request_next_agent (Request *req)
if (req->current) {
if (req->current_call_id)
- nm_secret_agent_cancel_secrets (req->current, req->current_call_id);
+ nm_agent_cancel_secrets (req->current, req->current_call_id);
g_clear_object (&req->current);
}
nm_assert (!req->current_call_id);
@@ -767,7 +768,7 @@ request_next_agent (Request *req)
}
static void
-request_remove_agent (Request *req, NMSecretAgent *agent)
+request_remove_agent (Request *req, NMAgent *agent)
{
NMAgentManager *self;
@@ -831,8 +832,8 @@ out:
/*****************************************************************************/
static void
-_con_get_request_done (NMSecretAgent *agent,
- NMSecretAgentCallId call_id,
+_con_get_request_done (NMAgent *agent,
+ NMAgentCallId call_id,
GVariant *secrets,
GError *error,
gpointer user_data)
@@ -872,7 +873,7 @@ _con_get_request_done (NMSecretAgent *agent,
} else {
if (req->current_call_id) {
/* Tell the failed agent we're no longer interested. */
- nm_secret_agent_cancel_secrets (req->current, req->current_call_id);
+ nm_agent_cancel_secrets (req->current, req->current_call_id);
}
/* Try the next agent */
@@ -896,14 +897,14 @@ _con_get_request_done (NMSecretAgent *agent,
LOG_REQ_ARG (req));
/* Get the agent's username */
- pw = getpwuid (nm_secret_agent_get_owner_uid (agent));
+ pw = getpwuid (nm_agent_get_owner_uid (agent));
if (pw && strlen (pw->pw_name)) {
/* Needs to be UTF-8 valid since it may be pushed through D-Bus */
if (g_utf8_validate (pw->pw_name, -1, NULL))
agent_uname = g_strdup (pw->pw_name);
}
- agent_dbus_owner = nm_secret_agent_get_dbus_owner (agent);
+ agent_dbus_owner = nm_agent_get_dbus_owner (agent);
req_complete (req, secrets, agent_dbus_owner, agent_uname, NULL);
g_free (agent_uname);
}
@@ -970,7 +971,7 @@ _con_get_request_start_proceed (Request *req, gboolean include_system_secrets)
set_secrets_not_required (tmp, req->con.get.existing_secrets);
}
- req->current_call_id = nm_secret_agent_get_secrets (req->current,
+ req->current_call_id = nm_agent_get_secrets (req->current,
req->con.path,
tmp,
req->con.get.setting_name,
@@ -1082,7 +1083,7 @@ _con_get_request_start (Request *req)
req->con.current_has_modify = FALSE;
- agent_dbus_owner = nm_secret_agent_get_dbus_owner (req->current);
+ agent_dbus_owner = nm_agent_get_dbus_owner (req->current);
/* If the request flags allow user interaction, and there are existing
* system secrets (or blank secrets that are supposed to be system-owned),
@@ -1095,7 +1096,7 @@ _con_get_request_start (Request *req)
_LOGD (NULL, "("LOG_REQ_FMT") request has system secrets; checking agent %s for MODIFY",
LOG_REQ_ARG (req), agent_dbus_owner);
- req->con.chain = nm_auth_chain_new_subject (nm_secret_agent_get_subject (req->current),
+ req->con.chain = nm_auth_chain_new_subject (nm_agent_get_subject (req->current),
NULL,
_con_get_request_start_validated,
req);
@@ -1275,8 +1276,8 @@ nm_agent_manager_cancel_secrets (NMAgentManager *self,
/*****************************************************************************/
static void
-_con_save_request_done (NMSecretAgent *agent,
- NMSecretAgentCallId call_id,
+_con_save_request_done (NMAgent *agent,
+ NMAgentCallId call_id,
GVariant *secrets,
GError *error,
gpointer user_data)
@@ -1311,14 +1312,14 @@ _con_save_request_done (NMSecretAgent *agent,
_LOGD (agent, "agent saved secrets for request "LOG_REQ_FMT,
LOG_REQ_ARG (req));
- agent_dbus_owner = nm_secret_agent_get_dbus_owner (agent);
+ agent_dbus_owner = nm_agent_get_dbus_owner (agent);
req_complete (req, NULL, NULL, agent_dbus_owner, NULL);
}
static void
_con_save_request_start (Request *req)
{
- req->current_call_id = nm_secret_agent_save_secrets (req->current,
+ req->current_call_id = nm_agent_save_secrets (req->current,
req->con.path,
req->con.connection,
_con_save_request_done,
@@ -1361,8 +1362,8 @@ nm_agent_manager_save_secrets (NMAgentManager *self,
/*****************************************************************************/
static void
-_con_del_request_done (NMSecretAgent *agent,
- NMSecretAgentCallId call_id,
+_con_del_request_done (NMAgent *agent,
+ NMAgentCallId call_id,
GVariant *secrets,
GError *error,
gpointer user_data)
@@ -1401,7 +1402,7 @@ _con_del_request_done (NMSecretAgent *agent,
static void
_con_del_request_start (Request *req)
{
- req->current_call_id = nm_secret_agent_delete_secrets (req->current,
+ req->current_call_id = nm_agent_delete_secrets (req->current,
req->con.path,
req->con.connection,
_con_del_request_done,
@@ -1445,16 +1446,16 @@ nm_agent_manager_delete_secrets (NMAgentManager *self,
/*****************************************************************************/
-NMSecretAgent *
+NMAgent *
nm_agent_manager_get_agent_by_user (NMAgentManager *self, const char *username)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
GHashTableIter iter;
- NMSecretAgent *agent;
+ NMAgent *agent;
g_hash_table_iter_init (&iter, priv->agents);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) {
- if (g_strcmp0 (nm_secret_agent_get_owner_username (agent), username) == 0)
+ if (g_strcmp0 (nm_agent_get_owner_username (agent), username) == 0)
return agent;
}
@@ -1470,17 +1471,17 @@ nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (manager);
GHashTableIter iter;
- NMSecretAgent *agent;
+ NMAgent *agent;
gboolean subject_is_unix_process = nm_auth_subject_is_unix_process (subject);
gulong subject_uid = subject_is_unix_process ? nm_auth_subject_get_unix_process_uid (subject) : 0;
g_hash_table_iter_init (&iter, priv->agents);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) {
if ( subject_is_unix_process
- && nm_secret_agent_get_owner_uid (agent) != subject_uid)
+ && nm_agent_get_owner_uid (agent) != subject_uid)
continue;
- if (!(nm_secret_agent_get_capabilities (agent) & capability))
+ if (!(nm_agent_get_capabilities (agent) & capability))
return FALSE;
}
@@ -1497,7 +1498,7 @@ agent_permissions_changed_done (NMAuthChain *chain,
{
NMAgentManager *self = NM_AGENT_MANAGER (user_data);
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
- NMSecretAgent *agent;
+ NMAgent *agent;
gboolean share_protected = FALSE, share_open = FALSE;
priv->chains = g_slist_remove (priv->chains, chain);
@@ -1516,8 +1517,8 @@ agent_permissions_changed_done (NMAuthChain *chain,
share_open = TRUE;
}
- 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_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, share_protected);
+ nm_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, share_open);
nm_auth_chain_unref (chain);
}
@@ -1527,7 +1528,7 @@ authority_changed_cb (NMAuthManager *auth_manager, NMAgentManager *self)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
GHashTableIter iter;
- NMSecretAgent *agent;
+ NMAgent *agent;
/* Recheck the permissions of all secret agents */
g_hash_table_iter_init (&iter, priv->agents);
@@ -1535,7 +1536,7 @@ authority_changed_cb (NMAuthManager *auth_manager, NMAgentManager *self)
NMAuthChain *chain;
/* Kick off permissions requests for this agent */
- chain = nm_auth_chain_new_subject (nm_secret_agent_get_subject (agent),
+ chain = nm_auth_chain_new_subject (nm_agent_get_subject (agent),
NULL,
agent_permissions_changed_done,
self);
diff --git a/src/settings/nm-agent-manager.h b/src/settings/nm-agent-manager.h
index 7f8126935f..833f0c0c5f 100644
--- a/src/settings/nm-agent-manager.h
+++ b/src/settings/nm-agent-manager.h
@@ -76,8 +76,8 @@ void nm_agent_manager_delete_secrets (NMAgentManager *manager,
const char *path,
NMConnection *connection);
-NMSecretAgent *nm_agent_manager_get_agent_by_user (NMAgentManager *manager,
- const char *username);
+NMAgent *nm_agent_manager_get_agent_by_user (NMAgentManager *manager,
+ const char *username);
gboolean nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
NMAuthSubject *subject,
diff --git a/src/settings/nm-secret-agent.c b/src/settings/nm-secret-agent.c
index 5fe4dd1782..476df67b9b 100644
--- a/src/settings/nm-secret-agent.c
+++ b/src/settings/nm-secret-agent.c
@@ -36,13 +36,6 @@
/*****************************************************************************/
-enum {
- DISCONNECTED,
-
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
typedef struct {
char *description;
NMAuthSubject *subject;
@@ -71,7 +64,10 @@ struct _NMSecretAgentClass {
GObjectClass parent;
};
-G_DEFINE_TYPE (NMSecretAgent, nm_secret_agent, G_TYPE_OBJECT)
+static void nm_agent_interface_init (NMAgentInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (NMSecretAgent, nm_secret_agent, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_AGENT, nm_agent_interface_init))
#define NM_SECRET_AGENT_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMSecretAgent, NM_IS_SECRET_AGENT)
@@ -99,26 +95,26 @@ G_DEFINE_TYPE (NMSecretAgent, nm_secret_agent, G_TYPE_OBJECT)
/*****************************************************************************/
-struct _NMSecretAgentCallId {
+struct _NMAgentCallId {
CList lst;
- NMSecretAgent *agent;
+ NMAgent *agent;
GCancellable *cancellable;
char *path;
const char *dbus_command;
char *setting_name;
gboolean is_get_secrets;
- NMSecretAgentCallback callback;
+ NMAgentCallback callback;
gpointer callback_data;
};
-typedef struct _NMSecretAgentCallId Request;
+typedef struct _NMAgentCallId Request;
static Request *
-request_new (NMSecretAgent *self,
+request_new (NMAgent *self,
const char *dbus_command, /* this must be a static string. */
const char *path,
const char *setting_name,
- NMSecretAgentCallback callback,
+ NMAgentCallback callback,
gpointer callback_data)
{
Request *r;
@@ -131,7 +127,7 @@ request_new (NMSecretAgent *self,
r->callback = callback;
r->callback_data = callback_data;
r->cancellable = g_cancellable_new ();
- c_list_link_tail (&NM_SECRET_AGENT_GET_PRIVATE (self)->requests,
+ c_list_link_tail (&NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (self))->requests,
&r->lst);
_LOGt ("request "LOG_REQ_FMT": created", LOG_REQ_ARG (r));
return r;
@@ -141,7 +137,7 @@ request_new (NMSecretAgent *self,
static void
request_free (Request *r)
{
- NMSecretAgent *self = r->agent;
+ NMAgent *self = r->agent;
_LOGt ("request "LOG_REQ_FMT": destroyed", LOG_REQ_ARG (r));
c_list_unlink (&r->lst);
@@ -160,7 +156,7 @@ request_check_return (Request *r)
g_return_val_if_fail (NM_IS_SECRET_AGENT (r->agent), FALSE);
- nm_assert (c_list_contains (&NM_SECRET_AGENT_GET_PRIVATE (r->agent)->requests,
+ nm_assert (c_list_contains (&NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (r->agent))->requests,
&r->lst));
c_list_unlink_init (&r->lst);
@@ -179,14 +175,14 @@ _create_description (const char *dbus_owner, const char *identifier, gulong uid)
uid);
}
-const char *
-nm_secret_agent_get_description (NMSecretAgent *agent)
+static const char *
+nm_secret_agent_get_description (NMAgent *agent)
{
NMSecretAgentPrivate *priv;
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
- priv = NM_SECRET_AGENT_GET_PRIVATE (agent);
+ priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent));
if (!priv->description) {
priv->description = _create_description (priv->dbus_owner,
priv->identifier,
@@ -196,60 +192,60 @@ nm_secret_agent_get_description (NMSecretAgent *agent)
return priv->description;
}
-const char *
-nm_secret_agent_get_dbus_owner (NMSecretAgent *agent)
+static const char *
+nm_secret_agent_get_dbus_owner (NMAgent *agent)
{
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
- return NM_SECRET_AGENT_GET_PRIVATE (agent)->dbus_owner;
+ return NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent))->dbus_owner;
}
-const char *
-nm_secret_agent_get_identifier (NMSecretAgent *agent)
+static const char *
+nm_secret_agent_get_identifier (NMAgent *agent)
{
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
- return NM_SECRET_AGENT_GET_PRIVATE (agent)->identifier;
+ return NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent))->identifier;
}
-gulong
-nm_secret_agent_get_owner_uid (NMSecretAgent *agent)
+static gulong
+nm_secret_agent_get_owner_uid (NMAgent *agent)
{
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), G_MAXULONG);
- return nm_auth_subject_get_unix_process_uid (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
+ return nm_auth_subject_get_unix_process_uid (NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent))->subject);
}
-const char *
-nm_secret_agent_get_owner_username (NMSecretAgent *agent)
+static const char *
+nm_secret_agent_get_owner_username (NMAgent *agent)
{
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
- return NM_SECRET_AGENT_GET_PRIVATE (agent)->owner_username;
+ return NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent))->owner_username;
}
-gulong
-nm_secret_agent_get_pid (NMSecretAgent *agent)
+static gulong
+nm_secret_agent_get_pid (NMAgent *agent)
{
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), G_MAXULONG);
- return nm_auth_subject_get_unix_process_pid (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
+ return nm_auth_subject_get_unix_process_pid (NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent))->subject);
}
-NMSecretAgentCapabilities
-nm_secret_agent_get_capabilities (NMSecretAgent *agent)
+static NMSecretAgentCapabilities
+nm_secret_agent_get_capabilities (NMAgent *agent)
{
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NM_SECRET_AGENT_CAPABILITY_NONE);
- return NM_SECRET_AGENT_GET_PRIVATE (agent)->capabilities;
+ return NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent))->capabilities;
}
-NMAuthSubject *
-nm_secret_agent_get_subject (NMSecretAgent *agent)
+static NMAuthSubject *
+nm_secret_agent_get_subject (NMAgent *agent)
{
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
- return NM_SECRET_AGENT_GET_PRIVATE (agent)->subject;
+ return NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent))->subject;
}
/**
@@ -259,8 +255,8 @@ nm_secret_agent_get_subject (NMSecretAgent *agent)
*
* Records whether or not the agent has a given permission.
*/
-void
-nm_secret_agent_add_permission (NMSecretAgent *agent,
+static void
+nm_secret_agent_add_permission (NMAgent *agent,
const char *permission,
gboolean allowed)
{
@@ -270,7 +266,7 @@ nm_secret_agent_add_permission (NMSecretAgent *agent,
g_return_if_fail (agent != NULL);
g_return_if_fail (permission != NULL);
- priv = NM_SECRET_AGENT_GET_PRIVATE (agent);
+ priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent));
/* Check if the permission is already in the list */
for (iter = priv->permissions; iter; iter = g_slist_next (iter)) {
@@ -303,8 +299,8 @@ nm_secret_agent_add_permission (NMSecretAgent *agent,
* or if the permission was not previous recorded with
* nm_secret_agent_add_permission().
*/
-gboolean
-nm_secret_agent_has_permission (NMSecretAgent *agent, const char *permission)
+static gboolean
+nm_secret_agent_has_permission (NMAgent *agent, const char *permission)
{
NMSecretAgentPrivate *priv;
GSList *iter;
@@ -312,7 +308,7 @@ nm_secret_agent_has_permission (NMSecretAgent *agent, const char *permission)
g_return_val_if_fail (agent != NULL, FALSE);
g_return_val_if_fail (permission != NULL, FALSE);
- priv = NM_SECRET_AGENT_GET_PRIVATE (agent);
+ priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (agent));
/* Check if the permission is already in the list */
for (iter = priv->permissions; iter; iter = g_slist_next (iter)) {
@@ -332,7 +328,7 @@ get_callback (GObject *proxy,
Request *r = user_data;
if (request_check_return (r)) {
- NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (r->agent);
+ NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (r->agent));
gs_free_error GError *error = NULL;
gs_unref_variant GVariant *secrets = NULL;
@@ -345,14 +341,14 @@ get_callback (GObject *proxy,
request_free (r);
}
-NMSecretAgentCallId
-nm_secret_agent_get_secrets (NMSecretAgent *self,
+static NMAgentCallId
+nm_secret_agent_get_secrets (NMAgent *self,
const char *path,
NMConnection *connection,
const char *setting_name,
const char **hints,
NMSecretAgentGetSecretsFlags flags,
- NMSecretAgentCallback callback,
+ NMAgentCallback callback,
gpointer callback_data)
{
NMSecretAgentPrivate *priv;
@@ -365,7 +361,7 @@ nm_secret_agent_get_secrets (NMSecretAgent *self,
g_return_val_if_fail (path && *path, NULL);
g_return_val_if_fail (setting_name != NULL, NULL);
- priv = NM_SECRET_AGENT_GET_PRIVATE (self);
+ priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (self));
g_return_val_if_fail (priv->proxy != NULL, NULL);
dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
@@ -411,11 +407,11 @@ cancel_done (GObject *proxy, GAsyncResult *result, gpointer user_data)
}
static void
-do_cancel_secrets (NMSecretAgent *self, Request *r, gboolean disposing)
+do_cancel_secrets (NMAgent *self, Request *r, gboolean disposing)
{
- NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
+ NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (self));
GCancellable *cancellable;
- NMSecretAgentCallback callback;
+ NMAgentCallback callback;
gpointer callback_data;
g_return_if_fail (r->agent == self);
@@ -466,15 +462,15 @@ do_cancel_secrets (NMSecretAgent *self, Request *r, gboolean disposing)
* In case of nm_secret_agent_cancel_secrets() this will synchronously invoke the
* callback before nm_secret_agent_cancel_secrets() returns.
*/
-void
-nm_secret_agent_cancel_secrets (NMSecretAgent *self, NMSecretAgentCallId call_id)
+static void
+nm_secret_agent_cancel_secrets (NMAgent *self, NMAgentCallId call_id)
{
Request *r = call_id;
g_return_if_fail (NM_IS_SECRET_AGENT (self));
g_return_if_fail (r);
- nm_assert (c_list_contains (&NM_SECRET_AGENT_GET_PRIVATE (self)->requests,
+ nm_assert (c_list_contains (&NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (self))->requests,
&r->lst));
c_list_unlink_init (&r->lst);
@@ -492,7 +488,7 @@ agent_save_cb (GObject *proxy,
Request *r = user_data;
if (request_check_return (r)) {
- NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (r->agent);
+ NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (r->agent));
gs_free_error GError *error = NULL;
nmdbus_secret_agent_call_save_secrets_finish (priv->proxy, result, &error);
@@ -504,11 +500,11 @@ agent_save_cb (GObject *proxy,
request_free (r);
}
-NMSecretAgentCallId
-nm_secret_agent_save_secrets (NMSecretAgent *self,
+static NMAgentCallId
+nm_secret_agent_save_secrets (NMAgent *self,
const char *path,
NMConnection *connection,
- NMSecretAgentCallback callback,
+ NMAgentCallback callback,
gpointer callback_data)
{
NMSecretAgentPrivate *priv;
@@ -519,7 +515,7 @@ nm_secret_agent_save_secrets (NMSecretAgent *self,
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
g_return_val_if_fail (path && *path, NULL);
- priv = NM_SECRET_AGENT_GET_PRIVATE (self);
+ priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (self));
/* Caller should have ensured that only agent-owned secrets exist in 'connection' */
dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
@@ -544,7 +540,7 @@ agent_delete_cb (GObject *proxy,
Request *r = user_data;
if (request_check_return (r)) {
- NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (r->agent);
+ NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (r->agent));
gs_free_error GError *error = NULL;
nmdbus_secret_agent_call_delete_secrets_finish (priv->proxy, result, &error);
@@ -556,11 +552,11 @@ agent_delete_cb (GObject *proxy,
request_free (r);
}
-NMSecretAgentCallId
-nm_secret_agent_delete_secrets (NMSecretAgent *self,
+static NMAgentCallId
+nm_secret_agent_delete_secrets (NMAgent *self,
const char *path,
NMConnection *connection,
- NMSecretAgentCallback callback,
+ NMAgentCallback callback,
gpointer callback_data)
{
NMSecretAgentPrivate *priv;
@@ -571,7 +567,7 @@ nm_secret_agent_delete_secrets (NMSecretAgent *self,
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
g_return_val_if_fail (path && *path, NULL);
- priv = NM_SECRET_AGENT_GET_PRIVATE (self);
+ priv = NM_SECRET_AGENT_GET_PRIVATE (NM_SECRET_AGENT (self));
/* No secrets sent; agents must be smart enough to track secrets using the UUID or something */
dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_NO_SECRETS);
@@ -620,7 +616,7 @@ _on_disconnected_private_connection (NMBusManager *mgr,
_LOGt ("private connection disconnected");
_on_disconnected_cleanup (priv);
- g_signal_emit (self, signals[DISCONNECTED], 0);
+ g_signal_emit_by_name (self, NM_AGENT_DISCONNECTED, 0);
}
static void
@@ -648,7 +644,7 @@ _on_disconnected_name_owner_changed (GDBusConnection *connection,
if (!*new_owner) {
_on_disconnected_cleanup (priv);
- g_signal_emit (self, signals[DISCONNECTED], 0);
+ g_signal_emit_by_name (self, NM_AGENT_DISCONNECTED, 0);
}
}
@@ -743,6 +739,25 @@ nm_secret_agent_new (GDBusMethodInvocation *context,
}
static void
+nm_agent_interface_init (NMAgentInterface *iface)
+{
+ iface->get_description = nm_secret_agent_get_description;
+ iface->get_dbus_owner = nm_secret_agent_get_dbus_owner;
+ iface->get_identifier = nm_secret_agent_get_identifier;
+ iface->get_owner_uid = nm_secret_agent_get_owner_uid;
+ iface->get_owner_username = nm_secret_agent_get_owner_username;
+ iface->get_pid = nm_secret_agent_get_pid;
+ iface->get_capabilities = nm_secret_agent_get_capabilities;
+ iface->get_subject = nm_secret_agent_get_subject;
+ iface->add_permission = nm_secret_agent_add_permission;
+ iface->has_permission = nm_secret_agent_has_permission;
+ iface->get_secrets = nm_secret_agent_get_secrets;
+ iface->cancel_secrets = nm_secret_agent_cancel_secrets;
+ iface->save_secrets = nm_secret_agent_save_secrets;
+ iface->delete_secrets = nm_secret_agent_delete_secrets;
+}
+
+static void
nm_secret_agent_init (NMSecretAgent *self)
{
NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
@@ -760,7 +775,7 @@ dispose (GObject *object)
again:
c_list_for_each (iter, &priv->requests) {
c_list_unlink_init (iter);
- do_cancel_secrets (self, c_list_entry (iter, Request, lst), TRUE);
+ do_cancel_secrets (NM_AGENT (self), c_list_entry (iter, Request, lst), TRUE);
goto again;
}
@@ -796,14 +811,5 @@ nm_secret_agent_class_init (NMSecretAgentClass *config_class)
object_class->dispose = dispose;
object_class->finalize = finalize;
-
- signals[DISCONNECTED] =
- g_signal_new (NM_SECRET_AGENT_DISCONNECTED,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
}
diff --git a/src/settings/nm-secret-agent.h b/src/settings/nm-secret-agent.h
index 54c5b39827..1e4907018f 100644
--- a/src/settings/nm-secret-agent.h
+++ b/src/settings/nm-secret-agent.h
@@ -15,13 +15,14 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2010 - 2011 Red Hat, Inc.
+ * Copyright (C) 2010 - 2017 Red Hat, Inc.
*/
#ifndef __NETWORKMANAGER_SECRET_AGENT_H__
#define __NETWORKMANAGER_SECRET_AGENT_H__
#include "nm-connection.h"
+#include "nm-agent.h"
#define NM_TYPE_SECRET_AGENT (nm_secret_agent_get_type ())
#define NM_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SECRET_AGENT, NMSecretAgent))
@@ -30,11 +31,9 @@
#define NM_IS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SECRET_AGENT))
#define NM_SECRET_AGENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SECRET_AGENT, NMSecretAgentClass))
-#define NM_SECRET_AGENT_DISCONNECTED "disconnected"
-
typedef struct _NMSecretAgentClass NMSecretAgentClass;
-typedef struct _NMSecretAgentCallId *NMSecretAgentCallId;
+typedef struct _NMSecretAgent NMSecretAgent;
GType nm_secret_agent_get_type (void);
@@ -43,57 +42,4 @@ NMSecretAgent *nm_secret_agent_new (GDBusMethodInvocation *context,
const char *identifier,
NMSecretAgentCapabilities capabilities);
-const char *nm_secret_agent_get_description (NMSecretAgent *agent);
-
-const char *nm_secret_agent_get_dbus_owner (NMSecretAgent *agent);
-
-const char *nm_secret_agent_get_identifier (NMSecretAgent *agent);
-
-gulong nm_secret_agent_get_owner_uid (NMSecretAgent *agent);
-
-const char *nm_secret_agent_get_owner_username (NMSecretAgent *agent);
-
-gulong nm_secret_agent_get_pid (NMSecretAgent *agent);
-
-NMSecretAgentCapabilities nm_secret_agent_get_capabilities (NMSecretAgent *agent);
-
-NMAuthSubject *nm_secret_agent_get_subject (NMSecretAgent *agent);
-
-void nm_secret_agent_add_permission (NMSecretAgent *agent,
- const char *permission,
- gboolean allowed);
-
-gboolean nm_secret_agent_has_permission (NMSecretAgent *agent,
- const char *permission);
-
-typedef void (*NMSecretAgentCallback) (NMSecretAgent *agent,
- NMSecretAgentCallId call_id,
- GVariant *new_secrets, /* NULL for save & delete */
- GError *error,
- gpointer user_data);
-
-NMSecretAgentCallId nm_secret_agent_get_secrets (NMSecretAgent *agent,
- const char *path,
- NMConnection *connection,
- const char *setting_name,
- const char **hints,
- NMSecretAgentGetSecretsFlags flags,
- NMSecretAgentCallback callback,
- gpointer callback_data);
-
-void nm_secret_agent_cancel_secrets (NMSecretAgent *agent,
- NMSecretAgentCallId call_id);
-
-NMSecretAgentCallId nm_secret_agent_save_secrets (NMSecretAgent *agent,
- const char *path,
- NMConnection *connection,
- NMSecretAgentCallback callback,
- gpointer callback_data);
-
-NMSecretAgentCallId nm_secret_agent_delete_secrets (NMSecretAgent *agent,
- const char *path,
- NMConnection *connection,
- NMSecretAgentCallback callback,
- gpointer callback_data);
-
#endif /* __NETWORKMANAGER_SECRET_AGENT_H__ */
diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
index ce0091f67a..c4f1e8e6a6 100644
--- a/src/settings/nm-settings-connection.c
+++ b/src/settings/nm-settings-connection.c
@@ -411,9 +411,9 @@ nm_settings_connection_check_permission (NMSettingsConnection *self,
* either.
*/
if (nm_setting_connection_get_permission (s_con, i, NULL, &puser, NULL)) {
- NMSecretAgent *agent = nm_agent_manager_get_agent_by_user (priv->agent_mgr, puser);
+ NMAgent *agent = nm_agent_manager_get_agent_by_user (priv->agent_mgr, puser);
- if (agent && nm_secret_agent_has_permission (agent, permission))
+ if (agent && nm_agent_has_permission (agent, permission))
return TRUE;
}
}