keyfile: don't hack certain properties to be skipped in reader
For writer there is no such hack either. The property-info table should describe whether to skip a property or not.
This commit is contained in:
@@ -2001,6 +2001,7 @@ typedef struct {
|
|||||||
NMSetting *setting,
|
NMSetting *setting,
|
||||||
const char *key,
|
const char *key,
|
||||||
const GValue *value);
|
const GValue *value);
|
||||||
|
bool parser_skip;
|
||||||
bool parser_no_check_key:1;
|
bool parser_no_check_key:1;
|
||||||
bool writer_skip:1;
|
bool writer_skip:1;
|
||||||
|
|
||||||
@@ -2117,6 +2118,7 @@ static const ParseInfoSetting parse_infos[] = {
|
|||||||
PARSE_INFO_SETTING (NM_SETTING_CONNECTION_SETTING_NAME,
|
PARSE_INFO_SETTING (NM_SETTING_CONNECTION_SETTING_NAME,
|
||||||
PARSE_INFO_PROPERTIES (
|
PARSE_INFO_PROPERTIES (
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_CONNECTION_READ_ONLY,
|
PARSE_INFO_PROPERTY (NM_SETTING_CONNECTION_READ_ONLY,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_CONNECTION_TYPE,
|
PARSE_INFO_PROPERTY (NM_SETTING_CONNECTION_TYPE,
|
||||||
@@ -2209,48 +2211,63 @@ static const ParseInfoSetting parse_infos[] = {
|
|||||||
.parser = team_config_parser,
|
.parser = team_config_parser,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_LINK_WATCHERS,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_LINK_WATCHERS,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_MCAST_REJOIN_COUNT,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_MCAST_REJOIN_COUNT,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_MCAST_REJOIN_INTERVAL,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_MCAST_REJOIN_INTERVAL,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_NOTIFY_PEERS_COUNT,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_NOTIFY_PEERS_COUNT,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_NOTIFY_PEERS_INTERVAL,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_NOTIFY_PEERS_INTERVAL,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_ACTIVE,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_ACTIVE,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_FAST_RATE,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_FAST_RATE,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_HWADDR_POLICY,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_HWADDR_POLICY,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_MIN_PORTS,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_MIN_PORTS,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_SYS_PRIO,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_SYS_PRIO,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_TX_BALANCER,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_TX_BALANCER,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_TX_HASH,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_RUNNER_TX_HASH,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -2261,21 +2278,27 @@ static const ParseInfoSetting parse_infos[] = {
|
|||||||
.parser = team_config_parser,
|
.parser = team_config_parser,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_LACP_KEY,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_LACP_KEY,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_LACP_PRIO,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_LACP_PRIO,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_LINK_WATCHERS,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_LINK_WATCHERS,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_PRIO,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_PRIO,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_QUEUE_ID,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_QUEUE_ID,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_STICKY,
|
PARSE_INFO_PROPERTY (NM_SETTING_TEAM_PORT_STICKY,
|
||||||
|
.parser_skip = TRUE,
|
||||||
.writer_skip = TRUE,
|
.writer_skip = TRUE,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -2402,30 +2425,20 @@ read_one_setting_value (NMSetting *setting,
|
|||||||
if (info->error)
|
if (info->error)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Property is not writable */
|
|
||||||
if (!(flags & G_PARAM_WRITABLE))
|
if (!(flags & G_PARAM_WRITABLE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Setting name gets picked up from the keyfile's section name instead */
|
|
||||||
if (!strcmp (key, NM_SETTING_NAME))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Don't read the NMSettingConnection object's 'read-only' property */
|
|
||||||
if ( NM_IS_SETTING_CONNECTION (setting)
|
|
||||||
&& !strcmp (key, NM_SETTING_CONNECTION_READ_ONLY))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ( ( NM_IS_SETTING_TEAM (setting)
|
|
||||||
|| NM_IS_SETTING_TEAM_PORT (setting))
|
|
||||||
&& !NM_IN_STRSET (key, NM_SETTING_TEAM_CONFIG)) {
|
|
||||||
/* silently ignore all team properties (except "config"). */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
setting_name = nm_setting_get_name (setting);
|
setting_name = nm_setting_get_name (setting);
|
||||||
|
|
||||||
pip = _parse_info_find (setting_name, key);
|
pip = _parse_info_find (setting_name, key);
|
||||||
|
|
||||||
|
if ( !pip
|
||||||
|
&& nm_streq (key, NM_SETTING_NAME))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (pip && pip->parser_skip)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Check for the exact key in the GKeyFile if required. Most setting
|
/* Check for the exact key in the GKeyFile if required. Most setting
|
||||||
* properties map 1:1 to a key in the GKeyFile, but for those properties
|
* properties map 1:1 to a key in the GKeyFile, but for those properties
|
||||||
* like IP addresses and routes where more than one value is actually
|
* like IP addresses and routes where more than one value is actually
|
||||||
@@ -2789,15 +2802,20 @@ write_setting_value (NMSetting *setting,
|
|||||||
if (info->error)
|
if (info->error)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Setting name gets picked up from the keyfile's section name instead */
|
|
||||||
if (nm_streq (key, NM_SETTING_NAME))
|
|
||||||
return;
|
|
||||||
|
|
||||||
setting_name = nm_setting_get_name (setting);
|
setting_name = nm_setting_get_name (setting);
|
||||||
|
|
||||||
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), key);
|
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), key);
|
||||||
nm_assert (pspec);
|
nm_assert (pspec);
|
||||||
|
|
||||||
|
pip = _parse_info_find (setting_name, key);
|
||||||
|
|
||||||
|
if ( !pip
|
||||||
|
&& nm_streq (key, NM_SETTING_NAME))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (pip && pip->writer_skip)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Don't write secrets that are owned by user secret agents or aren't
|
/* Don't write secrets that are owned by user secret agents or aren't
|
||||||
* supposed to be saved. VPN secrets are handled specially though since
|
* supposed to be saved. VPN secrets are handled specially though since
|
||||||
* the secret flags there are in a third-level hash in the 'secrets'
|
* the secret flags there are in a third-level hash in the 'secrets'
|
||||||
@@ -2813,10 +2831,6 @@ write_setting_value (NMSetting *setting,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pip = _parse_info_find (setting_name, key);
|
|
||||||
if (pip && pip->writer_skip)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ( (!pip || !pip->writer_persist_default)
|
if ( (!pip || !pip->writer_persist_default)
|
||||||
&& g_param_value_defaults (pspec, (GValue *) value)) {
|
&& g_param_value_defaults (pspec, (GValue *) value)) {
|
||||||
nm_assert (!g_key_file_has_key (info->keyfile, setting_name, key, NULL));
|
nm_assert (!g_key_file_has_key (info->keyfile, setting_name, key, NULL));
|
||||||
|
Reference in New Issue
Block a user