keyfile: do not write empty string list properties

https://bugzilla.redhat.com/show_bug.cgi?id=2022623
This commit is contained in:
Ana Cabral
2022-02-09 17:55:59 +01:00
parent 20aa8d049c
commit 27c33d15ef
2 changed files with 63 additions and 70 deletions

View File

@@ -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,7 +2874,8 @@ 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(
NM_META_SETTING_TYPE_IP4_CONFIG,
PARSE_INFO_PROPERTIES( PARSE_INFO_PROPERTIES(
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ADDRESSES, PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ADDRESSES,
.parser_no_check_key = TRUE, .parser_no_check_key = TRUE,
@@ -2879,6 +2885,7 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
.parser_no_check_key = TRUE, .parser_no_check_key = TRUE,
.parser = ip_dns_parser, .parser = ip_dns_parser,
.writer = dns_writer, ), .writer = dns_writer, ),
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS_OPTIONS, .always_write = TRUE, ),
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ), PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ),
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES, PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES,
.parser_no_check_key = TRUE, .parser_no_check_key = TRUE,
@@ -2890,7 +2897,8 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
.writer_full = ip_routing_rule_writer_full, .writer_full = ip_routing_rule_writer_full,
.has_parser_full = TRUE, .has_parser_full = TRUE,
.has_writer_full = TRUE, ), ), ), .has_writer_full = TRUE, ), ), ),
PARSE_INFO_SETTING(NM_META_SETTING_TYPE_IP6_CONFIG, PARSE_INFO_SETTING(
NM_META_SETTING_TYPE_IP6_CONFIG,
PARSE_INFO_PROPERTIES( PARSE_INFO_PROPERTIES(
PARSE_INFO_PROPERTY(NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE, PARSE_INFO_PROPERTY(NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
.parser_no_check_key = TRUE, .parser_no_check_key = TRUE,
@@ -2905,6 +2913,7 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
.parser_no_check_key = TRUE, .parser_no_check_key = TRUE,
.parser = ip_dns_parser, .parser = ip_dns_parser,
.writer = dns_writer, ), .writer = dns_writer, ),
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS_OPTIONS, .always_write = TRUE, ),
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ), PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ),
PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES, PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES,
.parser_no_check_key = TRUE, .parser_no_check_key = TRUE,
@@ -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);
if ((g_strv_length(array) != 0) || (pip && pip->always_write)) {
nm_keyfile_plugin_kf_set_string_list(info->keyfile, nm_keyfile_plugin_kf_set_string_list(info->keyfile,
setting_info->setting_name, setting_info->setting_name,
key, key,
(const char **const) array, (const char **const) array,
g_strv_length(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) {

View File

@@ -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"