settings: port NMAgentManager, etc, to use NMAuthSubject
Rather than explicitly passing around a UID and a flag saying whether or not it's relevant. (This also fixes a bug where the wrong UID was being recorded in nm-settings-connection.c::auth_start(), which caused problems such as agent-owned secrets not getting saved because of a perceived UID mismatch.)
This commit is contained in:
@@ -105,7 +105,6 @@ nm_act_request_get_secrets (NMActRequest *self,
|
||||
GetSecretsInfo *info;
|
||||
guint32 call_id;
|
||||
NMConnection *connection;
|
||||
gboolean user_requested;
|
||||
const char *hints[2] = { hint, NULL };
|
||||
|
||||
g_return_val_if_fail (self, 0);
|
||||
@@ -118,14 +117,12 @@ nm_act_request_get_secrets (NMActRequest *self,
|
||||
info->callback = callback;
|
||||
info->callback_data = callback_data;
|
||||
|
||||
user_requested = nm_active_connection_get_user_requested (NM_ACTIVE_CONNECTION (self));
|
||||
if (user_requested)
|
||||
if (nm_active_connection_get_user_requested (NM_ACTIVE_CONNECTION (self)))
|
||||
flags |= NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED;
|
||||
|
||||
connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (self));
|
||||
call_id = nm_settings_connection_get_secrets (NM_SETTINGS_CONNECTION (connection),
|
||||
user_requested,
|
||||
nm_active_connection_get_user_uid (NM_ACTIVE_CONNECTION (self)),
|
||||
nm_active_connection_get_subject (NM_ACTIVE_CONNECTION (self)),
|
||||
setting_name,
|
||||
flags,
|
||||
hints,
|
||||
|
@@ -282,17 +282,6 @@ nm_active_connection_get_user_requested (NMActiveConnection *self)
|
||||
return !nm_auth_subject_get_internal (NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->subject);
|
||||
}
|
||||
|
||||
gulong
|
||||
nm_active_connection_get_user_uid (NMActiveConnection *self)
|
||||
{
|
||||
NMActiveConnectionPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), G_MAXULONG);
|
||||
priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
|
||||
|
||||
return nm_auth_subject_get_uid (priv->subject);
|
||||
}
|
||||
|
||||
NMDevice *
|
||||
nm_active_connection_get_device (NMActiveConnection *self)
|
||||
{
|
||||
|
@@ -120,8 +120,6 @@ NMAuthSubject *nm_active_connection_get_subject (NMActiveConnection *self);
|
||||
|
||||
gboolean nm_active_connection_get_user_requested (NMActiveConnection *self);
|
||||
|
||||
gulong nm_active_connection_get_user_uid (NMActiveConnection *self);
|
||||
|
||||
NMActiveConnection *nm_active_connection_get_master (NMActiveConnection *self);
|
||||
|
||||
gboolean nm_active_connection_get_master_ready (NMActiveConnection *self);
|
||||
|
@@ -413,8 +413,7 @@ struct _Request {
|
||||
char *detail;
|
||||
char *verb;
|
||||
|
||||
gboolean filter_by_uid;
|
||||
gulong uid_filter;
|
||||
NMAuthSubject *subject;
|
||||
|
||||
/* Current agent being asked for secrets */
|
||||
NMSecretAgent *current;
|
||||
@@ -447,8 +446,7 @@ static Request *
|
||||
request_new (gsize struct_size,
|
||||
const char *detail,
|
||||
const char *verb,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid_filter,
|
||||
NMAuthSubject *subject,
|
||||
RequestCompleteFunc complete_callback,
|
||||
gpointer complete_callback_data,
|
||||
RequestAddAgentFunc add_agent_callback,
|
||||
@@ -462,8 +460,7 @@ request_new (gsize struct_size,
|
||||
req->reqid = next_req_id++;
|
||||
req->detail = g_strdup (detail);
|
||||
req->verb = g_strdup (verb);
|
||||
req->filter_by_uid = filter_by_uid;
|
||||
req->uid_filter = uid_filter;
|
||||
req->subject = g_object_ref (subject);
|
||||
req->complete_callback = complete_callback;
|
||||
req->complete_callback_data = complete_callback_data;
|
||||
req->add_agent_callback = add_agent_callback,
|
||||
@@ -485,6 +482,8 @@ request_free (Request *req)
|
||||
if (!req->completed && req->cancel_callback)
|
||||
req->cancel_callback (req);
|
||||
|
||||
g_object_unref (req->subject);
|
||||
|
||||
g_free (req->detail);
|
||||
g_free (req->verb);
|
||||
g_slist_free_full (req->pending, g_object_unref);
|
||||
@@ -547,8 +546,6 @@ agent_compare_func (NMSecretAgent *a, NMSecretAgent *b, gpointer user_data)
|
||||
static void
|
||||
request_add_agent (Request *req, NMSecretAgent *agent)
|
||||
{
|
||||
uid_t agent_uid;
|
||||
|
||||
g_return_if_fail (req != NULL);
|
||||
g_return_if_fail (agent != NULL);
|
||||
|
||||
@@ -559,14 +556,20 @@ request_add_agent (Request *req, NMSecretAgent *agent)
|
||||
return;
|
||||
|
||||
/* If the request should filter agents by UID, do that now */
|
||||
if (!nm_auth_subject_get_internal (req->subject)) {
|
||||
uid_t agent_uid, subject_uid;
|
||||
|
||||
agent_uid = nm_secret_agent_get_owner_uid (agent);
|
||||
if (req->filter_by_uid && (agent_uid != req->uid_filter)) {
|
||||
subject_uid = nm_auth_subject_get_uid (req->subject);
|
||||
if (agent_uid != subject_uid) {
|
||||
nm_log_dbg (LOGD_AGENTS, "(%s) agent ignored for secrets request %p/%s "
|
||||
"(uid %d not required %ld)",
|
||||
"(uid %ld not required %ld)",
|
||||
nm_secret_agent_get_description (agent),
|
||||
req, req->detail, agent_uid, req->uid_filter);
|
||||
req, req->detail,
|
||||
(long)agent_uid, (long)subject_uid);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
nm_log_dbg (LOGD_AGENTS, "(%s) agent allowed for secrets request %p/%s",
|
||||
nm_secret_agent_get_description (agent),
|
||||
@@ -712,8 +715,7 @@ connection_request_add_agent (Request *parent, NMSecretAgent *agent)
|
||||
|
||||
static ConnectionRequest *
|
||||
connection_request_new_get (NMConnection *connection,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid_filter,
|
||||
NMAuthSubject *subject,
|
||||
GHashTable *existing_secrets,
|
||||
const char *setting_name,
|
||||
const char *verb,
|
||||
@@ -733,8 +735,7 @@ connection_request_new_get (NMConnection *connection,
|
||||
req = (ConnectionRequest *) request_new (sizeof (ConnectionRequest),
|
||||
nm_connection_get_id (connection),
|
||||
verb,
|
||||
filter_by_uid,
|
||||
uid_filter,
|
||||
subject,
|
||||
complete_callback,
|
||||
complete_callback_data,
|
||||
connection_request_add_agent,
|
||||
@@ -758,8 +759,7 @@ connection_request_new_get (NMConnection *connection,
|
||||
|
||||
static ConnectionRequest *
|
||||
connection_request_new_other (NMConnection *connection,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid_filter,
|
||||
NMAuthSubject *subject,
|
||||
const char *verb,
|
||||
RequestCompleteFunc complete_callback,
|
||||
gpointer complete_callback_data,
|
||||
@@ -770,8 +770,7 @@ connection_request_new_other (NMConnection *connection,
|
||||
req = (ConnectionRequest *) request_new (sizeof (ConnectionRequest),
|
||||
nm_connection_get_id (connection),
|
||||
verb,
|
||||
filter_by_uid,
|
||||
uid_filter,
|
||||
subject,
|
||||
complete_callback,
|
||||
complete_callback_data,
|
||||
NULL,
|
||||
@@ -1146,8 +1145,7 @@ get_cancel_cb (Request *parent)
|
||||
guint32
|
||||
nm_agent_manager_get_secrets (NMAgentManager *self,
|
||||
NMConnection *connection,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid_filter,
|
||||
NMAuthSubject *subject,
|
||||
GHashTable *existing_secrets,
|
||||
const char *setting_name,
|
||||
NMSettingsGetSecretsFlags flags,
|
||||
@@ -1178,8 +1176,7 @@ nm_agent_manager_get_secrets (NMAgentManager *self,
|
||||
*/
|
||||
|
||||
req = connection_request_new_get (connection,
|
||||
filter_by_uid,
|
||||
uid_filter,
|
||||
subject,
|
||||
existing_secrets,
|
||||
setting_name,
|
||||
"getting",
|
||||
@@ -1279,8 +1276,7 @@ save_complete_cb (Request *req,
|
||||
guint32
|
||||
nm_agent_manager_save_secrets (NMAgentManager *self,
|
||||
NMConnection *connection,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid_filter)
|
||||
NMAuthSubject *subject)
|
||||
{
|
||||
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
|
||||
ConnectionRequest *req;
|
||||
@@ -1295,8 +1291,7 @@ nm_agent_manager_save_secrets (NMAgentManager *self,
|
||||
nm_connection_get_id (connection));
|
||||
|
||||
req = connection_request_new_other (connection,
|
||||
filter_by_uid,
|
||||
uid_filter,
|
||||
subject,
|
||||
"saving",
|
||||
save_complete_cb,
|
||||
self,
|
||||
@@ -1367,11 +1362,10 @@ delete_complete_cb (Request *req,
|
||||
|
||||
guint32
|
||||
nm_agent_manager_delete_secrets (NMAgentManager *self,
|
||||
NMConnection *connection,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid_filter)
|
||||
NMConnection *connection)
|
||||
{
|
||||
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
|
||||
NMAuthSubject *subject;
|
||||
ConnectionRequest *req;
|
||||
Request *parent;
|
||||
|
||||
@@ -1383,13 +1377,14 @@ nm_agent_manager_delete_secrets (NMAgentManager *self,
|
||||
nm_connection_get_path (connection),
|
||||
nm_connection_get_id (connection));
|
||||
|
||||
subject = nm_auth_subject_new_internal ();
|
||||
req = connection_request_new_other (connection,
|
||||
filter_by_uid,
|
||||
uid_filter,
|
||||
subject,
|
||||
"deleting",
|
||||
delete_complete_cb,
|
||||
self,
|
||||
delete_next_cb);
|
||||
g_object_unref (subject);
|
||||
parent = (Request *) req;
|
||||
g_hash_table_insert (priv->requests, GUINT_TO_POINTER (parent->reqid), req);
|
||||
|
||||
@@ -1421,8 +1416,7 @@ nm_agent_manager_get_agent_by_user (NMAgentManager *self, const char *username)
|
||||
|
||||
gboolean
|
||||
nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
|
||||
gboolean filter_by_uid,
|
||||
gulong owner_uid,
|
||||
NMAuthSubject *subject,
|
||||
NMSecretAgentCapabilities capability)
|
||||
{
|
||||
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (manager);
|
||||
@@ -1431,7 +1425,8 @@ nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
|
||||
|
||||
g_hash_table_iter_init (&iter, priv->agents);
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) {
|
||||
if (filter_by_uid && nm_secret_agent_get_owner_uid (agent) != owner_uid)
|
||||
if ( !nm_auth_subject_get_internal (subject)
|
||||
&& nm_secret_agent_get_owner_uid (agent) != nm_auth_subject_get_uid (subject))
|
||||
continue;
|
||||
|
||||
if (!(nm_secret_agent_get_capabilities (agent) & capability))
|
||||
|
@@ -75,8 +75,7 @@ typedef void (*NMAgentSecretsResultFunc) (NMAgentManager *manager,
|
||||
|
||||
guint32 nm_agent_manager_get_secrets (NMAgentManager *manager,
|
||||
NMConnection *connection,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid,
|
||||
NMAuthSubject *subject,
|
||||
GHashTable *existing_secrets,
|
||||
const char *setting_name,
|
||||
NMSettingsGetSecretsFlags flags,
|
||||
@@ -91,20 +90,16 @@ void nm_agent_manager_cancel_secrets (NMAgentManager *manager,
|
||||
|
||||
guint32 nm_agent_manager_save_secrets (NMAgentManager *manager,
|
||||
NMConnection *connection,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid_filter);
|
||||
NMAuthSubject *subject);
|
||||
|
||||
guint32 nm_agent_manager_delete_secrets (NMAgentManager *manager,
|
||||
NMConnection *connection,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid_filter);
|
||||
NMConnection *connection);
|
||||
|
||||
NMSecretAgent *nm_agent_manager_get_agent_by_user (NMAgentManager *manager,
|
||||
const char *username);
|
||||
|
||||
gboolean nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
|
||||
gboolean filter_by_uid,
|
||||
gulong owner_uid,
|
||||
NMAuthSubject *subject,
|
||||
NMSecretAgentCapabilities capability);
|
||||
|
||||
#endif /* NM_AGENT_MANAGER_H */
|
||||
|
@@ -620,7 +620,7 @@ do_delete (NMSettingsConnection *connection,
|
||||
/* Tell agents to remove secrets for this connection */
|
||||
for_agents = nm_connection_duplicate (NM_CONNECTION (connection));
|
||||
nm_connection_clear_secrets (for_agents);
|
||||
nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents, FALSE, 0);
|
||||
nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents);
|
||||
g_object_unref (for_agents);
|
||||
|
||||
/* Remove timestamp from timestamps database file */
|
||||
@@ -850,10 +850,7 @@ agent_secrets_done_cb (NMAgentManager *manager,
|
||||
/**
|
||||
* nm_settings_connection_get_secrets:
|
||||
* @connection: the #NMSettingsConnection
|
||||
* @filter_by_uid: if TRUE, only request secrets from agents registered by the
|
||||
* same UID as @uid.
|
||||
* @uid: when @filter_by_uid is TRUE, only request secrets from agents belonging
|
||||
* to this UID
|
||||
* @subject: the #NMAuthSubject originating the request
|
||||
* @setting_name: the setting to return secrets for
|
||||
* @flags: flags to modify the secrets request
|
||||
* @hints: key names in @setting_name for which secrets may be required, or some
|
||||
@@ -868,8 +865,7 @@ agent_secrets_done_cb (NMAgentManager *manager,
|
||||
**/
|
||||
guint32
|
||||
nm_settings_connection_get_secrets (NMSettingsConnection *self,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid,
|
||||
NMAuthSubject *subject,
|
||||
const char *setting_name,
|
||||
NMSettingsGetSecretsFlags flags,
|
||||
const char **hints,
|
||||
@@ -903,8 +899,7 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self,
|
||||
existing_secrets = nm_connection_to_hash (priv->system_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
|
||||
call_id = nm_agent_manager_get_secrets (priv->agent_mgr,
|
||||
NM_CONNECTION (self),
|
||||
filter_by_uid,
|
||||
uid,
|
||||
subject,
|
||||
existing_secrets,
|
||||
setting_name,
|
||||
flags,
|
||||
@@ -949,7 +944,7 @@ nm_settings_connection_cancel_secrets (NMSettingsConnection *self,
|
||||
|
||||
typedef void (*AuthCallback) (NMSettingsConnection *connection,
|
||||
DBusGMethodInvocation *context,
|
||||
gulong sender_uid,
|
||||
NMAuthSubject *subject,
|
||||
GError *error,
|
||||
gpointer data);
|
||||
|
||||
@@ -966,7 +961,7 @@ pk_auth_cb (NMAuthChain *chain,
|
||||
const char *perm;
|
||||
AuthCallback callback;
|
||||
gpointer callback_data;
|
||||
gulong sender_uid;
|
||||
NMAuthSubject *subject;
|
||||
|
||||
priv->pending_auths = g_slist_remove (priv->pending_auths, chain);
|
||||
|
||||
@@ -988,8 +983,8 @@ pk_auth_cb (NMAuthChain *chain,
|
||||
|
||||
callback = nm_auth_chain_get_data (chain, "callback");
|
||||
callback_data = nm_auth_chain_get_data (chain, "callback-data");
|
||||
sender_uid = nm_auth_chain_get_data_ulong (chain, "sender-uid");
|
||||
callback (self, context, sender_uid, error, callback_data);
|
||||
subject = nm_auth_chain_get_data (chain, "subject");
|
||||
callback (self, context, subject, error, callback_data);
|
||||
|
||||
g_clear_error (&error);
|
||||
nm_auth_chain_unref (chain);
|
||||
@@ -1030,7 +1025,6 @@ auth_start (NMSettingsConnection *self,
|
||||
{
|
||||
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
|
||||
NMAuthChain *chain;
|
||||
gulong sender_uid = G_MAXULONG;
|
||||
GError *error = NULL;
|
||||
char *error_desc = NULL;
|
||||
|
||||
@@ -1047,14 +1041,14 @@ auth_start (NMSettingsConnection *self,
|
||||
error_desc);
|
||||
g_free (error_desc);
|
||||
|
||||
callback (self, context, G_MAXULONG, error, callback_data);
|
||||
callback (self, context, subject, error, callback_data);
|
||||
g_clear_error (&error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!check_permission) {
|
||||
/* Don't need polkit auth, automatic success */
|
||||
callback (self, context, nm_auth_subject_get_uid (subject), NULL, callback_data);
|
||||
callback (self, context, subject, NULL, callback_data);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1064,7 +1058,7 @@ auth_start (NMSettingsConnection *self,
|
||||
NM_SETTINGS_ERROR,
|
||||
NM_SETTINGS_ERROR_PERMISSION_DENIED,
|
||||
"Unable to authenticate the request.");
|
||||
callback (self, context, G_MAXULONG, error, callback_data);
|
||||
callback (self, context, subject, error, callback_data);
|
||||
g_clear_error (&error);
|
||||
return;
|
||||
}
|
||||
@@ -1073,7 +1067,7 @@ auth_start (NMSettingsConnection *self,
|
||||
nm_auth_chain_set_data (chain, "perm", (gpointer) check_permission, NULL);
|
||||
nm_auth_chain_set_data (chain, "callback", callback, NULL);
|
||||
nm_auth_chain_set_data (chain, "callback-data", callback_data, NULL);
|
||||
nm_auth_chain_set_data_ulong (chain, "sender-uid", sender_uid);
|
||||
nm_auth_chain_set_data (chain, "subject", g_object_ref (subject), g_object_unref);
|
||||
nm_auth_chain_add_call (chain, check_permission, TRUE);
|
||||
}
|
||||
|
||||
@@ -1113,7 +1107,7 @@ check_writable (NMConnection *connection, GError **error)
|
||||
static void
|
||||
get_settings_auth_cb (NMSettingsConnection *self,
|
||||
DBusGMethodInvocation *context,
|
||||
gulong sender_uid,
|
||||
NMAuthSubject *subject,
|
||||
GError *error,
|
||||
gpointer data)
|
||||
{
|
||||
@@ -1197,7 +1191,7 @@ impl_settings_connection_get_settings (NMSettingsConnection *self,
|
||||
typedef struct {
|
||||
DBusGMethodInvocation *context;
|
||||
NMAgentManager *agent_mgr;
|
||||
gulong sender_uid;
|
||||
NMAuthSubject *subject;
|
||||
NMConnection *new_settings;
|
||||
gboolean save_to_disk;
|
||||
} UpdateInfo;
|
||||
@@ -1212,6 +1206,7 @@ update_complete (NMSettingsConnection *self,
|
||||
else
|
||||
dbus_g_method_return (info->context);
|
||||
|
||||
g_clear_object (&info->subject);
|
||||
g_clear_object (&info->agent_mgr);
|
||||
g_clear_object (&info->new_settings);
|
||||
memset (info, 0, sizeof (*info));
|
||||
@@ -1235,7 +1230,7 @@ con_update_cb (NMSettingsConnection *self,
|
||||
nm_connection_clear_secrets_with_flags (for_agent,
|
||||
secrets_filter_cb,
|
||||
GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
|
||||
nm_agent_manager_save_secrets (info->agent_mgr, for_agent, TRUE, info->sender_uid);
|
||||
nm_agent_manager_save_secrets (info->agent_mgr, for_agent, info->subject);
|
||||
g_object_unref (for_agent);
|
||||
|
||||
g_signal_emit (self, signals[DBUS_UPDATED], 0);
|
||||
@@ -1247,7 +1242,7 @@ con_update_cb (NMSettingsConnection *self,
|
||||
static void
|
||||
update_auth_cb (NMSettingsConnection *self,
|
||||
DBusGMethodInvocation *context,
|
||||
gulong sender_uid,
|
||||
NMAuthSubject *subject,
|
||||
GError *error,
|
||||
gpointer data)
|
||||
{
|
||||
@@ -1259,8 +1254,6 @@ update_auth_cb (NMSettingsConnection *self,
|
||||
return;
|
||||
}
|
||||
|
||||
info->sender_uid = sender_uid;
|
||||
|
||||
/* Cache the new secrets from the agent, as stuff like inotify-triggered
|
||||
* changes to connection's backing config files will blow them away if
|
||||
* they're in the main connection.
|
||||
@@ -1363,14 +1356,13 @@ impl_settings_connection_update_helper (NMSettingsConnection *self,
|
||||
info = g_malloc0 (sizeof (*info));
|
||||
info->context = context;
|
||||
info->agent_mgr = g_object_ref (priv->agent_mgr);
|
||||
info->sender_uid = G_MAXULONG;
|
||||
info->subject = subject;
|
||||
info->save_to_disk = save_to_disk;
|
||||
info->new_settings = tmp;
|
||||
|
||||
permission = get_update_modify_permission (NM_CONNECTION (self),
|
||||
tmp ? tmp : NM_CONNECTION (self));
|
||||
auth_start (self, context, subject, permission, update_auth_cb, info);
|
||||
g_object_unref (subject);
|
||||
return;
|
||||
|
||||
error:
|
||||
@@ -1426,7 +1418,7 @@ con_delete_cb (NMSettingsConnection *connection,
|
||||
static void
|
||||
delete_auth_cb (NMSettingsConnection *self,
|
||||
DBusGMethodInvocation *context,
|
||||
gulong sender_uid,
|
||||
NMAuthSubject *subject,
|
||||
GError *error,
|
||||
gpointer data)
|
||||
{
|
||||
@@ -1513,7 +1505,7 @@ dbus_get_agent_secrets_cb (NMSettingsConnection *self,
|
||||
static void
|
||||
dbus_secrets_auth_cb (NMSettingsConnection *self,
|
||||
DBusGMethodInvocation *context,
|
||||
gulong sender_uid,
|
||||
NMAuthSubject *subject,
|
||||
GError *error,
|
||||
gpointer user_data)
|
||||
{
|
||||
@@ -1524,8 +1516,7 @@ dbus_secrets_auth_cb (NMSettingsConnection *self,
|
||||
|
||||
if (!error) {
|
||||
call_id = nm_settings_connection_get_secrets (self,
|
||||
TRUE,
|
||||
sender_uid,
|
||||
subject,
|
||||
setting_name,
|
||||
NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED,
|
||||
NULL,
|
||||
|
@@ -24,6 +24,7 @@
|
||||
|
||||
#include <nm-connection.h>
|
||||
#include "nm-settings-flags.h"
|
||||
#include "nm-auth-subject.h"
|
||||
#include <net/ethernet.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
@@ -107,8 +108,7 @@ typedef void (*NMSettingsConnectionSecretsFunc) (NMSettingsConnection *connectio
|
||||
gpointer user_data);
|
||||
|
||||
guint32 nm_settings_connection_get_secrets (NMSettingsConnection *connection,
|
||||
gboolean filter_by_uid,
|
||||
gulong uid,
|
||||
NMAuthSubject *subject,
|
||||
const char *setting_name,
|
||||
NMSettingsGetSecretsFlags flags,
|
||||
const char **hints,
|
||||
|
@@ -961,7 +961,7 @@ secrets_filter_cb (NMSetting *setting,
|
||||
static void
|
||||
send_agent_owned_secrets (NMSettings *self,
|
||||
NMSettingsConnection *connection,
|
||||
gulong caller_uid)
|
||||
NMAuthSubject *subject)
|
||||
{
|
||||
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
|
||||
NMConnection *for_agent;
|
||||
@@ -974,7 +974,7 @@ send_agent_owned_secrets (NMSettings *self,
|
||||
nm_connection_clear_secrets_with_flags (for_agent,
|
||||
secrets_filter_cb,
|
||||
GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
|
||||
nm_agent_manager_save_secrets (priv->agent_mgr, for_agent, TRUE, caller_uid);
|
||||
nm_agent_manager_save_secrets (priv->agent_mgr, for_agent, subject);
|
||||
g_object_unref (for_agent);
|
||||
}
|
||||
|
||||
@@ -992,7 +992,7 @@ pk_add_cb (NMAuthChain *chain,
|
||||
NMSettingsConnection *added = NULL;
|
||||
NMSettingsAddCallback callback;
|
||||
gpointer callback_data;
|
||||
gulong caller_uid;
|
||||
NMAuthSubject *subject;
|
||||
const char *perm;
|
||||
gboolean save_to_disk;
|
||||
|
||||
@@ -1023,13 +1023,13 @@ pk_add_cb (NMAuthChain *chain,
|
||||
|
||||
callback = nm_auth_chain_get_data (chain, "callback");
|
||||
callback_data = nm_auth_chain_get_data (chain, "callback-data");
|
||||
caller_uid = nm_auth_chain_get_data_ulong (chain, "caller-uid");
|
||||
subject = nm_auth_chain_get_data (chain, "subject");
|
||||
|
||||
callback (self, added, error, context, callback_data);
|
||||
|
||||
/* Send agent-owned secrets to the agents */
|
||||
if (!error && added)
|
||||
send_agent_owned_secrets (self, added, caller_uid);
|
||||
send_agent_owned_secrets (self, added, subject);
|
||||
|
||||
g_clear_error (&error);
|
||||
nm_auth_chain_unref (chain);
|
||||
@@ -1163,7 +1163,7 @@ nm_settings_add_connection_dbus (NMSettings *self,
|
||||
nm_auth_chain_set_data (chain, "connection", g_object_ref (connection), g_object_unref);
|
||||
nm_auth_chain_set_data (chain, "callback", callback, NULL);
|
||||
nm_auth_chain_set_data (chain, "callback-data", user_data, NULL);
|
||||
nm_auth_chain_set_data_ulong (chain, "caller-uid", nm_auth_subject_get_uid (subject));
|
||||
nm_auth_chain_set_data (chain, "subject", g_object_ref (subject), g_object_unref);
|
||||
nm_auth_chain_set_data (chain, "save-to-disk", GUINT_TO_POINTER (save_to_disk), NULL);
|
||||
|
||||
done:
|
||||
|
@@ -1,4 +1,5 @@
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/config \
|
||||
-I$(top_srcdir)/src/settings \
|
||||
-I$(top_srcdir)/include \
|
||||
@@ -7,6 +8,7 @@ AM_CPPFLAGS = \
|
||||
-I$(top_builddir)/libnm-util \
|
||||
$(GLIB_CFLAGS) \
|
||||
$(DBUS_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
-DNMCONFDIR=\"$(nmconfdir)\"
|
||||
|
||||
# 'noinst' here because this is an example plugin we don't want to install
|
||||
|
@@ -38,6 +38,7 @@ AM_CPPFLAGS = \
|
||||
-I$(top_builddir)/libnm-util \
|
||||
$(GLIB_CFLAGS) \
|
||||
$(DBUS_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
$(NSS_CFLAGS) \
|
||||
-DSYSCONFDIR=\"$(sysconfdir)\" \
|
||||
-DSBINDIR=\"$(sbindir)\"
|
||||
|
@@ -1,6 +1,8 @@
|
||||
AM_CPPFLAGS = \
|
||||
$(GLIB_CFLAGS) \
|
||||
$(DBUS_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
-I${top_srcdir}/src \
|
||||
-I${top_srcdir}/src/settings \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_builddir)/include \
|
||||
|
@@ -3,6 +3,7 @@ SUBDIRS = . tests
|
||||
@GNOME_CODE_COVERAGE_RULES@
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/config \
|
||||
-I$(top_srcdir)/src/wifi \
|
||||
-I$(top_srcdir)/src/settings \
|
||||
@@ -13,6 +14,7 @@ AM_CPPFLAGS = \
|
||||
-I$(top_builddir)/libnm-util \
|
||||
$(GLIB_CFLAGS) \
|
||||
$(DBUS_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
$(GUDEV_CFLAGS) \
|
||||
-DSYSCONFDIR=\"$(sysconfdir)\"
|
||||
-DSBINDIR=\"$(sbindir)\"
|
||||
|
@@ -9,11 +9,14 @@ AM_CPPFLAGS= \
|
||||
-I$(top_builddir)/libnm-util \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_builddir)/include \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/config \
|
||||
-I$(top_srcdir)/src/settings \
|
||||
-I$(top_srcdir)/src/wifi \
|
||||
$(CHECK_CFLAGS) \
|
||||
$(GLIB_CFLAGS) \
|
||||
$(DBUS_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
$(CODE_COVERAGE_CFLAGS) \
|
||||
-DTEST_WPA_SUPPLICANT_CONF='"$(srcdir)/wpa_supplicant.conf"' \
|
||||
-DSYSCONFDIR=\"nonexistent\"
|
||||
|
@@ -3,6 +3,7 @@ SUBDIRS = . tests
|
||||
@GNOME_CODE_COVERAGE_RULES@
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/logging \
|
||||
-I$(top_srcdir)/src/config \
|
||||
-I$(top_srcdir)/src/settings \
|
||||
@@ -13,6 +14,7 @@ AM_CPPFLAGS = \
|
||||
-I$(top_builddir)/libnm-util \
|
||||
$(GLIB_CFLAGS) \
|
||||
$(DBUS_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
$(GUDEV_CFLAGS) \
|
||||
-DSYSCONFDIR=\"$(sysconfdir)\"
|
||||
|
||||
|
@@ -6,10 +6,12 @@ AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/libnm-util \
|
||||
-I$(top_builddir)/libnm-util \
|
||||
-I$(top_srcdir)/libnm-glib \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/settings \
|
||||
-I$(srcdir)/../ \
|
||||
$(GLIB_CFLAGS) \
|
||||
$(DBUS_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
-DTEST_ENI_DIR=\"$(abs_srcdir)\"
|
||||
|
||||
noinst_PROGRAMS = test-ifupdown
|
||||
|
@@ -3,6 +3,7 @@ SUBDIRS = . tests
|
||||
@GNOME_CODE_COVERAGE_RULES@
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/config \
|
||||
-I$(top_srcdir)/src/settings \
|
||||
-I$(top_srcdir)/include \
|
||||
@@ -11,6 +12,7 @@ AM_CPPFLAGS = \
|
||||
-I$(top_builddir)/libnm-util \
|
||||
$(GLIB_CFLAGS) \
|
||||
$(DBUS_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
-DNMCONFDIR=\"$(nmconfdir)\"
|
||||
|
||||
noinst_LTLIBRARIES = \
|
||||
|
@@ -10,10 +10,12 @@ AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/libnm-util \
|
||||
-I$(top_builddir)/libnm-util \
|
||||
-I$(top_srcdir)/libnm-glib \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/settings \
|
||||
-I$(srcdir)/../ \
|
||||
$(GLIB_CFLAGS) \
|
||||
$(DBUS_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
$(CODE_COVERAGE_CFLAGS) \
|
||||
-DTEST_KEYFILES_DIR=\"$(abs_srcdir)/keyfiles\" \
|
||||
-DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\" \
|
||||
|
@@ -1271,8 +1271,7 @@ really_activate (NMVPNConnection *connection, const char *username)
|
||||
*/
|
||||
agent_mgr = nm_agent_manager_get ();
|
||||
if (nm_agent_manager_all_agents_have_capability (agent_mgr,
|
||||
nm_active_connection_get_user_requested (NM_ACTIVE_CONNECTION (connection)),
|
||||
nm_active_connection_get_user_uid (NM_ACTIVE_CONNECTION (connection)),
|
||||
nm_active_connection_get_subject (NM_ACTIVE_CONNECTION (connection)),
|
||||
NM_SECRET_AGENT_CAPABILITY_VPN_HINTS)) {
|
||||
nm_log_dbg (LOGD_VPN, "Allowing interactive secrets as all agents have that capability");
|
||||
dbus_g_proxy_begin_call (priv->proxy, "ConnectInteractive",
|
||||
@@ -1601,8 +1600,7 @@ get_secrets (NMVPNConnection *self,
|
||||
flags |= NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED;
|
||||
|
||||
priv->secrets_id = nm_settings_connection_get_secrets (NM_SETTINGS_CONNECTION (priv->connection),
|
||||
filter_by_uid,
|
||||
nm_active_connection_get_user_uid (NM_ACTIVE_CONNECTION (self)),
|
||||
nm_active_connection_get_subject (NM_ACTIVE_CONNECTION (self)),
|
||||
NM_SETTING_VPN_SETTING_NAME,
|
||||
flags,
|
||||
hints,
|
||||
|
Reference in New Issue
Block a user