From e90fba3a452233e0bdea51fc6b8538de172363ab Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Fri, 2 Jun 2017 18:05:36 +0200 Subject: secret-agent: use the NMAgent interface --- src/nm-types.h | 1 - src/settings/nm-agent-manager.c | 125 ++++++++++++------------- src/settings/nm-agent-manager.h | 4 +- src/settings/nm-secret-agent.c | 166 ++++++++++++++++++---------------- src/settings/nm-secret-agent.h | 60 +----------- src/settings/nm-settings-connection.c | 4 +- 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); } } @@ -742,6 +738,25 @@ nm_secret_agent_new (GDBusMethodInvocation *context, return self; } +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) { @@ -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; } } -- cgit v1.2.1