ifcfg-rh: split out parsing of boolean values from svTrueValue()

Move the parsing code to new function svParseBoolean() and rename
svTrueValue() to svGetValueBoolean().
This commit is contained in:
Beniamino Galvani 2015-10-08 18:04:30 +02:00
parent 2041e140bf
commit 6f41f42533
3 changed files with 82 additions and 60 deletions

View file

@ -168,14 +168,14 @@ make_connection_setting (const char *file,
/* Missing ONBOOT is treated as "ONBOOT=true" by the old network service */
g_object_set (s_con,
NM_SETTING_CONNECTION_AUTOCONNECT,
svTrueValue (ifcfg, "ONBOOT", TRUE),
svGetValueBoolean (ifcfg, "ONBOOT", TRUE),
NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY,
(gint) svGetValueInt64 (ifcfg, "AUTOCONNECT_PRIORITY", 10,
NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN,
NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX,
NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT),
NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES,
svTrueValue (ifcfg, "AUTOCONNECT_SLAVES", NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_DEFAULT),
svGetValueBoolean (ifcfg, "AUTOCONNECT_SLAVES", NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_DEFAULT),
NULL);
value = svGetValue (ifcfg, "USERS", FALSE);
@ -247,7 +247,7 @@ make_connection_setting (const char *file,
g_free (value);
}
switch (svTrueValue (ifcfg, "CONNECTION_METERED", -1)) {
switch (svGetValueBoolean (ifcfg, "CONNECTION_METERED", -1)) {
case TRUE:
g_object_set (s_con, NM_SETTING_CONNECTION_METERED, NM_METERED_YES, NULL);
break;
@ -923,7 +923,7 @@ make_ip4_setting (shvarFile *ifcfg,
* specified is DEFROUTE=yes which means that this connection can be used
* as a default route
*/
never_default = !svTrueValue (ifcfg, "DEFROUTE", TRUE);
never_default = !svGetValueBoolean (ifcfg, "DEFROUTE", TRUE);
/* Then check if GATEWAYDEV; it's global and overrides DEFROUTE */
network_ifcfg = svOpenFile (network_file, NULL);
@ -998,10 +998,10 @@ make_ip4_setting (shvarFile *ifcfg,
g_object_set (s_ip4,
NM_SETTING_IP_CONFIG_METHOD, method,
NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, !svTrueValue (ifcfg, "PEERDNS", TRUE),
NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, !svTrueValue (ifcfg, "PEERROUTES", TRUE),
NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, !svGetValueBoolean (ifcfg, "PEERDNS", TRUE),
NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, !svGetValueBoolean (ifcfg, "PEERROUTES", TRUE),
NM_SETTING_IP_CONFIG_NEVER_DEFAULT, never_default,
NM_SETTING_IP_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV4_FAILURE_FATAL", FALSE),
NM_SETTING_IP_CONFIG_MAY_FAIL, !svGetValueBoolean (ifcfg, "IPV4_FAILURE_FATAL", FALSE),
NM_SETTING_IP_CONFIG_ROUTE_METRIC, svGetValueInt64 (ifcfg, "IPV4_ROUTE_METRIC", 10,
-1, G_MAXUINT32, -1),
NULL);
@ -1017,7 +1017,7 @@ make_ip4_setting (shvarFile *ifcfg,
g_free (value);
g_object_set (s_ip4,
NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, svTrueValue (ifcfg, "DHCP_SEND_HOSTNAME", TRUE),
NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, svGetValueBoolean (ifcfg, "DHCP_SEND_HOSTNAME", TRUE),
NM_SETTING_IP4_CONFIG_DHCP_TIMEOUT, svGetValueInt64 (ifcfg, "IPV4_DHCP_TIMEOUT", 10, 0, G_MAXUINT32, 0),
NULL);
@ -1318,7 +1318,7 @@ make_ip6_setting (shvarFile *ifcfg,
* specified is IPV6_DEFROUTE=yes which means that this connection can be used
* as a default route
*/
never_default = !svTrueValue (ifcfg, "IPV6_DEFROUTE", TRUE);
never_default = !svGetValueBoolean (ifcfg, "IPV6_DEFROUTE", TRUE);
/* Then check if IPV6_DEFAULTGW or IPV6_DEFAULTDEV is specified;
* they are global and override IPV6_DEFROUTE
@ -1358,11 +1358,11 @@ make_ip6_setting (shvarFile *ifcfg,
/* Find out method property */
/* Is IPV6 enabled? Set method to "ignored", when not enabled */
str_value = svGetValue (ifcfg, "IPV6INIT", FALSE);
ipv6init = svTrueValue (ifcfg, "IPV6INIT", FALSE);
ipv6init = svGetValueBoolean (ifcfg, "IPV6INIT", FALSE);
if (!str_value) {
network_ifcfg = svOpenFile (network_file, NULL);
if (network_ifcfg) {
ipv6init = svTrueValue (network_ifcfg, "IPV6INIT", FALSE);
ipv6init = svGetValueBoolean (network_ifcfg, "IPV6INIT", FALSE);
svCloseFile (network_ifcfg);
}
}
@ -1371,9 +1371,9 @@ make_ip6_setting (shvarFile *ifcfg,
if (!ipv6init)
method = NM_SETTING_IP6_CONFIG_METHOD_IGNORE; /* IPv6 is disabled */
else {
ipv6forwarding = svTrueValue (ifcfg, "IPV6FORWARDING", FALSE);
ipv6_autoconf = svTrueValue (ifcfg, "IPV6_AUTOCONF", !ipv6forwarding);
dhcp6 = svTrueValue (ifcfg, "DHCPV6C", FALSE);
ipv6forwarding = svGetValueBoolean (ifcfg, "IPV6FORWARDING", FALSE);
ipv6_autoconf = svGetValueBoolean (ifcfg, "IPV6_AUTOCONF", !ipv6forwarding);
dhcp6 = svGetValueBoolean (ifcfg, "DHCPV6C", FALSE);
if (ipv6_autoconf)
method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
@ -1395,12 +1395,12 @@ make_ip6_setting (shvarFile *ifcfg,
/* Read IPv6 Privacy Extensions configuration */
ip6_privacy_str = svGetValue (ifcfg, "IPV6_PRIVACY", FALSE);
if (ip6_privacy_str) {
ip6_privacy = svTrueValue (ifcfg, "IPV6_PRIVACY", FALSE);
ip6_privacy = svGetValueBoolean (ifcfg, "IPV6_PRIVACY", FALSE);
if (!ip6_privacy)
ip6_privacy = g_strcmp0 (ip6_privacy_str, "rfc4941") == 0 ||
g_strcmp0 (ip6_privacy_str, "rfc3041") == 0;
}
ip6_privacy_prefer_public_ip = svTrueValue (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP", FALSE);
ip6_privacy_prefer_public_ip = svGetValueBoolean (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP", FALSE);
ip6_privacy_val = ip6_privacy_str ?
(ip6_privacy ?
(ip6_privacy_prefer_public_ip ? NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR : NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR) :
@ -1410,10 +1410,10 @@ make_ip6_setting (shvarFile *ifcfg,
g_object_set (s_ip6,
NM_SETTING_IP_CONFIG_METHOD, method,
NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, !svTrueValue (ifcfg, "IPV6_PEERDNS", TRUE),
NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, !svTrueValue (ifcfg, "IPV6_PEERROUTES", TRUE),
NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, !svGetValueBoolean (ifcfg, "IPV6_PEERDNS", TRUE),
NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, !svGetValueBoolean (ifcfg, "IPV6_PEERROUTES", TRUE),
NM_SETTING_IP_CONFIG_NEVER_DEFAULT, never_default,
NM_SETTING_IP_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV6_FAILURE_FATAL", FALSE),
NM_SETTING_IP_CONFIG_MAY_FAIL, !svGetValueBoolean (ifcfg, "IPV6_FAILURE_FATAL", FALSE),
NM_SETTING_IP_CONFIG_ROUTE_METRIC, svGetValueInt64 (ifcfg, "IPV6_ROUTE_METRIC", 10,
-1, G_MAXUINT32, -1),
NM_SETTING_IP6_CONFIG_IP6_PRIVACY, ip6_privacy_val,
@ -1617,11 +1617,11 @@ read_dcb_flags (shvarFile *ifcfg, DcbFlagsProperty *property)
{
NMSettingDcbFlags flags = NM_SETTING_DCB_FLAG_NONE;
if (svTrueValue (ifcfg, property->enable_key, FALSE))
if (svGetValueBoolean (ifcfg, property->enable_key, FALSE))
flags |= NM_SETTING_DCB_FLAG_ENABLE;
if (svTrueValue (ifcfg, property->advertise_key, FALSE))
if (svGetValueBoolean (ifcfg, property->advertise_key, FALSE))
flags |= NM_SETTING_DCB_FLAG_ADVERTISE;
if (svTrueValue (ifcfg, property->willing_key, FALSE))
if (svGetValueBoolean (ifcfg, property->willing_key, FALSE))
flags |= NM_SETTING_DCB_FLAG_WILLING;
return flags;
@ -1851,7 +1851,7 @@ make_dcb_setting (shvarFile *ifcfg,
g_return_val_if_fail (out_setting != NULL, FALSE);
dcb_on = !!svTrueValue (ifcfg, "DCB", FALSE);
dcb_on = !!svGetValueBoolean (ifcfg, "DCB", FALSE);
if (!dcb_on)
return TRUE;
@ -2649,7 +2649,7 @@ eap_peap_reader (const char *eap_method,
}
}
if (svTrueValue (ifcfg, "IEEE_8021X_PEAP_FORCE_NEW_LABEL", FALSE))
if (svGetValueBoolean (ifcfg, "IEEE_8021X_PEAP_FORCE_NEW_LABEL", FALSE))
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE1_PEAPLABEL, "1", NULL);
anon_ident = svGetValue (ifcfg, "IEEE_8021X_ANON_IDENTITY", FALSE);
@ -3090,9 +3090,9 @@ make_wpa_setting (shvarFile *ifcfg,
allow_wpa = svGetValue (ifcfg, "WPA_ALLOW_WPA", FALSE);
allow_rsn = svGetValue (ifcfg, "WPA_ALLOW_WPA2", FALSE);
if (allow_wpa && svTrueValue (ifcfg, "WPA_ALLOW_WPA", TRUE))
if (allow_wpa && svGetValueBoolean (ifcfg, "WPA_ALLOW_WPA", TRUE))
nm_setting_wireless_security_add_proto (wsec, "wpa");
if (allow_rsn && svTrueValue (ifcfg, "WPA_ALLOW_WPA2", TRUE))
if (allow_rsn && svGetValueBoolean (ifcfg, "WPA_ALLOW_WPA2", TRUE))
nm_setting_wireless_security_add_proto (wsec, "rsn");
/* If neither WPA_ALLOW_WPA or WPA_ALLOW_WPA2 were present, default
@ -3462,12 +3462,12 @@ make_wireless_setting (shvarFile *ifcfg,
g_object_set (s_wireless,
NM_SETTING_WIRELESS_HIDDEN,
svTrueValue (ifcfg, "SSID_HIDDEN", FALSE),
svGetValueBoolean (ifcfg, "SSID_HIDDEN", FALSE),
NULL);
g_object_set (s_wireless,
NM_SETTING_WIRELESS_POWERSAVE,
svTrueValue (ifcfg, "POWERSAVE", FALSE) ? 1 : 0,
svGetValueBoolean (ifcfg, "POWERSAVE", FALSE) ? 1 : 0,
NULL);
return NM_SETTING (s_wireless);
@ -3905,12 +3905,12 @@ make_infiniband_setting (shvarFile *ifcfg,
g_free (value);
}
if (svTrueValue (ifcfg, "CONNECTED_MODE", FALSE))
if (svGetValueBoolean (ifcfg, "CONNECTED_MODE", FALSE))
g_object_set (s_infiniband, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected", NULL);
else
g_object_set (s_infiniband, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram", NULL);
if (svTrueValue (ifcfg, "PKEY", FALSE)) {
if (svGetValueBoolean (ifcfg, "PKEY", FALSE)) {
int p_key;
char *parent;
@ -4447,7 +4447,7 @@ is_bond_device (const char *name, shvarFile *parsed)
g_return_val_if_fail (name != NULL, FALSE);
g_return_val_if_fail (parsed != NULL, FALSE);
if (svTrueValue (parsed, "BONDING_MASTER", FALSE))
if (svGetValueBoolean (parsed, "BONDING_MASTER", FALSE))
return TRUE;
/* XXX: Check for "bond[\d]+"? */
@ -4461,7 +4461,7 @@ is_vlan_device (const char *name, shvarFile *parsed)
g_return_val_if_fail (name != NULL, FALSE);
g_return_val_if_fail (parsed != NULL, FALSE);
if (svTrueValue (parsed, "VLAN", FALSE))
if (svGetValueBoolean (parsed, "VLAN", FALSE))
return TRUE;
return FALSE;
@ -4595,7 +4595,7 @@ make_vlan_setting (shvarFile *ifcfg,
g_object_set (s_vlan, NM_SETTING_VLAN_PARENT, parent, NULL);
g_clear_pointer (&parent, g_free);
if (svTrueValue (ifcfg, "REORDER_HDR", FALSE))
if (svGetValueBoolean (ifcfg, "REORDER_HDR", FALSE))
vlan_flags |= NM_VLAN_FLAG_REORDER_HEADERS;
value = svGetValue (ifcfg, "VLAN_FLAGS", FALSE);
@ -4811,7 +4811,7 @@ connection_from_file_full (const char *filename,
if (!parsed)
return NULL;
if (!svTrueValue (parsed, "NM_CONTROLLED", TRUE)) {
if (!svGetValueBoolean (parsed, "NM_CONTROLLED", TRUE)) {
g_assert (out_unhandled != NULL);
connection = create_unhandled_connection (filename, parsed, "unmanaged", out_unhandled);
@ -4890,7 +4890,7 @@ connection_from_file_full (const char *filename,
}
}
if (svTrueValue (parsed, "BONDING_MASTER", FALSE) &&
if (svGetValueBoolean (parsed, "BONDING_MASTER", FALSE) &&
strcasecmp (type, TYPE_BOND)) {
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"BONDING_MASTER=yes key only allowed in TYPE=bond connections");

View file

@ -298,35 +298,55 @@ svGetValueFull (shvarFile *s, const char *key, gboolean verbatim)
return value;
}
/* 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
/**
* svParseBoolean:
* @value: the input string
* @fallback: the fallback value
*
* Parses a string and returns the boolean value it contains or,
* in case no valid value is found, the fallback value. Valid values
* are: "yes", "true", "t", "y", "1" and "no", "false", "f", "n", "0".
*
* Returns: the parsed boolean value or @fallback.
*/
gint
svTrueValue (shvarFile *s, const char *key, gint def)
svParseBoolean (const char *value, gint fallback)
{
char *tmp;
gint returnValue = def;
if (!value)
return fallback;
if ( !g_ascii_strcasecmp ("yes", value)
|| !g_ascii_strcasecmp ("true", value)
|| !g_ascii_strcasecmp ("t", value)
|| !g_ascii_strcasecmp ("y", value)
|| !g_ascii_strcasecmp ("1", value))
return TRUE;
else if ( !g_ascii_strcasecmp ("no", value)
|| !g_ascii_strcasecmp ("false", value)
|| !g_ascii_strcasecmp ("f", value)
|| !g_ascii_strcasecmp ("n", value)
|| !g_ascii_strcasecmp ("0", value))
return FALSE;
return fallback;
}
/* svGetValueBoolean:
* @s: fhe file
* @key: the name of the key to read
* @fallback: the fallback value in any error case
*
* Reads a value @key and converts it to a boolean using svParseBoolean().
*
* Returns: the parsed boolean value or @fallback.
*/
gint
svGetValueBoolean (shvarFile *s, const char *key, gint fallback)
{
gs_free char *tmp = NULL;
tmp = svGetValue (s, key, FALSE);
if (!tmp)
return returnValue;
if ( !g_ascii_strcasecmp ("yes", tmp)
|| !g_ascii_strcasecmp ("true", tmp)
|| !g_ascii_strcasecmp ("t", 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 ("0", tmp))
returnValue = FALSE;
g_free (tmp);
return returnValue;
return svParseBoolean (tmp, fallback);
}
/* svGetValueInt64:

View file

@ -58,11 +58,13 @@ shvarFile *svOpenFile (const char *name, GError **error);
char *svGetValue (shvarFile *s, const char *key, gboolean verbatim);
char *svGetValueFull (shvarFile *s, const char *key, gboolean verbatim);
gint svParseBoolean (const char *value, gint def);
/* 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 <def> otherwise
*/
gint svTrueValue (shvarFile *s, const char *key, gint def);
gint svGetValueBoolean (shvarFile *s, const char *key, gint def);
gint64 svGetValueInt64 (shvarFile *s, const char *key, guint base, gint64 min, gint64 max, gint64 fallback);