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,7 +1070,6 @@ 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);
@@ -1094,7 +1093,6 @@ make_ip4_setting (shvarFile *ifcfg,
if (value && strlen (value)) if (value && strlen (value))
g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, value, NULL); g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, value, NULL);
g_free (value); 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)
|| !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
/* METHOD_AUTO may trigger DHCPv6, so save the hostname to send to DHCP */
value = svGetValueString (ifcfg, "DHCP_HOSTNAME"); value = svGetValueString (ifcfg, "DHCP_HOSTNAME");
if (value && value[0]) if (value && value[0])
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL); g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
g_free (value); 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,17 +2174,13 @@ 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");
if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
svSetValueBoolean (ifcfg, "PEERDNS", !nm_setting_ip_config_get_ignore_auto_dns (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)); 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
@@ -2194,14 +2190,12 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
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");
svUnsetValue (ifcfg, "IPV6_PEERROUTES");
if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
svSetValueString (ifcfg, "IPV6_PEERDNS", svSetValueString (ifcfg, "IPV6_PEERDNS",
nm_setting_ip_config_get_ignore_auto_dns (s_ip6) ? "no" : "yes"); 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");