summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2015-08-29 11:46:46 +0200
committerJiří Klimeš <jklimes@redhat.com>2015-10-07 13:45:30 +0200
commite8257af0d9324c2b9b59fa37c7283931c10defe1 (patch)
treeacc3bb68ce9e49c565c82b1d928a6447c59eefa8
parent687b6515980c08cdbb9734bd112a594166c4d6dd (diff)
downloadNetworkManager-e8257af0d9324c2b9b59fa37c7283931c10defe1.tar.gz
ifcfg-rh: allow svTrueValue() to accept "0" and "1" values
Some initscripts variables can use "0" or "1" instead of more common "yes", "no", for example REORDER_HDR. And we also write REORDER_HDR=0|1 in writer.c, so we did not read REODER_HDR correctly. Fixes: ccea4425048cce8aef5a295c7d09daa6b66f596f
-rw-r--r--src/settings/plugins/ifcfg-rh/shvar.c10
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am1
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-reorder-hdr-17
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c100
4 files changed, 114 insertions, 4 deletions
diff --git a/src/settings/plugins/ifcfg-rh/shvar.c b/src/settings/plugins/ifcfg-rh/shvar.c
index fad1478521..225e3b995b 100644
--- a/src/settings/plugins/ifcfg-rh/shvar.c
+++ b/src/settings/plugins/ifcfg-rh/shvar.c
@@ -298,8 +298,8 @@ svGetValueFull (shvarFile *s, const char *key, gboolean verbatim)
return value;
}
-/* return TRUE if <key> resolves to any truth value (e.g. "yes", "y", "true")
- * return FALSE if <key> resolves to any non-truth value (e.g. "no", "n", "false")
+/* return TRUE if <key> resolves to any truth value (e.g. "yes", "true", "y", "t", "1")
+ * return FALSE if <key> resolves to any non-truth value (e.g. "no", "false", "n", "f", "0")
* return <default> otherwise
*/
gint
@@ -315,12 +315,14 @@ svTrueValue (shvarFile *s, const char *key, gint def)
if ( !g_ascii_strcasecmp ("yes", tmp)
|| !g_ascii_strcasecmp ("true", tmp)
|| !g_ascii_strcasecmp ("t", tmp)
- || !g_ascii_strcasecmp ("y", tmp))
+ || !g_ascii_strcasecmp ("y", tmp)
+ || !g_ascii_strcasecmp ("1", tmp))
returnValue = TRUE;
else if ( !g_ascii_strcasecmp ("no", tmp)
|| !g_ascii_strcasecmp ("false", tmp)
|| !g_ascii_strcasecmp ("f", tmp)
- || !g_ascii_strcasecmp ("n", tmp))
+ || !g_ascii_strcasecmp ("n", tmp)
+ || !g_ascii_strcasecmp ("0", tmp))
returnValue = FALSE;
g_free (tmp);
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
index 97705b2a9a..1d616c470e 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
@@ -101,6 +101,7 @@ EXTRA_DIST = \
ifcfg-test-vlan-only-vlanid \
ifcfg-test-vlan-only-device \
ifcfg-test-vlan-physdev \
+ ifcfg-test-vlan-reorder-hdr-1 \
ifcfg-test-wifi-wep-no-keys \
ifcfg-test-permissions \
ifcfg-test-wifi-wep-agent-keys \
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-reorder-hdr-1 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-reorder-hdr-1
new file mode 100644
index 0000000000..ca38f839b1
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-reorder-hdr-1
@@ -0,0 +1,7 @@
+VLAN=yes
+TYPE=Vlan
+DEVICE=vlan0.3
+PHYSDEV=eth0
+VLAN_ID=3
+REORDER_HDR=1
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index 55a423e13d..8f7bb16299 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -11105,6 +11105,33 @@ test_read_vlan_physdev (void)
}
static void
+test_read_vlan_reorder_hdr_1 (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+ NMSettingVlan *s_vlan;
+
+ connection = connection_from_file_test (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-reorder-hdr-1",
+ NULL, TYPE_ETHERNET, NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+ g_assert (nm_connection_verify (connection, &error));
+
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "vlan0.3");
+
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ g_assert (s_vlan);
+
+ g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth0");
+ g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 3);
+ /* Check correct read of REORDER_HDR=1 */
+ g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, 1);
+
+ g_object_unref (connection);
+}
+
+static void
test_write_vlan (void)
{
NMConnection *connection;
@@ -11180,6 +11207,77 @@ test_write_vlan_only_vlanid (void)
}
static void
+test_write_vlan_reorder_hdr (void)
+{
+ NMConnection *connection, *reread;
+ NMSettingConnection *s_con;
+ NMSettingVlan *s_vlan;
+ NMSettingWired *s_wired;
+ char *uuid;
+ GError *error = NULL;
+ gboolean success;
+ char *testfile = NULL;
+
+ connection = nm_simple_connection_new ();
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write VLAN reorder_hdr",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_VLAN_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wired setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ /* VLAN setting */
+ s_vlan = (NMSettingVlan *) nm_setting_vlan_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_vlan));
+
+ g_object_set (s_vlan,
+ NM_SETTING_VLAN_PARENT, "eth0",
+ NM_SETTING_VLAN_ID, 444,
+ NM_SETTING_VLAN_FLAGS, 1,
+ NULL);
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert (testfile);
+
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_connection_normalize (connection, NULL, NULL, NULL);
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file_test (testfile,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &error);
+ unlink (testfile);
+
+ g_assert_no_error (error);
+ g_assert (reread);
+ g_assert (nm_connection_verify (reread, &error));
+ g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
+
+ g_object_unref (connection);
+ g_object_unref (reread);
+ g_free (testfile);
+}
+
+static void
test_write_ethernet_missing_ipv6 (void)
{
NMConnection *connection;
@@ -12869,6 +12967,7 @@ int main (int argc, char **argv)
test_read_vlan_only_vlan_id ();
test_read_vlan_only_device ();
g_test_add_func (TPATH "vlan/physdev", test_read_vlan_physdev);
+ g_test_add_func (TPATH "vlan/reorder-hdr-1", test_read_vlan_reorder_hdr_1);
g_test_add_func (TPATH "wired/read-wake-on-lan", test_read_wired_wake_on_lan);
test_write_wired_static ();
@@ -12948,6 +13047,7 @@ int main (int argc, char **argv)
test_write_infiniband ();
test_write_vlan ();
test_write_vlan_only_vlanid ();
+ g_test_add_func (TPATH "vlan/write-vlan-reorder-hdr", test_write_vlan_reorder_hdr);
test_write_ethernet_missing_ipv6 ();
g_test_add_func (TPATH "write-dns-options", test_write_dns_options);