about summary refs log tree commit diff
path: root/src/dhcp-manager
diff options
context:
space:
mode:
Diffstat (limited to 'src/dhcp-manager')
-rw-r--r--src/dhcp-manager/Makefile.am7
-rw-r--r--src/dhcp-manager/Makefile.in9
-rw-r--r--src/dhcp-manager/nm-dhcp-client.c20
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.c4
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient.c2
-rw-r--r--src/dhcp-manager/nm-dhcp-dhcpcd.c14
-rw-r--r--src/dhcp-manager/nm-dhcp-manager.c7
-rw-r--r--src/dhcp-manager/tests/Makefile.am7
-rw-r--r--src/dhcp-manager/tests/Makefile.in9
9 files changed, 61 insertions, 18 deletions
diff --git a/src/dhcp-manager/Makefile.am b/src/dhcp-manager/Makefile.am
index 40a05834..f32a2167 100644
--- a/src/dhcp-manager/Makefile.am
+++ b/src/dhcp-manager/Makefile.am
@@ -1,6 +1,6 @@
 SUBDIRS = . tests
 
-INCLUDES = \
+AM_CPPFLAGS = \
 	-I${top_srcdir} \
 	-I${top_builddir}/include \
 	-I${top_srcdir}/include \
@@ -10,7 +10,8 @@ INCLUDES = \
 	-I${top_srcdir}/src/posix-signals \
 	-I${top_builddir}/libnm-util \
 	-I${top_srcdir}/libnm-util \
-	-I${top_srcdir}/src
+	-I${top_srcdir}/src \
+	-DRUNDIR=\"$(rundir)\"
 
 noinst_LTLIBRARIES = libdhcp-manager.la libdhcp-dhclient.la
 
@@ -25,6 +26,7 @@ libdhcp_dhclient_la_SOURCES = \
 libdhcp_dhclient_la_CPPFLAGS = \
 	$(DBUS_CFLAGS) \
 	$(GLIB_CFLAGS) \
+	$(AM_CPPFLAGS) \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
 	-DLIBEXECDIR=\"$(libexecdir)\" \
 	-DLOCALSTATEDIR=\"$(localstatedir)\" \
@@ -52,6 +54,7 @@ libdhcp_manager_la_SOURCES = \
 libdhcp_manager_la_CPPFLAGS = \
 	$(DBUS_CFLAGS) \
 	$(GLIB_CFLAGS) \
+	$(AM_CPPFLAGS) \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
 	-DLIBEXECDIR=\"$(libexecdir)\" \
 	-DLOCALSTATEDIR=\"$(localstatedir)\" \
diff --git a/src/dhcp-manager/Makefile.in b/src/dhcp-manager/Makefile.in
index 31920ec4..db4b0c91 100644
--- a/src/dhcp-manager/Makefile.in
+++ b/src/dhcp-manager/Makefile.in
@@ -260,6 +260,7 @@ DEPDIR = @DEPDIR@
 DHCLIENT_PATH = @DHCLIENT_PATH@
 DHCPCD_PATH = @DHCPCD_PATH@
 DLLTOOL = @DLLTOOL@
+DNSMASQ_PATH = @DNSMASQ_PATH@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -282,6 +283,7 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
 GNUTLS_LIBS = @GNUTLS_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
 GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
 GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
 GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -467,7 +469,7 @@ with_dhcpcd = @with_dhcpcd@
 with_netconfig = @with_netconfig@
 with_resolvconf = @with_resolvconf@
 SUBDIRS = . tests
-INCLUDES = \
+AM_CPPFLAGS = \
 	-I${top_srcdir} \
 	-I${top_builddir}/include \
 	-I${top_srcdir}/include \
@@ -477,7 +479,8 @@ INCLUDES = \
 	-I${top_srcdir}/src/posix-signals \
 	-I${top_builddir}/libnm-util \
 	-I${top_srcdir}/libnm-util \
-	-I${top_srcdir}/src
+	-I${top_srcdir}/src \
+	-DRUNDIR=\"$(rundir)\"
 
 noinst_LTLIBRARIES = libdhcp-manager.la libdhcp-dhclient.la
 
@@ -491,6 +494,7 @@ libdhcp_dhclient_la_SOURCES = \
 libdhcp_dhclient_la_CPPFLAGS = \
 	$(DBUS_CFLAGS) \
 	$(GLIB_CFLAGS) \
