ifcfg-rh: save/restore dhcp related properties also when ip method != DHCP/AUTO

affected properties are: ipv4.dhcp-client-id, ipv4.fqdn,
ipv4.dhcp-timeout, ipvX.ignore-auto-routes, ipvX.ignore-auto-dns,
ipvX.dhcp-hostname and ipvX.dhcp-send-hostname.
This commit is contained in:
Francesco Giudici
2016-12-14 11:30:22 +01:00
parent c5fe886a36
commit dbb9cd3ca8
2 changed files with 49 additions and 65 deletions

View File

@@ -1070,31 +1070,29 @@ make_ip4_setting (shvarFile *ifcfg,
return NM_SETTING (s_ip4); return NM_SETTING (s_ip4);
/* Handle DHCP settings */ /* Handle DHCP settings */
if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) { value = svGetValueString (ifcfg, "DHCP_HOSTNAME");
value = svGetValueString (ifcfg, "DHCP_HOSTNAME"); if (value && *value)
if (value && *value) g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL); g_free (value);
g_free (value);
value = svGetValueString (ifcfg, "DHCP_FQDN");
if (value && *value) {
g_object_set (s_ip4,
NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, NULL,
NM_SETTING_IP4_CONFIG_DHCP_FQDN, value,
NULL);
}
g_free (value);
value = svGetValueString (ifcfg, "DHCP_FQDN");
if (value && *value) {
g_object_set (s_ip4, g_object_set (s_ip4,
NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, svGetValueBoolean (ifcfg, "DHCP_SEND_HOSTNAME", TRUE), NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, NULL,
NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, svGetValueInt64 (ifcfg, "IPV4_DHCP_TIMEOUT", 10, 0, G_MAXINT32, 0), NM_SETTING_IP4_CONFIG_DHCP_FQDN, value,
NULL); NULL);
value = svGetValueString (ifcfg, "DHCP_CLIENT_ID");
if (value && strlen (value))
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, value, NULL);
g_free (value);
} }
g_free (value);
g_object_set (s_ip4,
NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, svGetValueBoolean (ifcfg, "DHCP_SEND_HOSTNAME", TRUE),
NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, svGetValueInt64 (ifcfg, "IPV4_DHCP_TIMEOUT", 10, 0, G_MAXINT32, 0),
NULL);
value = svGetValueString (ifcfg, "DHCP_CLIENT_ID");
if (value && strlen (value))
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, value, NULL);
g_free (value);
/* Read static IP addresses. /* Read static IP addresses.
* Read them even for AUTO method - in this case the addresses are * Read them even for AUTO method - in this case the addresses are
@@ -1508,14 +1506,10 @@ make_ip6_setting (shvarFile *ifcfg,
if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0) if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0)
return NM_SETTING (s_ip6); return NM_SETTING (s_ip6);
if ( !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) value = svGetValueString (ifcfg, "DHCP_HOSTNAME");
|| !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) { if (value && value[0])
/* METHOD_AUTO may trigger DHCPv6, so save the hostname to send to DHCP */ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
value = svGetValueString (ifcfg, "DHCP_HOSTNAME"); g_free (value);
if (value && value[0])
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
g_free (value);
}
/* Read static IP addresses. /* Read static IP addresses.
* Read them even for AUTO and DHCP methods - in this case the addresses are * Read them even for AUTO and DHCP methods - in this case the addresses are

View File

@@ -2174,34 +2174,28 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svUnsetValue (ifcfg, "PEERDNS"); svUnsetValue (ifcfg, "PEERDNS");
svUnsetValue (ifcfg, "PEERROUTES"); svUnsetValue (ifcfg, "PEERROUTES");
svUnsetValue (ifcfg, "DHCP_CLIENT_ID"); svSetValueBoolean (ifcfg, "PEERDNS", !nm_setting_ip_config_get_ignore_auto_dns (s_ip4));
if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) { svSetValueBoolean (ifcfg, "PEERROUTES", !nm_setting_ip_config_get_ignore_auto_routes (s_ip4));
svSetValueBoolean (ifcfg, "PEERDNS", !nm_setting_ip_config_get_ignore_auto_dns (s_ip4));
svSetValueBoolean (ifcfg, "PEERROUTES", !nm_setting_ip_config_get_ignore_auto_routes (s_ip4));
value = nm_setting_ip_config_get_dhcp_hostname (s_ip4); value = nm_setting_ip_config_get_dhcp_hostname (s_ip4);
if (value) svSetValueString (ifcfg, "DHCP_HOSTNAME", value);
svSetValueString (ifcfg, "DHCP_HOSTNAME", value);
value = nm_setting_ip4_config_get_dhcp_fqdn (NM_SETTING_IP4_CONFIG (s_ip4)); value = nm_setting_ip4_config_get_dhcp_fqdn (NM_SETTING_IP4_CONFIG (s_ip4));
if (value) svSetValueString (ifcfg, "DHCP_FQDN", value);
svSetValueString (ifcfg, "DHCP_FQDN", value);
/* Missing DHCP_SEND_HOSTNAME means TRUE, and we prefer not write it explicitly /* Missing DHCP_SEND_HOSTNAME means TRUE, and we prefer not write it explicitly
* in that case, because it is NM-specific variable * in that case, because it is NM-specific variable
*/ */
svSetValueString (ifcfg, "DHCP_SEND_HOSTNAME", svSetValueString (ifcfg, "DHCP_SEND_HOSTNAME",
nm_setting_ip_config_get_dhcp_send_hostname (s_ip4) ? NULL : "no"); nm_setting_ip_config_get_dhcp_send_hostname (s_ip4) ? NULL : "no");
value = nm_setting_ip4_config_get_dhcp_client_id (NM_SETTING_IP4_CONFIG (s_ip4)); value = nm_setting_ip4_config_get_dhcp_client_id (NM_SETTING_IP4_CONFIG (s_ip4));
if (value) svSetValueString (ifcfg, "DHCP_CLIENT_ID", value);
svSetValueString (ifcfg, "DHCP_CLIENT_ID", value);
timeout = nm_setting_ip_config_get_dhcp_timeout (s_ip4); timeout = nm_setting_ip_config_get_dhcp_timeout (s_ip4);
tmp = timeout ? g_strdup_printf ("%d", timeout) : NULL; tmp = timeout ? g_strdup_printf ("%d", timeout) : NULL;
svSetValueString (ifcfg, "IPV4_DHCP_TIMEOUT", tmp); svSetValueString (ifcfg, "IPV4_DHCP_TIMEOUT", tmp);
g_free (tmp); g_free (tmp);
}
svSetValueBoolean (ifcfg, "IPV4_FAILURE_FATAL", !nm_setting_ip_config_get_may_fail (s_ip4)); svSetValueBoolean (ifcfg, "IPV4_FAILURE_FATAL", !nm_setting_ip_config_get_may_fail (s_ip4));
@@ -2493,13 +2487,9 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValueString (ifcfg, "IPV6_AUTOCONF", "yes"); svSetValueString (ifcfg, "IPV6_AUTOCONF", "yes");
svUnsetValue (ifcfg, "DHCPV6C"); svUnsetValue (ifcfg, "DHCPV6C");
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) { } else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
const char *hostname;
svSetValueString (ifcfg, "IPV6INIT", "yes"); svSetValueString (ifcfg, "IPV6INIT", "yes");
svSetValueString (ifcfg, "IPV6_AUTOCONF", "no"); svSetValueString (ifcfg, "IPV6_AUTOCONF", "no");
svSetValueString (ifcfg, "DHCPV6C", "yes"); svSetValueString (ifcfg, "DHCPV6C", "yes");
hostname = nm_setting_ip_config_get_dhcp_hostname (s_ip6);
if (hostname)
svSetValueString (ifcfg, "DHCP_HOSTNAME", hostname);
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) { } else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
svSetValueString (ifcfg, "IPV6INIT", "yes"); svSetValueString (ifcfg, "IPV6INIT", "yes");
svSetValueString (ifcfg, "IPV6_AUTOCONF", "no"); svSetValueString (ifcfg, "IPV6_AUTOCONF", "no");
@@ -2514,6 +2504,10 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svUnsetValue (ifcfg, "DHCPV6C"); svUnsetValue (ifcfg, "DHCPV6C");
} }
hostname = nm_setting_ip_config_get_dhcp_hostname (s_ip6);
if (hostname)
svSetValueString (ifcfg, "DHCP_HOSTNAME", hostname);
/* Write out IP addresses */ /* Write out IP addresses */
num = nm_setting_ip_config_get_num_addresses (s_ip6); num = nm_setting_ip_config_get_num_addresses (s_ip6);
ip_str1 = g_string_new (NULL); ip_str1 = g_string_new (NULL);
@@ -2577,15 +2571,11 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
else else
svSetValueString (ifcfg, "IPV6_DEFROUTE", "yes"); svSetValueString (ifcfg, "IPV6_DEFROUTE", "yes");
svUnsetValue (ifcfg, "IPV6_PEERDNS"); svSetValueString (ifcfg, "IPV6_PEERDNS",
svUnsetValue (ifcfg, "IPV6_PEERROUTES"); nm_setting_ip_config_get_ignore_auto_dns (s_ip6) ? "no" : "yes");
if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
svSetValueString (ifcfg, "IPV6_PEERDNS",
nm_setting_ip_config_get_ignore_auto_dns (s_ip6) ? "no" : "yes");
svSetValueString (ifcfg, "IPV6_PEERROUTES", svSetValueString (ifcfg, "IPV6_PEERROUTES",
nm_setting_ip_config_get_ignore_auto_routes (s_ip6) ? "no" : "yes"); nm_setting_ip_config_get_ignore_auto_routes (s_ip6) ? "no" : "yes");
}
svSetValueString (ifcfg, "IPV6_FAILURE_FATAL", svSetValueString (ifcfg, "IPV6_FAILURE_FATAL",
nm_setting_ip_config_get_may_fail (s_ip6) ? "no" : "yes"); nm_setting_ip_config_get_may_fail (s_ip6) ? "no" : "yes");