ifcfg-rh: merge branch 'fg/dhcp_hostname_bgo775622'
https://bugzilla.gnome.org/show_bug.cgi?id=775622
This commit is contained in:
@@ -1892,6 +1892,7 @@ EXTRA_DIST += \
|
||||
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-plus-ip \
|
||||
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-shared-plus-ip \
|
||||
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp-send-hostname \
|
||||
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcpv6-hostname-fallback \
|
||||
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp6-only \
|
||||
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-autoip \
|
||||
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-global-gateway \
|
||||
|
@@ -411,7 +411,7 @@ dispose (GObject *object)
|
||||
|
||||
if (priv->clients) {
|
||||
values = g_hash_table_get_values (priv->clients);
|
||||
for (iter = values; iter; iter = g_list_next (iter))
|
||||
for (iter = values; iter; iter = g_list_next (iter))
|
||||
remove_client (NM_DHCP_MANAGER (object), NM_DHCP_CLIENT (iter->data));
|
||||
g_list_free (values);
|
||||
}
|
||||
|
@@ -1070,31 +1070,29 @@ make_ip4_setting (shvarFile *ifcfg,
|
||||
return NM_SETTING (s_ip4);
|
||||
|
||||
/* Handle DHCP settings */
|
||||
if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
|
||||
value = svGetValueString (ifcfg, "DHCP_HOSTNAME");
|
||||
if (value && *value)
|
||||
g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
|
||||
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_HOSTNAME");
|
||||
if (value && *value)
|
||||
g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
|
||||
g_free (value);
|
||||
|
||||
value = svGetValueString (ifcfg, "DHCP_FQDN");
|
||||
if (value && *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);
|
||||
NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, NULL,
|
||||
NM_SETTING_IP4_CONFIG_DHCP_FQDN, value,
|
||||
NULL);
|
||||
}
|
||||
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 them even for AUTO method - in this case the addresses are
|
||||
@@ -1508,14 +1506,22 @@ make_ip6_setting (shvarFile *ifcfg,
|
||||
if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0)
|
||||
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, "DHCPV6_HOSTNAME");
|
||||
/* Use DHCP_HOSTNAME as fallback if it is in FQDN format and ipv6.method is
|
||||
* auto or dhcp: this is required to support old ifcfg files
|
||||
*/
|
||||
if (!value && ( !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
|
||||
|| !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP))) {
|
||||
value = svGetValueString (ifcfg, "DHCP_HOSTNAME");
|
||||
if (value && value[0])
|
||||
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
|
||||
g_free (value);
|
||||
if (value && !strchr (value, '.'))
|
||||
g_clear_pointer (&value, g_free);
|
||||
}
|
||||
if (value)
|
||||
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
|
||||
g_free (value);
|
||||
|
||||
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME,
|
||||
svGetValueBoolean (ifcfg, "DHCPV6_SEND_HOSTNAME", TRUE), NULL);
|
||||
|
||||
/* Read static IP addresses.
|
||||
* Read them even for AUTO and DHCP methods - in this case the addresses are
|
||||
|
@@ -2172,36 +2172,32 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
|
||||
/* DEFROUTE; remember that it has the opposite meaning from never-default */
|
||||
svSetValueBoolean (ifcfg, "DEFROUTE", !nm_setting_ip_config_get_never_default (s_ip4));
|
||||
|
||||
svUnsetValue (ifcfg, "PEERDNS");
|
||||
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, "PEERROUTES", !nm_setting_ip_config_get_ignore_auto_routes (s_ip4));
|
||||
/* Missing PEERDNS means TRUE, so write it only when is FALSE */
|
||||
svSetValueString (ifcfg, "PEERDNS",
|
||||
nm_setting_ip_config_get_ignore_auto_dns (s_ip4) ? "no" : NULL);
|
||||
/* Missing PEERROUTES means TRUE, so write it only when is FALSE */
|
||||
svSetValueString (ifcfg, "PEERROUTES",
|
||||
nm_setting_ip_config_get_ignore_auto_routes (s_ip4) ? "no" : NULL);
|
||||
|
||||
value = nm_setting_ip_config_get_dhcp_hostname (s_ip4);
|
||||
if (value)
|
||||
svSetValueString (ifcfg, "DHCP_HOSTNAME", value);
|
||||
value = nm_setting_ip_config_get_dhcp_hostname (s_ip4);
|
||||
svSetValueString (ifcfg, "DHCP_HOSTNAME", value);
|
||||
|
||||
value = nm_setting_ip4_config_get_dhcp_fqdn (NM_SETTING_IP4_CONFIG (s_ip4));
|
||||
if (value)
|
||||
svSetValueString (ifcfg, "DHCP_FQDN", value);
|
||||
value = nm_setting_ip4_config_get_dhcp_fqdn (NM_SETTING_IP4_CONFIG (s_ip4));
|
||||
svSetValueString (ifcfg, "DHCP_FQDN", value);
|
||||
|
||||
/* Missing DHCP_SEND_HOSTNAME means TRUE, and we prefer not write it explicitly
|
||||
* in that case, because it is NM-specific variable
|
||||
*/
|
||||
svSetValueString (ifcfg, "DHCP_SEND_HOSTNAME",
|
||||
nm_setting_ip_config_get_dhcp_send_hostname (s_ip4) ? NULL : "no");
|
||||
/* Missing DHCP_SEND_HOSTNAME means TRUE, and we prefer not write it explicitly
|
||||
* in that case, because it is NM-specific variable
|
||||
*/
|
||||
svSetValueString (ifcfg, "DHCP_SEND_HOSTNAME",
|
||||
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));
|
||||
if (value)
|
||||
svSetValueString (ifcfg, "DHCP_CLIENT_ID", value);
|
||||
value = nm_setting_ip4_config_get_dhcp_client_id (NM_SETTING_IP4_CONFIG (s_ip4));
|
||||
svSetValueString (ifcfg, "DHCP_CLIENT_ID", value);
|
||||
|
||||
timeout = nm_setting_ip_config_get_dhcp_timeout (s_ip4);
|
||||
tmp = timeout ? g_strdup_printf ("%d", timeout) : NULL;
|
||||
svSetValueString (ifcfg, "IPV4_DHCP_TIMEOUT", tmp);
|
||||
g_free (tmp);
|
||||
}
|
||||
timeout = nm_setting_ip_config_get_dhcp_timeout (s_ip4);
|
||||
tmp = timeout ? g_strdup_printf ("%d", timeout) : NULL;
|
||||
svSetValueString (ifcfg, "IPV4_DHCP_TIMEOUT", tmp);
|
||||
g_free (tmp);
|
||||
|
||||
svSetValueBoolean (ifcfg, "IPV4_FAILURE_FATAL", !nm_setting_ip_config_get_may_fail (s_ip4));
|
||||
|
||||
@@ -2446,6 +2442,23 @@ error:
|
||||
return success;
|
||||
}
|
||||
|
||||
static void
|
||||
write_ip6_setting_dhcp_hostname (NMSettingIPConfig *s_ip6, shvarFile *ifcfg)
|
||||
{
|
||||
const char *hostname;
|
||||
|
||||
hostname = nm_setting_ip_config_get_dhcp_hostname (s_ip6);
|
||||
svSetValueString (ifcfg, "DHCPV6_HOSTNAME", hostname);
|
||||
|
||||
/* Missing DHCPV6_SEND_HOSTNAME means TRUE, and we prefer not write it
|
||||
* explicitly in that case, because it is NM-specific variable
|
||||
*/
|
||||
if (nm_setting_ip_config_get_dhcp_send_hostname (s_ip6))
|
||||
svUnsetValue (ifcfg, "DHCPV6_SEND_HOSTNAME");
|
||||
else
|
||||
svSetValueString (ifcfg, "DHCPV6_SEND_HOSTNAME", "no");
|
||||
}
|
||||
|
||||
static gboolean
|
||||
write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
|
||||
{
|
||||
@@ -2473,6 +2486,8 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
|
||||
svUnsetValue (ifcfg, "IPV6INIT");
|
||||
svUnsetValue (ifcfg, "IPV6_AUTOCONF");
|
||||
svUnsetValue (ifcfg, "DHCPV6C");
|
||||
svUnsetValue (ifcfg, "DHCPV6_HOSTNAME");
|
||||
svUnsetValue (ifcfg, "DHCPV6_SEND_HOSTNAME");
|
||||
svUnsetValue (ifcfg, "IPV6_DEFROUTE");
|
||||
svUnsetValue (ifcfg, "IPV6_PEERDNS");
|
||||
svUnsetValue (ifcfg, "IPV6_PEERROUTES");
|
||||
@@ -2493,13 +2508,9 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
|
||||
svSetValueString (ifcfg, "IPV6_AUTOCONF", "yes");
|
||||
svUnsetValue (ifcfg, "DHCPV6C");
|
||||
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
|
||||
const char *hostname;
|
||||
svSetValueString (ifcfg, "IPV6INIT", "yes");
|
||||
svSetValueString (ifcfg, "IPV6_AUTOCONF", "no");
|
||||
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)) {
|
||||
svSetValueString (ifcfg, "IPV6INIT", "yes");
|
||||
svSetValueString (ifcfg, "IPV6_AUTOCONF", "no");
|
||||
@@ -2514,6 +2525,8 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
|
||||
svUnsetValue (ifcfg, "DHCPV6C");
|
||||
}
|
||||
|
||||
write_ip6_setting_dhcp_hostname (s_ip6, ifcfg);
|
||||
|
||||
/* Write out IP addresses */
|
||||
num = nm_setting_ip_config_get_num_addresses (s_ip6);
|
||||
ip_str1 = g_string_new (NULL);
|
||||
@@ -2570,6 +2583,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
|
||||
g_free (ip4_domains);
|
||||
}
|
||||
|
||||
|
||||
/* handle IPV6_DEFROUTE */
|
||||
/* IPV6_DEFROUTE has the opposite meaning from 'never-default' */
|
||||
if (nm_setting_ip_config_get_never_default(s_ip6))
|
||||
@@ -2577,15 +2591,11 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
|
||||
else
|
||||
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",
|
||||
nm_setting_ip_config_get_ignore_auto_dns (s_ip6) ? "no" : "yes");
|
||||
svSetValueString (ifcfg, "IPV6_PEERDNS",
|
||||
nm_setting_ip_config_get_ignore_auto_dns (s_ip6) ? "no" : NULL);
|
||||
|
||||
svSetValueString (ifcfg, "IPV6_PEERROUTES",
|
||||
nm_setting_ip_config_get_ignore_auto_routes (s_ip6) ? "no" : "yes");
|
||||
}
|
||||
svSetValueString (ifcfg, "IPV6_PEERROUTES",
|
||||
nm_setting_ip_config_get_ignore_auto_routes (s_ip6) ? "no" : NULL);
|
||||
|
||||
svSetValueString (ifcfg, "IPV6_FAILURE_FATAL",
|
||||
nm_setting_ip_config_get_may_fail (s_ip6) ? "no" : "yes");
|
||||
|
@@ -0,0 +1,12 @@
|
||||
# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
|
||||
TYPE=Ethernet
|
||||
DEVICE=eth0
|
||||
HWADDR=00:11:22:33:44:ee
|
||||
BOOTPROTO=dhcp
|
||||
ONBOOT=yes
|
||||
IPV6INIT=yes
|
||||
IPV6_AUTOCONF=yes
|
||||
USERCTL=yes
|
||||
NM_CONTROLLED=yes
|
||||
PEERDNS=no
|
||||
DHCP_HOSTNAME="fully.qualified.domain"
|
@@ -3891,7 +3891,7 @@ test_read_write_wired_dhcp_send_hostname (void)
|
||||
g_assert (s_ip6);
|
||||
g_assert (nm_setting_ip_config_get_dhcp_send_hostname (s_ip4) == TRUE);
|
||||
g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip4), ==, "svata-pulec");
|
||||
g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip6), ==, "svata-pulec");
|
||||
g_assert_null (nm_setting_ip_config_get_dhcp_hostname (s_ip6));
|
||||
|
||||
/* Set dhcp-send-hostname=false dhcp-hostname="kamil-patka" and write the connection. */
|
||||
g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, FALSE, NULL);
|
||||
@@ -3916,6 +3916,21 @@ test_read_write_wired_dhcp_send_hostname (void)
|
||||
g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip6), ==, dhcp_hostname);
|
||||
}
|
||||
|
||||
static void
|
||||
test_read_wired_dhcpv6_hostname_fallback (void)
|
||||
{
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
NMSettingIPConfig *s_ip6;
|
||||
|
||||
connection = _connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcpv6-hostname-fallback",
|
||||
NULL, TYPE_ETHERNET, NULL);
|
||||
|
||||
s_ip6 = nm_connection_get_setting_ip6_config (connection);
|
||||
g_assert (s_ip6);
|
||||
g_assert (nm_setting_ip_config_get_dhcp_send_hostname (s_ip6) == TRUE);
|
||||
g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip6), ==, "fully.qualified.domain");
|
||||
}
|
||||
|
||||
static void
|
||||
test_write_wired_static_ip6_only (void)
|
||||
{
|
||||
@@ -8838,6 +8853,7 @@ int main (int argc, char **argv)
|
||||
g_test_add_func (TPATH "read-dhcp-plus-ip", test_read_wired_dhcp_plus_ip);
|
||||
g_test_add_func (TPATH "read-shared-plus-ip", test_read_wired_shared_plus_ip);
|
||||
g_test_add_func (TPATH "read-dhcp-send-hostname", test_read_write_wired_dhcp_send_hostname);
|
||||
g_test_add_func (TPATH "read-dhcpv6-hostname-fallback", test_read_wired_dhcpv6_hostname_fallback);
|
||||
g_test_add_func (TPATH "read-global-gateway", test_read_wired_global_gateway);
|
||||
g_test_add_func (TPATH "read-global-gateway-ignore", test_read_wired_global_gateway_ignore);
|
||||
g_test_add_func (TPATH "read-obsolete-gateway-n", test_read_wired_obsolete_gateway_n);
|
||||
|
Reference in New Issue
Block a user