+	$(AM_CPPFLAGS) \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
 	-DLIBEXECDIR=\"$(libexecdir)\" \
 	-DLOCALSTATEDIR=\"$(localstatedir)\" \
@@ -518,6 +522,7 @@ libdhcp_manager_la_SOURCES = \
 libdhcp_manager_la_CPPFLAGS = \
 	$(DBUS_CFLAGS) \
 	$(GLIB_CFLAGS) \
+	$(AM_CPPFLAGS) \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
 	-DLIBEXECDIR=\"$(libexecdir)\" \
 	-DLOCALSTATEDIR=\"$(localstatedir)\" \
diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
index f4e94a6e..980fcab8 100644
--- a/src/dhcp-manager/nm-dhcp-client.c
+++ b/src/dhcp-manager/nm-dhcp-client.c
@@ -1533,16 +1533,26 @@ dispose (GObject *object)
 	 * the DHCP client.
 	 */
 
-	if (priv->remove_id)
+	if (priv->remove_id) {
 		g_source_remove (priv->remove_id);
+		priv->remove_id = 0;
+	}
+
+	if (priv->options) {
+		g_hash_table_destroy (priv->options);
+		priv->options = NULL;
+	}
+	g_clear_pointer (&priv->iface, g_free);
 
-	g_hash_table_destroy (priv->options);
-	g_free (priv->iface);
-	if (priv->hwaddr)
+	if (priv->hwaddr) {
 		g_byte_array_free (priv->hwaddr, TRUE);
+		priv->hwaddr = NULL;
+	}
 
-	if (priv->duid)
+	if (priv->duid) {
 		g_byte_array_free (priv->duid, TRUE);
+		priv->duid = NULL;
+	}
 
 	G_OBJECT_CLASS (nm_dhcp_client_parent_class)->dispose (object);
 }
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.c b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
index 89fa51ee..db4bf7e8 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient-utils.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
@@ -168,6 +168,10 @@ nm_dhcp_dhclient_create_config (const char *interface,
 					continue;
 			}
 
+			/* Ignore 'script' since we pass our own */
+			if (g_str_has_prefix (p, "script "))
+				continue;
+
 			/* Check for "also require" */
 			if (!strncmp (p, ALSOREQ_TAG, strlen (ALSOREQ_TAG))) {
 				in_alsoreq = TRUE;
diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c
index 5b64b132..9a42f0e4 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient.c
@@ -339,7 +339,7 @@ nm_dhcp_dhclient_get_lease_config (const char *iface, const char *uuid, gboolean
 	}
 
 out:
-	g_slist_foreach (parsed, (GFunc) g_hash_table_destroy, NULL);
+	g_slist_free_full (parsed, (GDestroyNotify) g_hash_table_destroy);
 	g_free (leasefile);
 	return leases;
 }
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c
index f3245ee5..f978cccc 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.c
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c
@@ -21,6 +21,7 @@
  */
 
 
