summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2017-03-20 16:57:58 +0000
committerLubomir Rintel <lkundrak@v3.sk>2017-03-22 12:09:39 +0100
commitc05befd5aadf9dd2702a888f79b0ed4cdba963f9 (patch)
treeee44612e6b562ec89e70c4fbcb5e8b5274d0f17b
parent80dfb8cdab6238dcf1099d4dea9bb396ff0f5ee9 (diff)
downloadNetworkManager-c05befd5aadf9dd2702a888f79b0ed4cdba963f9.tar.gz
dns-manager: use libpsl directly
...instead of via libsoup. This makes it possible to do gTLD suffix checking even if we're building without libsoup support.
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac14
-rw-r--r--contrib/fedora/REQUIRED_PACKAGES1
-rw-r--r--contrib/fedora/rpm/NetworkManager.spec1
-rw-r--r--src/dns/nm-dns-manager.c15
5 files changed, 22 insertions, 11 deletions
diff --git a/Makefile.am b/Makefile.am
index 8ee15b5be5..6d2df51c57 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1034,6 +1034,7 @@ src_cppflags = \
$(GUDEV_CFLAGS) \
$(LIBNL_CFLAGS) \
$(LIBNDP_CFLAGS) \
+ $(LIBPSL_CFLAGS) \
$(LIBSOUP_CFLAGS) \
$(SELINUX_CFLAGS) \
$(LIBAUDIT_CFLAGS) \
@@ -1470,6 +1471,7 @@ src_libNetworkManager_la_LIBADD = \
$(LIBM) \
$(SELINUX_LIBS) \
$(LIBAUDIT_LIBS) \
+ $(LIBPSL_LIBS) \
$(LIBSOUP_LIBS)
###############################################################################
diff --git a/configure.ac b/configure.ac
index 3af9c4a22c..d42489d8c9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -965,6 +965,19 @@ fi
AC_DEFINE_UNQUOTED(KERNEL_FIRMWARE_DIR, "$KERNEL_FIRMWARE_DIR", [Define to path of the kernel firmware directory])
AC_SUBST(KERNEL_FIRMWARE_DIR)
+PKG_CHECK_MODULES(LIBPSL, [libpsl >= 0.1], [have_libpsl=yes],[have_libpsl=no])
+AC_ARG_WITH(libpsl, AS_HELP_STRING([--with-libpsl=yes|no], [Link against libpsl]), [], [with_libpsl=${have_libpsl}])
+if test "$with_libpsl" != "no"; then
+ if test "$have_libpsl" != "yes"; then
+ AC_MSG_ERROR(libpsl library not found)
+ fi
+ with_libpsl='yes'
+ AC_DEFINE(WITH_LIBPSL, 1, [Define if you have libpsl])
+else
+ AC_DEFINE(WITH_LIBPSL, 0, [Define if you have libpsl])
+fi
+AM_CONDITIONAL(WITH_LIBPSL, test "$with_libpsl" != "no")
+
PKG_CHECK_MODULES(LIBSOUP, [libsoup-2.4 >= 2.40], [have_libsoup=yes],[have_libsoup=no])
AC_ARG_WITH(libsoup, AS_HELP_STRING([--with-libsoup=yes|no], [Link against libsoup]), [], [with_libsoup=${have_libsoup}])
if test "$with_libsoup" != "no"; then
@@ -1296,4 +1309,5 @@ echo " LTO: $enable_lto"
echo " linker garbage collection: $enable_ld_gc"
echo " JSON validation for libnm: $enable_json_validation"
echo " sanitizers: $sanitizers"
+echo " Mozilla Public Suffix List: $with_libpsl"
echo
diff --git a/contrib/fedora/REQUIRED_PACKAGES b/contrib/fedora/REQUIRED_PACKAGES
index 14d15d2b8b..4cc39995f2 100644
--- a/contrib/fedora/REQUIRED_PACKAGES
+++ b/contrib/fedora/REQUIRED_PACKAGES
@@ -35,6 +35,7 @@ yum install \
dbus-x11 \
wireless-tools-devel \
polkit-devel \
+ libpsl-devel \
libsoup-devel \
readline-devel \
teamd-devel \
diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec
index 7e02cdac58..f0bcc53fd4 100644
--- a/contrib/fedora/rpm/NetworkManager.spec
+++ b/contrib/fedora/rpm/NetworkManager.spec
@@ -137,6 +137,7 @@ BuildRequires: libxslt
BuildRequires: bluez-libs-devel
%endif
BuildRequires: systemd >= 200-3 systemd-devel
+BuildRequires: libpsl-devel >= 0.1
BuildRequires: libsoup-devel
BuildRequires: libndp-devel >= 1.0
%if 0%{?with_modem_manager_1}
diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c
index 5b83eeba65..25876e5ef4 100644
--- a/src/dns/nm-dns-manager.c
+++ b/src/dns/nm-dns-manager.c
@@ -52,17 +52,10 @@
#include "introspection/org.freedesktop.NetworkManager.DnsManager.h"
-#if WITH_LIBSOUP
-#include <libsoup/soup.h>
-
-#ifdef SOUP_CHECK_VERSION
-#if SOUP_CHECK_VERSION (2, 40, 0)
-#define DOMAIN_IS_VALID(domain) (*(domain) && !soup_tld_domain_is_public_suffix (domain))
-#endif
-#endif
-#endif
-
-#ifndef DOMAIN_IS_VALID
+#if WITH_LIBPSL
+#include <libpsl.h>
+#define DOMAIN_IS_VALID(domain) (*(domain) && !psl_is_public_suffix (psl_builtin (), domain))
+#else
#define DOMAIN_IS_VALID(domain) (*(domain))
#endif