keyfile: do not write empty string list properties
https://bugzilla.redhat.com/show_bug.cgi?id=2022623
This commit is contained in:
@@ -2768,6 +2768,11 @@ struct _ParseInfoProperty {
|
|||||||
* default value. By setting this flag to TRUE, also
|
* default value. By setting this flag to TRUE, also
|
||||||
* default values are written. */
|
* default values are written. */
|
||||||
bool writer_persist_default : 1;
|
bool writer_persist_default : 1;
|
||||||
|
|
||||||
|
/* This flag indicates that the property should always
|
||||||
|
* be written to keyfile, even if it's the default.
|
||||||
|
* This is currently only implemented for STRV properties. */
|
||||||
|
bool always_write : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PARSE_INFO_PROPERTY(_property_name, ...) \
|
#define PARSE_INFO_PROPERTY(_property_name, ...) \
|
||||||
@@ -2869,53 +2874,57 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
|
|||||||
NM_META_SETTING_TYPE_INFINIBAND,
|
NM_META_SETTING_TYPE_INFINIBAND,
|
||||||
PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_INFINIBAND_MAC_ADDRESS,
|
PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_INFINIBAND_MAC_ADDRESS,
|
||||||
.parser = mac_address_parser_INFINIBAND, ), ), ),
|
.parser = mac_address_parser_INFINIBAND, ), ), ),
|
||||||
PARSE_INFO_SETTING(NM_META_SETTING_TYPE_IP4_CONFIG,
|
PARSE_INFO_SETTING(
|
||||||
PARSE_INFO_PROPERTIES(
|
NM_META_SETTING_TYPE_IP4_CONFIG,
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ADDRESSES,
|
PARSE_INFO_PROPERTIES(
|
||||||
.parser_no_check_key = TRUE,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ADDRESSES,
|
||||||
.parser = ip_address_or_route_parser,
|
.parser_no_check_key = TRUE,
|
||||||
.writer = addr_writer, ),
|
.parser = ip_address_or_route_parser,
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS,
|
.writer = addr_writer, ),
|
||||||
.parser_no_check_key = TRUE,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS,
|
||||||
.parser = ip_dns_parser,
|
.parser_no_check_key = TRUE,
|
||||||
.writer = dns_writer, ),
|
.parser = ip_dns_parser,
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ),
|
.writer = dns_writer, ),
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS_OPTIONS, .always_write = TRUE, ),
|
||||||
.parser_no_check_key = TRUE,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ),
|
||||||
.parser = ip_address_or_route_parser,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES,
|
||||||
.writer = route_writer, ),
|
.parser_no_check_key = TRUE,
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTING_RULES,
|
.parser = ip_address_or_route_parser,
|
||||||
.parser_no_check_key = TRUE,
|
.writer = route_writer, ),
|
||||||
.parser_full = ip_routing_rule_parser_full,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTING_RULES,
|
||||||
.writer_full = ip_routing_rule_writer_full,
|
.parser_no_check_key = TRUE,
|
||||||
.has_parser_full = TRUE,
|
.parser_full = ip_routing_rule_parser_full,
|
||||||
.has_writer_full = TRUE, ), ), ),
|
.writer_full = ip_routing_rule_writer_full,
|
||||||
PARSE_INFO_SETTING(NM_META_SETTING_TYPE_IP6_CONFIG,
|
.has_parser_full = TRUE,
|
||||||
PARSE_INFO_PROPERTIES(
|
.has_writer_full = TRUE, ), ), ),
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
|
PARSE_INFO_SETTING(
|
||||||
.parser_no_check_key = TRUE,
|
NM_META_SETTING_TYPE_IP6_CONFIG,
|
||||||
.parser = ip6_addr_gen_mode_parser,
|
PARSE_INFO_PROPERTIES(
|
||||||
.writer = ip6_addr_gen_mode_writer,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
|
||||||
.writer_persist_default = TRUE, ),
|
.parser_no_check_key = TRUE,
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ADDRESSES,
|
.parser = ip6_addr_gen_mode_parser,
|
||||||
.parser_no_check_key = TRUE,
|
.writer = ip6_addr_gen_mode_writer,
|
||||||
.parser = ip_address_or_route_parser,
|
.writer_persist_default = TRUE, ),
|
||||||
.writer = addr_writer, ),
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ADDRESSES,
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS,
|
.parser_no_check_key = TRUE,
|
||||||
.parser_no_check_key = TRUE,
|
.parser = ip_address_or_route_parser,
|
||||||
.parser = ip_dns_parser,
|
.writer = addr_writer, ),
|
||||||
.writer = dns_writer, ),
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS,
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ),
|
.parser_no_check_key = TRUE,
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES,
|
.parser = ip_dns_parser,
|
||||||
.parser_no_check_key = TRUE,
|
.writer = dns_writer, ),
|
||||||
.parser = ip_address_or_route_parser,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS_OPTIONS, .always_write = TRUE, ),
|
||||||
.writer = route_writer, ),
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ),
|
||||||
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTING_RULES,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES,
|
||||||
.parser_no_check_key = TRUE,
|
.parser_no_check_key = TRUE,
|
||||||
.parser_full = ip_routing_rule_parser_full,
|
.parser = ip_address_or_route_parser,
|
||||||
.writer_full = ip_routing_rule_writer_full,
|
.writer = route_writer, ),
|
||||||
.has_parser_full = TRUE,
|
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTING_RULES,
|
||||||
.has_writer_full = TRUE, ), ), ),
|
.parser_no_check_key = TRUE,
|
||||||
|
.parser_full = ip_routing_rule_parser_full,
|
||||||
|
.writer_full = ip_routing_rule_writer_full,
|
||||||
|
.has_parser_full = TRUE,
|
||||||
|
.has_writer_full = TRUE, ), ), ),
|
||||||
PARSE_INFO_SETTING(
|
PARSE_INFO_SETTING(
|
||||||
NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS,
|
NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS,
|
||||||
PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_OVS_EXTERNAL_IDS_DATA,
|
PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_OVS_EXTERNAL_IDS_DATA,
|
||||||
@@ -3949,11 +3958,13 @@ write_setting_value(KeyfileWriterInfo *info,
|
|||||||
char **array;
|
char **array;
|
||||||
|
|
||||||
array = (char **) g_value_get_boxed(&value);
|
array = (char **) g_value_get_boxed(&value);
|
||||||
nm_keyfile_plugin_kf_set_string_list(info->keyfile,
|
if ((g_strv_length(array) != 0) || (pip && pip->always_write)) {
|
||||||
setting_info->setting_name,
|
nm_keyfile_plugin_kf_set_string_list(info->keyfile,
|
||||||
key,
|
setting_info->setting_name,
|
||||||
(const char **const) array,
|
key,
|
||||||
g_strv_length(array));
|
(const char **const) array,
|
||||||
|
g_strv_length(array));
|
||||||
|
}
|
||||||
} else if (type == G_TYPE_HASH_TABLE) {
|
} else if (type == G_TYPE_HASH_TABLE) {
|
||||||
write_hash_of_string(info->keyfile, setting, key, &value);
|
write_hash_of_string(info->keyfile, setting, key, &value);
|
||||||
} else if (type == G_TYPE_ARRAY) {
|
} else if (type == G_TYPE_ARRAY) {
|
||||||
|
@@ -3587,20 +3587,16 @@ test_roundtrip_conversion(gconstpointer test_data)
|
|||||||
"uuid=%s\n"
|
"uuid=%s\n"
|
||||||
"type=ethernet\n"
|
"type=ethernet\n"
|
||||||
"interface-name=%s\n"
|
"interface-name=%s\n"
|
||||||
"permissions=\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"[ethernet]\n"
|
"[ethernet]\n"
|
||||||
"mac-address-blacklist=\n"
|
|
||||||
"%s" /* mtu */
|
"%s" /* mtu */
|
||||||
"\n"
|
"\n"
|
||||||
"%s" /* [ethernet-s390-options] */
|
"%s" /* [ethernet-s390-options] */
|
||||||
"[ipv4]\n"
|
"[ipv4]\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=auto\n"
|
"method=auto\n"
|
||||||
"\n"
|
"\n"
|
||||||
"[ipv6]\n"
|
"[ipv6]\n"
|
||||||
"addr-gen-mode=stable-privacy\n"
|
"addr-gen-mode=stable-privacy\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=auto\n"
|
"method=auto\n"
|
||||||
"\n"
|
"\n"
|
||||||
"[proxy]\n"
|
"[proxy]\n"
|
||||||
@@ -3618,20 +3614,16 @@ test_roundtrip_conversion(gconstpointer test_data)
|
|||||||
"uuid=%s\n"
|
"uuid=%s\n"
|
||||||
"type=ethernet\n"
|
"type=ethernet\n"
|
||||||
"interface-name=%s\n"
|
"interface-name=%s\n"
|
||||||
"permissions=\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"[ethernet]\n"
|
"[ethernet]\n"
|
||||||
"mac-address-blacklist=\n"
|
|
||||||
"%s" /* mtu */
|
"%s" /* mtu */
|
||||||
"\n"
|
"\n"
|
||||||
"%s" /* [ethernet-s390-options] */
|
"%s" /* [ethernet-s390-options] */
|
||||||
"[ipv4]\n"
|
"[ipv4]\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=auto\n"
|
"method=auto\n"
|
||||||
"\n"
|
"\n"
|
||||||
"[ipv6]\n"
|
"[ipv6]\n"
|
||||||
"addr-gen-mode=stable-privacy\n"
|
"addr-gen-mode=stable-privacy\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=auto\n"
|
"method=auto\n"
|
||||||
"",
|
"",
|
||||||
ID,
|
ID,
|
||||||
@@ -3661,17 +3653,14 @@ test_roundtrip_conversion(gconstpointer test_data)
|
|||||||
"uuid=%s\n"
|
"uuid=%s\n"
|
||||||
"type=wireguard\n"
|
"type=wireguard\n"
|
||||||
"interface-name=%s\n"
|
"interface-name=%s\n"
|
||||||
"permissions=\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"[wireguard]\n"
|
"[wireguard]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"[ipv4]\n"
|
"[ipv4]\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=disabled\n"
|
"method=disabled\n"
|
||||||
"\n"
|
"\n"
|
||||||
"[ipv6]\n"
|
"[ipv6]\n"
|
||||||
"addr-gen-mode=stable-privacy\n"
|
"addr-gen-mode=stable-privacy\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=disabled\n"
|
"method=disabled\n"
|
||||||
"\n"
|
"\n"
|
||||||
"[proxy]\n"
|
"[proxy]\n"
|
||||||
@@ -3713,7 +3702,6 @@ test_roundtrip_conversion(gconstpointer test_data)
|
|||||||
"uuid=%s\n"
|
"uuid=%s\n"
|
||||||
"type=wireguard\n"
|
"type=wireguard\n"
|
||||||
"interface-name=%s\n"
|
"interface-name=%s\n"
|
||||||
"permissions=\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"[wireguard]\n"
|
"[wireguard]\n"
|
||||||
"%s" /* fwmark */
|
"%s" /* fwmark */
|
||||||
@@ -3723,12 +3711,10 @@ test_roundtrip_conversion(gconstpointer test_data)
|
|||||||
"%s" /* [wireguard-peers*] */
|
"%s" /* [wireguard-peers*] */
|
||||||
"\n"
|
"\n"
|
||||||
"[ipv4]\n"
|
"[ipv4]\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=disabled\n"
|
"method=disabled\n"
|
||||||
"\n"
|
"\n"
|
||||||
"[ipv6]\n"
|
"[ipv6]\n"
|
||||||
"addr-gen-mode=stable-privacy\n"
|
"addr-gen-mode=stable-privacy\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=disabled\n"
|
"method=disabled\n"
|
||||||
"\n"
|
"\n"
|
||||||
"[proxy]\n"
|
"[proxy]\n"
|
||||||
@@ -3798,14 +3784,11 @@ test_roundtrip_conversion(gconstpointer test_data)
|
|||||||
"uuid=%s\n"
|
"uuid=%s\n"
|
||||||
"type=ethernet\n"
|
"type=ethernet\n"
|
||||||
"interface-name=%s\n"
|
"interface-name=%s\n"
|
||||||
"permissions=\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"[ethernet]\n"
|
"[ethernet]\n"
|
||||||
"mac-address-blacklist=\n"
|
|
||||||
"%s" /* mtu */
|
"%s" /* mtu */
|
||||||
"\n"
|
"\n"
|
||||||
"[ipv4]\n"
|
"[ipv4]\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=auto\n"
|
"method=auto\n"
|
||||||
"routing-rule1=priority 1 from 0.0.0.0/0 table 1000\n"
|
"routing-rule1=priority 1 from 0.0.0.0/0 table 1000\n"
|
||||||
"routing-rule2=priority 2 from 192.168.1.0/25 table 1001\n"
|
"routing-rule2=priority 2 from 192.168.1.0/25 table 1001\n"
|
||||||
@@ -3813,7 +3796,6 @@ test_roundtrip_conversion(gconstpointer test_data)
|
|||||||
"\n"
|
"\n"
|
||||||
"[ipv6]\n"
|
"[ipv6]\n"
|
||||||
"addr-gen-mode=stable-privacy\n"
|
"addr-gen-mode=stable-privacy\n"
|
||||||
"dns-search=\n"
|
|
||||||
"method=auto\n"
|
"method=auto\n"
|
||||||
"routing-rule1=priority 1 from ::/0 table 1000\n"
|
"routing-rule1=priority 1 from ::/0 table 1000\n"
|
||||||
"routing-rule2=priority 2 from 1:2:3:b::/65 table 1001\n"
|
"routing-rule2=priority 2 from 1:2:3:b::/65 table 1001\n"
|
||||||
|
Reference in New Issue
Block a user