mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-04 00:30:17 +01:00
dns-manager: don't add "public suffix" domains to search (rh #851521)
This commit is contained in:
commit
62fd027950
4 changed files with 68 additions and 31 deletions
|
|
@ -622,6 +622,12 @@ AC_DEFINE_UNQUOTED(KERNEL_FIRMWARE_DIR, "$KERNEL_FIRMWARE_DIR", [Define to path
|
|||
AC_SUBST(KERNEL_FIRMWARE_DIR)
|
||||
|
||||
PKG_CHECK_MODULES(LIBSOUP, [libsoup-2.4 >= 2.26], [have_libsoup=yes],[have_libsoup=no])
|
||||
if test "$have_libsoup" = "yes"; then
|
||||
AC_DEFINE(HAVE_LIBSOUP, 1, [Define if you have libsoup])
|
||||
else
|
||||
AC_DEFINE(HAVE_LIBSOUP, 0, [Define if you have libsoup])
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(concheck, AS_HELP_STRING([--enable-concheck], [enable connectivity checking support]),
|
||||
[enable_concheck=${enableval}], [enable_concheck=${have_libsoup}])
|
||||
if (test "${enable_concheck}" = "yes"); then
|
||||
|
|
|
|||
|
|
@ -46,6 +46,16 @@
|
|||
#include "nm-dns-plugin.h"
|
||||
#include "nm-dns-dnsmasq.h"
|
||||
|
||||
#ifdef HAVE_LIBSOUP
|
||||
#include <libsoup/soup.h>
|
||||
#endif
|
||||
|
||||
#if defined (SOUP_CHECK_VERSION) && SOUP_CHECK_VERSION (2, 40, 0)
|
||||
#define DOMAIN_IS_VALID(domain) (*(domain) && !soup_tld_domain_is_public_suffix (domain))
|
||||
#else
|
||||
#define DOMAIN_IS_VALID(domain) (*(domain))
|
||||
#endif
|
||||
|
||||
G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
|
||||
|
||||
#define NM_DNS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
|
||||
|
|
@ -129,14 +139,22 @@ merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
|
|||
const char *domain;
|
||||
|
||||
domain = nm_ip4_config_get_domain (src, i);
|
||||
if (!DOMAIN_IS_VALID (domain))
|
||||
continue;
|
||||
if (!rc->domain)
|
||||
rc->domain = domain;
|
||||
add_string_item (rc->searches, domain);
|
||||
}
|
||||
|
||||
num = nm_ip4_config_get_num_searches (src);
|
||||
for (i = 0; i < num; i++)
|
||||
add_string_item (rc->searches, nm_ip4_config_get_search (src, i));
|
||||
for (i = 0; i < num; i++) {
|
||||
const char *search;
|
||||
|
||||
search = nm_ip4_config_get_search (src, i);
|
||||
if (!DOMAIN_IS_VALID (search))
|
||||
continue;
|
||||
add_string_item (rc->searches, search);
|
||||
}
|
||||
|
||||
/* NIS stuff */
|
||||
num = nm_ip4_config_get_num_nis_servers (src);
|
||||
|
|
@ -194,14 +212,22 @@ merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src)
|
|||
const char *domain;
|
||||
|
||||
domain = nm_ip6_config_get_domain (src, i);
|
||||
if (!DOMAIN_IS_VALID (domain))
|
||||
continue;
|
||||
if (!rc->domain)
|
||||
rc->domain = domain;
|
||||
add_string_item (rc->searches, domain);
|
||||
}
|
||||
|
||||
num = nm_ip6_config_get_num_searches (src);
|
||||
for (i = 0; i < num; i++)
|
||||
add_string_item (rc->searches, nm_ip6_config_get_search (src, i));
|
||||
for (i = 0; i < num; i++) {
|
||||
const char *search;
|
||||
|
||||
search = nm_ip6_config_get_search (src, i);
|
||||
if (!DOMAIN_IS_VALID (search))
|
||||
continue;
|
||||
add_string_item (rc->searches, search);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -636,7 +662,7 @@ update_dns (NMDnsManager *self,
|
|||
const char *hostsearch = strchr (priv->hostname, '.');
|
||||
|
||||
/* +1 to get rid of the dot */
|
||||
if (hostsearch && strlen (hostsearch + 1))
|
||||
if (hostsearch && DOMAIN_IS_VALID (hostsearch + 1))
|
||||
add_string_item (rc.searches, hostsearch + 1);
|
||||
}
|
||||
|
||||
|
|
@ -944,9 +970,18 @@ nm_dns_manager_remove_ip6_config (NMDnsManager *mgr, NMIP6Config *config)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
nm_dns_manager_set_initial_hostname (NMDnsManager *mgr,
|
||||
const char *hostname)
|
||||
{
|
||||
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
|
||||
|
||||
priv->hostname = g_strdup (hostname);
|
||||
}
|
||||
|
||||
void
|
||||
nm_dns_manager_set_hostname (NMDnsManager *mgr,
|
||||
const char *hostname)
|
||||
const char *hostname)
|
||||
{
|
||||
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
|
||||
GError *error = NULL;
|
||||
|
|
@ -1044,8 +1079,7 @@ nm_dns_manager_get (void)
|
|||
if (!singleton) {
|
||||
singleton = NM_DNS_MANAGER (g_object_new (NM_TYPE_DNS_MANAGER, NULL));
|
||||
g_assert (singleton);
|
||||
} else
|
||||
g_object_ref (singleton);
|
||||
}
|
||||
|
||||
return singleton;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,8 +87,10 @@ gboolean nm_dns_manager_add_ip6_config (NMDnsManager *mgr,
|
|||
|
||||
gboolean nm_dns_manager_remove_ip6_config (NMDnsManager *mgr, NMIP6Config *config);
|
||||
|
||||
void nm_dns_manager_set_hostname (NMDnsManager *mgr,
|
||||
const char *hostname);
|
||||
void nm_dns_manager_set_initial_hostname (NMDnsManager *mgr,
|
||||
const char *hostname);
|
||||
void nm_dns_manager_set_hostname (NMDnsManager *mgr,
|
||||
const char *hostname);
|
||||
|
||||
/**
|
||||
* NMDnsManagerResolvConfMode:
|
||||
|
|
|
|||
|
|
@ -900,13 +900,11 @@ static void
|
|||
update_routing_and_dns (NMPolicy *policy, gboolean force_update)
|
||||
{
|
||||
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
|
||||
NMDnsManager *mgr;
|
||||
|
||||
mgr = nm_dns_manager_get ();
|
||||
nm_dns_manager_begin_updates (mgr, __func__);
|
||||
nm_dns_manager_begin_updates (priv->dns_manager, __func__);
|
||||
|
||||
update_ip4_dns (policy, mgr);
|
||||
update_ip6_dns (policy, mgr);
|
||||
update_ip4_dns (policy, priv->dns_manager);
|
||||
update_ip6_dns (policy, priv->dns_manager);
|
||||
|
||||
update_ip4_routing (policy, force_update);
|
||||
update_ip6_routing (policy, force_update);
|
||||
|
|
@ -914,8 +912,7 @@ update_routing_and_dns (NMPolicy *policy, gboolean force_update)
|
|||
/* Update the system hostname */
|
||||
update_system_hostname (policy, priv->default_device4, priv->default_device6);
|
||||
|
||||
nm_dns_manager_end_updates (mgr, __func__);
|
||||
g_object_unref (mgr);
|
||||
nm_dns_manager_end_updates (priv->dns_manager, __func__);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1713,13 +1710,12 @@ device_removed (NMManager *manager, NMDevice *device, gpointer user_data)
|
|||
static void
|
||||
vpn_connection_activated (NMPolicy *policy, NMVPNConnection *vpn)
|
||||
{
|
||||
NMDnsManager *mgr;
|
||||
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
|
||||
NMIP4Config *ip4_config;
|
||||
NMIP6Config *ip6_config;
|
||||
const char *ip_iface;
|
||||
|
||||
mgr = nm_dns_manager_get ();
|
||||
nm_dns_manager_begin_updates (mgr, __func__);
|
||||
nm_dns_manager_begin_updates (priv->dns_manager, __func__);
|
||||
|
||||
ip_iface = nm_vpn_connection_get_ip_iface (vpn);
|
||||
|
||||
|
|
@ -1727,42 +1723,41 @@ vpn_connection_activated (NMPolicy *policy, NMVPNConnection *vpn)
|
|||
|
||||
ip4_config = nm_vpn_connection_get_ip4_config (vpn);
|
||||
if (ip4_config)
|
||||
nm_dns_manager_add_ip4_config (mgr, ip_iface, ip4_config, NM_DNS_IP_CONFIG_TYPE_VPN);
|
||||
nm_dns_manager_add_ip4_config (priv->dns_manager, ip_iface, ip4_config, NM_DNS_IP_CONFIG_TYPE_VPN);
|
||||
|
||||
ip6_config = nm_vpn_connection_get_ip6_config (vpn);
|
||||
if (ip6_config)
|
||||
nm_dns_manager_add_ip6_config (mgr, ip_iface, ip6_config, NM_DNS_IP_CONFIG_TYPE_VPN);
|
||||
nm_dns_manager_add_ip6_config (priv->dns_manager, ip_iface, ip6_config, NM_DNS_IP_CONFIG_TYPE_VPN);
|
||||
|
||||
update_routing_and_dns (policy, TRUE);
|
||||
|
||||
nm_dns_manager_end_updates (mgr, __func__);
|
||||
nm_dns_manager_end_updates (priv->dns_manager, __func__);
|
||||
}
|
||||
|
||||
static void
|
||||
vpn_connection_deactivated (NMPolicy *policy, NMVPNConnection *vpn)
|
||||
{
|
||||
NMDnsManager *mgr;
|
||||
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
|
||||
NMIP4Config *ip4_config;
|
||||
NMIP6Config *ip6_config;
|
||||
|
||||
mgr = nm_dns_manager_get ();
|
||||
nm_dns_manager_begin_updates (mgr, __func__);
|
||||
nm_dns_manager_begin_updates (priv->dns_manager, __func__);
|
||||
|
||||
ip4_config = nm_vpn_connection_get_ip4_config (vpn);
|
||||
if (ip4_config) {
|
||||
/* Remove the VPN connection's IP4 config from DNS */
|
||||
nm_dns_manager_remove_ip4_config (mgr, ip4_config);
|
||||
nm_dns_manager_remove_ip4_config (priv->dns_manager, ip4_config);
|
||||
}
|
||||
|
||||
ip6_config = nm_vpn_connection_get_ip6_config (vpn);
|
||||
if (ip6_config) {
|
||||
/* Remove the VPN connection's IP6 config from DNS */
|
||||
nm_dns_manager_remove_ip6_config (mgr, ip6_config);
|
||||
nm_dns_manager_remove_ip6_config (priv->dns_manager, ip6_config);
|
||||
}
|
||||
|
||||
update_routing_and_dns (policy, TRUE);
|
||||
|
||||
nm_dns_manager_end_updates (mgr, __func__);
|
||||
nm_dns_manager_end_updates (priv->dns_manager, __func__);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -2097,8 +2092,9 @@ nm_policy_new (NMManager *manager, NMSettings *settings)
|
|||
priv->fw_started_id = id;
|
||||
|
||||
priv->dns_manager = nm_dns_manager_get ();
|
||||
nm_dns_manager_set_initial_hostname (priv->dns_manager, priv->orig_hostname);
|
||||
priv->config_changed_id = g_signal_connect (priv->dns_manager, "config-changed",
|
||||
G_CALLBACK (dns_config_changed), policy);
|
||||
G_CALLBACK (dns_config_changed), policy);
|
||||
|
||||
priv->resolver = g_resolver_get_default ();
|
||||
|
||||
|
|
@ -2210,7 +2206,6 @@ dispose (GObject *object)
|
|||
|
||||
if (priv->dns_manager) {
|
||||
g_signal_handler_disconnect (priv->dns_manager, priv->config_changed_id);
|
||||
g_object_unref (priv->dns_manager);
|
||||
priv->dns_manager = NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue