diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c index a92191e070..14e4825f2b 100644 --- a/src/dhcp-manager/nm-dhcp-dhclient.c +++ b/src/dhcp-manager/nm-dhcp-dhclient.c @@ -455,8 +455,9 @@ dhclient_start (NMDHCPClient *client, GError *error = NULL; const char *iface, *uuid, *system_bus_address; char *binary_name, *cmd_str, *pid_file = NULL, *system_bus_address_env = NULL; - gboolean ipv6; + gboolean ipv6, success; guint log_domain; + char *escaped; g_return_val_if_fail (priv->pid_file == NULL, -1); @@ -489,6 +490,20 @@ dhclient_start (NMDHCPClient *client, g_free (priv->lease_file); priv->lease_file = get_dhclient_leasefile (iface, uuid, ipv6); + /* Save the DUID to the leasefile dhclient will actually use */ + if (ipv6) { + escaped = nm_dhcp_dhclient_escape_duid (duid); + success = nm_dhcp_dhclient_save_duid (priv->lease_file, escaped, &error); + g_free (escaped); + if (!success) { + nm_log_warn (log_domain, "(%s): failed to save DUID to %s: (%d) %s.", + iface, priv->lease_file, + error ? error->code : -1, + error && error->message ? error->message : "(unknown)"); + return -1; + } + } + argv = g_ptr_array_new (); g_ptr_array_add (argv, (gpointer) priv->path);