diff options
| author | Michael Biebl <biebl@debian.org> | 2026-07-03 19:53:23 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2026-07-03 19:53:23 +0200 |
| commit | aa308069bebf2d5a3200728caa69a76137c03d8b (patch) | |
| tree | c0ba2281e801c4720a0d8a5e5ee943688234f088 /src/core/vpn | |
| parent | 0a4b2c29da4ccf259bbcea3298d15abebb94348f (diff) | |
| parent | 537bfce2bda471c92caabd388589230200891509 (diff) | |
Update upstream source from tag 'upstream/1.58_rc1'
Update to upstream version '1.58~rc1' with Debian dir 451489c9234e2b6b7c2f41ca6670287ea3ac3efd
Diffstat (limited to 'src/core/vpn')
| -rw-r--r-- | src/core/vpn/nm-vpn-connection.c | 8 | ||||
| -rw-r--r-- | src/core/vpn/nm-vpn-manager.c | 35 |
2 files changed, 38 insertions, 5 deletions
diff --git a/src/core/vpn/nm-vpn-connection.c b/src/core/vpn/nm-vpn-connection.c index 54478c53..4623af9c 100644 --- a/src/core/vpn/nm-vpn-connection.c +++ b/src/core/vpn/nm-vpn-connection.c @@ -2135,16 +2135,20 @@ _dbus_signal_ip_config_cb(NMVpnConnection *self, int addr_family, GVariant *dict IS_IPv4 ? NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN : NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN, "&s", - &v_str)) + &v_str)) { nm_l3_config_data_add_domain(l3cd, addr_family, v_str); + nm_l3_config_data_add_search(l3cd, addr_family, v_str); + } if (g_variant_lookup(dict, IS_IPv4 ? NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS : NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS, "as", &var_iter)) { - while (g_variant_iter_next(var_iter, "&s", &v_str)) + while (g_variant_iter_next(var_iter, "&s", &v_str)) { nm_l3_config_data_add_domain(l3cd, addr_family, v_str); + nm_l3_config_data_add_search(l3cd, addr_family, v_str); + } g_variant_iter_free(var_iter); } diff --git a/src/core/vpn/nm-vpn-manager.c b/src/core/vpn/nm-vpn-manager.c index 6bf8edae..e49c6898 100644 --- a/src/core/vpn/nm-vpn-manager.c +++ b/src/core/vpn/nm-vpn-manager.c @@ -60,16 +60,21 @@ nm_vpn_manager_activate_connection(NMVpnManager *manager, NMVpnConnection *vpn, { NMVpnManagerPrivate *priv; NMVpnPluginInfo *plugin_info; + NMConnection *applied; const char *service_name; NMDevice *device; + const char *user; g_return_val_if_fail(NM_IS_VPN_MANAGER(manager), FALSE); g_return_val_if_fail(NM_IS_VPN_CONNECTION(vpn), FALSE); g_return_val_if_fail(!error || !*error, FALSE); - priv = NM_VPN_MANAGER_GET_PRIVATE(manager); - device = nm_active_connection_get_device(NM_ACTIVE_CONNECTION(vpn)); - g_assert(device); + priv = NM_VPN_MANAGER_GET_PRIVATE(manager); + device = nm_active_connection_get_device(NM_ACTIVE_CONNECTION(vpn)); + applied = nm_active_connection_get_applied_connection(NM_ACTIVE_CONNECTION(vpn)); + nm_assert(device); + nm_assert(applied); + if (nm_device_get_state(device) != NM_DEVICE_STATE_ACTIVATED && nm_device_get_state(device) != NM_DEVICE_STATE_SECONDARIES) { g_set_error_literal(error, @@ -101,6 +106,30 @@ nm_vpn_manager_activate_connection(NMVpnManager *manager, NMVpnConnection *vpn, return FALSE; } + user = nm_utils_get_connection_first_permissions_user(applied); + if (user) { + NMSettingConnection *s_con; + + s_con = nm_connection_get_setting_connection(applied); + nm_assert(s_con); + if (_nm_setting_connection_get_num_permissions_users(s_con) > 1) { + g_set_error_literal(error, + NM_MANAGER_ERROR, + NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE, + "private VPN connections with multiple users are not allowed."); + return FALSE; + } + + if (!nm_vpn_plugin_info_supports_safe_private_file_access(plugin_info)) { + g_set_error(error, + NM_MANAGER_ERROR, + NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE, + "The '%s' plugin doesn't support private connections.", + nm_vpn_plugin_info_get_name(plugin_info)); + return FALSE; + } + } + nm_vpn_connection_activate(vpn, plugin_info); if (!nm_vpn_plugin_info_supports_multiple(plugin_info)) { |