232
agent_register_permissions_done (NMAuthChain *chain,
234
DBusGMethodInvocation *context,
237
NMAgentManager *self = NM_AGENT_MANAGER (user_data);
238
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
239
NMSecretAgent *agent;
241
GError *local = NULL;
242
NMAuthCallResult result;
246
priv->chains = g_slist_remove (priv->chains, chain);
249
local = g_error_new (NM_AGENT_MANAGER_ERROR,
250
NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED,
251
"Failed to request agent permissions: (%d) %s",
252
error->code, error->message);
253
dbus_g_method_return_error (context, local);
254
g_error_free (local);
256
agent = nm_auth_chain_steal_data (chain, "agent");
258
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED);
259
if (result == NM_AUTH_CALL_RESULT_YES)
260
nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, TRUE);
262
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN);
263
if (result == NM_AUTH_CALL_RESULT_YES)
264
nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, TRUE);
266
sender = nm_secret_agent_get_dbus_owner (agent);
267
g_hash_table_insert (priv->agents, g_strdup (sender), agent);
268
nm_log_dbg (LOGD_AGENTS, "(%s) agent registered",
269
nm_secret_agent_get_description (agent));
270
dbus_g_method_return (context);
272
/* Signal an agent was registered */
273
g_signal_emit (self, signals[AGENT_REGISTERED], 0, agent);
275
/* Add this agent to any in-progress secrets requests */
276
g_hash_table_iter_init (&iter, priv->requests);
277
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &req))
278
request_add_agent (req, agent, priv->session_monitor);
281
nm_auth_chain_unref (chain);
221
285
impl_agent_manager_register (NMAgentManager *self,
222
286
const char *identifier,
223
287
DBusGMethodInvocation *context)
275
g_hash_table_insert (priv->agents, g_strdup (sender), agent);
276
nm_log_dbg (LOGD_AGENTS, "(%s) agent registered",
338
nm_log_dbg (LOGD_AGENTS, "(%s) requesting permissions",
277
339
nm_secret_agent_get_description (agent));
278
dbus_g_method_return (context);
280
/* Add this agent to any in-progress secrets requests */
281
g_hash_table_iter_init (&iter, priv->requests);
282
while (g_hash_table_iter_next (&iter, NULL, &data))
283
request_add_agent ((Request *) data, agent, priv->session_monitor);
341
/* Kick off permissions requests for this agent */
342
chain = nm_auth_chain_new (context, NULL, agent_register_permissions_done, self);
343
nm_auth_chain_set_data (chain, "agent", agent, g_object_unref);
344
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE);
345
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE);
347
priv->chains = g_slist_append (priv->chains, chain);
945
1009
g_clear_error (&error);
947
1011
/* Do we have everything we need? */
948
/* FIXME: handle second check for VPN connections */
949
if ((nm_connection_need_secrets (tmp, NULL) == NULL) && (request_new == FALSE)) {
1012
if ( (req->flags & NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM)
1013
|| ((nm_connection_need_secrets (tmp, NULL) == NULL) && (request_new == FALSE))) {
950
1014
nm_log_dbg (LOGD_AGENTS, "(%p/%s) system settings secrets sufficient",
951
1015
req, req->setting_name);
1059
1123
g_hash_table_insert (priv->requests, GUINT_TO_POINTER (req->reqid), req);
1061
1125
/* Kick off the request */
1062
request_add_agents (self, req);
1126
if (!(req->flags & NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM))
1127
request_add_agents (self, req);
1063
1128
req->idle_id = g_idle_add (get_start, req);
1065
1130
return req->reqid;
1278
1343
/*************************************************************/
1346
nm_agent_manager_get_agent_by_user (NMAgentManager *self, const char *username)
1348
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
1349
GHashTableIter iter;
1350
NMSecretAgent *agent;
1352
g_hash_table_iter_init (&iter, priv->agents);
1353
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) {
1354
if (g_strcmp0 (nm_secret_agent_get_owner_username (agent), username) == 0)
1361
/*************************************************************/
1281
1364
name_owner_changed_cb (NMDBusManager *dbus_mgr,
1282
1365
const char *name,
1377
agent_permissions_changed_done (NMAuthChain *chain,
1379
DBusGMethodInvocation *context,
1382
NMAgentManager *self = NM_AGENT_MANAGER (user_data);
1383
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
1384
NMSecretAgent *agent;
1385
NMAuthCallResult result;
1387
priv->chains = g_slist_remove (priv->chains, chain);
1389
agent = nm_auth_chain_get_data (chain, "agent");
1392
nm_log_dbg (LOGD_AGENTS, "(%s) failed to request updated agent permissions",
1393
nm_secret_agent_get_description (agent));
1394
nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE);
1395
nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE);
1397
nm_log_dbg (LOGD_AGENTS, "(%s) updated agent permissions",
1398
nm_secret_agent_get_description (agent));
1400
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED);
1401
nm_secret_agent_add_permission (agent,
1402
NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED,
1403
(result == NM_AUTH_CALL_RESULT_YES));
1405
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN);
1406
nm_secret_agent_add_permission (agent,
1407
NM_AUTH_PERMISSION_WIFI_SHARE_OPEN,
1408
(result == NM_AUTH_CALL_RESULT_YES));
1411
nm_auth_chain_unref (chain);
1415
authority_changed_cb (gpointer user_data)
1417
NMAgentManager *self = NM_AGENT_MANAGER (user_data);
1418
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
1419
GHashTableIter iter;
1420
NMSecretAgent *agent;
1422
/* Recheck the permissions of all secret agents */
1423
g_hash_table_iter_init (&iter, priv->agents);
1424
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) {
1428
/* Kick off permissions requests for this agent */
1429
sender = nm_secret_agent_get_dbus_owner (agent);
1430
chain = nm_auth_chain_new_dbus_sender (sender, agent_permissions_changed_done, self);
1432
/* Make sure if the agent quits while the permissions call is in progress
1433
* that the object sticks around until our callback.
1435
nm_auth_chain_set_data (chain, "agent", g_object_ref (agent), g_object_unref);
1436
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE);
1437
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE);
1439
priv->chains = g_slist_append (priv->chains, chain);
1293
1443
/*************************************************************/
1295
1445
NMAgentManager *
1362
1518
/* virtual methods */
1363
1519
object_class->dispose = dispose;
1522
signals[AGENT_REGISTERED] =
1523
g_signal_new ("agent-registered",
1524
G_OBJECT_CLASS_TYPE (object_class),
1526
G_STRUCT_OFFSET (NMAgentManagerClass, agent_registered),
1528
g_cclosure_marshal_VOID__OBJECT,
1365
1532
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (agent_manager_class),
1366
1533
&dbus_glib_nm_agent_manager_object_info);