+#include <config.h>
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <dbus/dbus.h>
@@ -110,7 +111,10 @@ ip4_start (NMDHCPClient *client,
 	iface = nm_dhcp_client_get_iface (client);
 	uuid = nm_dhcp_client_get_uuid (client);
 
-	priv->pid_file = g_strdup_printf (NMSTATEDIR "/dhcpcd-%s.pid", iface);
+	/* dhcpcd does not allow custom pidfiles; the pidfile is always
+	 * RUNDIR "dhcpcd-<ifname>.pid".
+	 */
+	priv->pid_file = g_strdup_printf (RUNDIR "/dhcpcd-%s.pid", iface);
 	if (!priv->pid_file) {
 		nm_log_warn (LOGD_DHCP4, "(%s): not enough memory for dhcpcd options.", iface);
 		return -1;
@@ -140,6 +144,14 @@ ip4_start (NMDHCPClient *client,
 	g_ptr_array_add (argv, (gpointer) "-c");	/* Set script file */
 	g_ptr_array_add (argv, (gpointer) ACTION_SCRIPT_PATH );
 
+#ifdef DHCPCD_SUPPORTS_IPV6
+	/* IPv4-only for now.  NetworkManager knows better than dhcpcd when to
+	 * run IPv6, and dhcpcd's automatic Router Solicitations cause problems
+	 * with devices that don't expect them.
+	 */
+	g_ptr_array_add (argv, (gpointer) "-4");
+#endif
+
 	if (hostname && strlen (hostname)) {
 		g_ptr_array_add (argv, (gpointer) "-h");	/* Send hostname to DHCP server */
 		g_ptr_array_add (argv, (gpointer) hostname );
diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c
index 7088839a..d40eb48d 100644
--- a/src/dhcp-manager/nm-dhcp-manager.c
+++ b/src/dhcp-manager/nm-dhcp-manager.c
@@ -554,13 +554,18 @@ nm_dhcp_manager_get_lease_config (NMDHCPManager *self,
                                   const char *uuid,
                                   gboolean ipv6)
 {
-	NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+	NMDHCPManagerPrivate *priv;
 
+	g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL);
 	g_return_val_if_fail (iface != NULL, NULL);
 	g_return_val_if_fail (uuid != NULL, NULL);
 
+	priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+
 	if (priv->get_lease_config_func)
 		return priv->get_lease_config_func (iface, uuid, ipv6);
+
+	nm_log_warn (LOGD_DHCP, "Cannot get a DHCP lease config (no usable DHCP client was found!)");
 	return NULL;
 }
 
diff --git a/src/dhcp-manager/tests/Makefile.am b/src/dhcp-manager/tests/Makefile.am
index 8c9d06c1..bf859fe7 100644
--- a/src/dhcp-manager/tests/Makefile.am
+++ b/src/dhcp-manager/tests/Makefile.am
@@ -1,11 +1,12 @@
 if ENABLE_TESTS
 
-INCLUDES = \
+AM_CPPFLAGS = \
 	-I$(top_srcdir)/include \
 	-I$(top_builddir)/include \
 	-I${top_srcdir}/libnm-util \
 	-I${top_builddir}/libnm-util \
-	-I$(top_srcdir)/src/dhcp-manager
+	-I$(top_srcdir)/src/dhcp-manager \
+	$(GLIB_CFLAGS)
 
 noinst_PROGRAMS = test-dhcp-dhclient
 
@@ -15,7 +16,7 @@ test_dhcp_dhclient_SOURCES = \
 	test-dhcp-dhclient.c
 
 test_dhcp_dhclient_CPPFLAGS = \
-	$(GLIB_CFLAGS) \
+	$(AM_CPPFLAGS) \
 	-DTESTDIR="\"$(abs_srcdir)\""
 
 test_dhcp_dhclient_LDADD = \
diff --git a/src/dhcp-manager/tests/Makefile.in b/src/dhcp-manager/tests/Makefile.in
index bb28cb9e..afcee2c0 100644
--- a/src/dhcp-manager/tests/Makefile.in
+++ b/src/dhcp-manager/tests/Makefile.in
@@ -206,6 +206,7 @@ DEPDIR = @DEPDIR@
 DHCLIENT_PATH = @DHCLIENT_PATH@
 DHCPCD_PATH = @DHCPCD_PATH@
 DLLTOOL = @DLLTOOL@
+DNSMASQ_PATH = @DNSMASQ_PATH@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -228,6 +229,7 @@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
 GNUTLS_LIBS = @GNUTLS_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
 GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
 GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
 GTKDOC_MKPDF = @GTKDOC_MKPDF@
@@ -412,12 +414,13 @@ with_dhclient = @with_dhclient@
 with_dhcpcd = @with_dhcpcd@
 with_netconfig = @with_netconfig@
 with_resolvconf = @with_resolvconf@
-@ENABLE_TESTS_TRUE@INCLUDES = \
+@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
 @ENABLE_TESTS_TRUE@	-I$(top_srcdir)/include \
 @ENABLE_TESTS_TRUE@	-I$(top_builddir)/include \
 @ENABLE_TESTS_TRUE@	-I${top_srcdir}/libnm-util \
 @ENABLE_TESTS_TRUE@	-I${top_builddir}/libnm-util \
-@ENABLE_TESTS_TRUE@	-I$(top_srcdir)/src/dhcp-manager
+@ENABLE_TESTS_TRUE@	-I$(top_srcdir)/src/dhcp-manager \
+@ENABLE_TESTS_TRUE@	$(GLIB_CFLAGS)
 
 
 ####### policy /etc/hosts test #######
@@ -425,7 +428,7 @@ with_resolvconf = @with_resolvconf@
 @ENABLE_TESTS_TRUE@	test-dhcp-dhclient.c
 
 @ENABLE_TESTS_TRUE@test_dhcp_dhclient_CPPFLAGS = \
-@ENABLE_TESTS_TRUE@	$(GLIB_CFLAGS) \
+@ENABLE_TESTS_TRUE@	$(AM_CPPFLAGS) \
 @ENABLE_TESTS_TRUE@	-DTESTDIR="\"$(abs_srcdir)\""
 
 @ENABLE_TESTS_TRUE@test_dhcp_dhclient_LDADD = \