mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-08 22:58:16 +02:00
vpn: set default username from agent that provided secrets (bgo #646115)
This functionality got dropped when we killed user secrets because the user settings service was the thing that set this.
This commit is contained in:
parent
390a5fb840
commit
52d0376148
1 changed files with 39 additions and 5 deletions
|
|
@ -62,6 +62,7 @@ typedef struct {
|
||||||
gulong user_uid;
|
gulong user_uid;
|
||||||
NMActRequest *act_request;
|
NMActRequest *act_request;
|
||||||
guint32 secrets_id;
|
guint32 secrets_id;
|
||||||
|
char *username;
|
||||||
|
|
||||||
NMDevice *parent_dev;
|
NMDevice *parent_dev;
|
||||||
gulong device_monitor;
|
gulong device_monitor;
|
||||||
|
|
@ -593,8 +594,36 @@ nm_vpn_connection_connect_cb (DBusGProxy *proxy, GError *err, gpointer user_data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Add a username to a hashed connection */
|
||||||
|
static GHashTable *
|
||||||
|
_hash_with_username (NMConnection *connection, const char *username)
|
||||||
|
{
|
||||||
|
NMConnection *dup;
|
||||||
|
NMSetting *s_vpn;
|
||||||
|
GHashTable *hash;
|
||||||
|
const char *existing;
|
||||||
|
|
||||||
|
/* Shortcut if we weren't given a username or if there already was one in
|
||||||
|
* the VPN setting; don't bother duplicating the connection and everything.
|
||||||
|
*/
|
||||||
|
s_vpn = nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
|
||||||
|
g_assert (s_vpn);
|
||||||
|
existing = nm_setting_vpn_get_user_name (NM_SETTING_VPN (s_vpn));
|
||||||
|
if (username == NULL || existing)
|
||||||
|
return nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
|
||||||
|
|
||||||
|
dup = nm_connection_duplicate (connection);
|
||||||
|
g_assert (dup);
|
||||||
|
s_vpn = nm_connection_get_setting (dup, NM_TYPE_SETTING_VPN);
|
||||||
|
g_assert (s_vpn);
|
||||||
|
g_object_set (s_vpn, NM_SETTING_VPN_USER_NAME, username, NULL);
|
||||||
|
hash = nm_connection_to_hash (dup, NM_SETTING_HASH_FLAG_ALL);
|
||||||
|
g_object_unref (dup);
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
really_activate (NMVPNConnection *connection)
|
really_activate (NMVPNConnection *connection, const char *username)
|
||||||
{
|
{
|
||||||
NMVPNConnectionPrivate *priv;
|
NMVPNConnectionPrivate *priv;
|
||||||
GHashTable *hash;
|
GHashTable *hash;
|
||||||
|
|
@ -614,7 +643,7 @@ really_activate (NMVPNConnection *connection)
|
||||||
G_CALLBACK (nm_vpn_connection_ip4_config_get),
|
G_CALLBACK (nm_vpn_connection_ip4_config_get),
|
||||||
connection, NULL);
|
connection, NULL);
|
||||||
|
|
||||||
hash = nm_connection_to_hash (priv->connection, NM_SETTING_HASH_FLAG_ALL);
|
hash = _hash_with_username (priv->connection, username);
|
||||||
org_freedesktop_NetworkManager_VPN_Plugin_connect_async (priv->proxy,
|
org_freedesktop_NetworkManager_VPN_Plugin_connect_async (priv->proxy,
|
||||||
hash,
|
hash,
|
||||||
nm_vpn_connection_connect_cb,
|
nm_vpn_connection_connect_cb,
|
||||||
|
|
@ -781,7 +810,7 @@ vpn_secrets_cb (NMSettingsConnection *connection,
|
||||||
if (error)
|
if (error)
|
||||||
nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS);
|
nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS);
|
||||||
else
|
else
|
||||||
really_activate (self);
|
really_activate (self, agent_username);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -808,7 +837,7 @@ connection_need_secrets_cb (DBusGProxy *proxy,
|
||||||
nm_connection_get_id (priv->connection));
|
nm_connection_get_id (priv->connection));
|
||||||
|
|
||||||
/* No secrets required */
|
/* No secrets required */
|
||||||
really_activate (self);
|
really_activate (self, priv->username);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -861,8 +890,12 @@ existing_secrets_cb (NMSettingsConnection *connection,
|
||||||
nm_connection_get_uuid (priv->connection),
|
nm_connection_get_uuid (priv->connection),
|
||||||
nm_connection_get_id (priv->connection));
|
nm_connection_get_id (priv->connection));
|
||||||
|
|
||||||
|
/* Cache the username for later */
|
||||||
|
g_free (priv->username);
|
||||||
|
priv->username = g_strdup (agent_username);
|
||||||
|
|
||||||
/* Ask the VPN service if more secrets are required */
|
/* Ask the VPN service if more secrets are required */
|
||||||
hash = nm_connection_to_hash (priv->connection, NM_SETTING_HASH_FLAG_ALL);
|
hash = _hash_with_username (priv->connection, priv->username);
|
||||||
org_freedesktop_NetworkManager_VPN_Plugin_need_secrets_async (priv->proxy,
|
org_freedesktop_NetworkManager_VPN_Plugin_need_secrets_async (priv->proxy,
|
||||||
hash,
|
hash,
|
||||||
connection_need_secrets_cb,
|
connection_need_secrets_cb,
|
||||||
|
|
@ -1043,6 +1076,7 @@ dispose (GObject *object)
|
||||||
|
|
||||||
g_object_unref (priv->act_request);
|
g_object_unref (priv->act_request);
|
||||||
g_object_unref (priv->connection);
|
g_object_unref (priv->connection);
|
||||||
|
g_free (priv->username);
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_vpn_connection_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_vpn_connection_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue