diff options
author | Thomas Haller <thaller@redhat.com> | 2020-05-25 18:24:00 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-06-05 09:17:19 +0200 |
commit | 7d47a8fdbf4dbc4c23692d2a8b04aa0f510890cb (patch) | |
tree | 7b9c86558b0a476bc72d931c3dd8d67e7c025824 | |
parent | 5c67b72bb74ff22d16c7f8092996be142307db9b (diff) | |
download | NetworkManager-7d47a8fdbf4dbc4c23692d2a8b04aa0f510890cb.tar.gz |
keyfile: add handler context for all parser callbacks
From inside a callback 4 properties are potentially interesting
to all callbacks: the currenty group, key, setting and property-name.
Refactor the code to track these properties in NMKeyfileHandlerData
and distinguish between the property name and the keyfile key.
-rw-r--r-- | shared/nm-keyfile/nm-keyfile-internal.h | 18 | ||||
-rw-r--r-- | shared/nm-keyfile/nm-keyfile.c | 198 | ||||
-rw-r--r-- | src/settings/plugins/keyfile/nms-keyfile-reader.c | 28 | ||||
-rw-r--r-- | src/settings/plugins/keyfile/nms-keyfile-writer.c | 33 |
4 files changed, 204 insertions, 73 deletions
diff --git a/shared/nm-keyfile/nm-keyfile-internal.h b/shared/nm-keyfile/nm-keyfile-internal.h index 236ddcae4c..7c259a52cf 100644 --- a/shared/nm-keyfile/nm-keyfile-internal.h +++ b/shared/nm-keyfile/nm-keyfile-internal.h @@ -118,15 +118,6 @@ GKeyFile *nm_keyfile_write (NMConnection *connection, * handler_type %NM_KEYFILE_HANDLER_TYPE_WARN. */ typedef struct { - /* might be %NULL, if the warning is not about a group. */ - const char *group; - - /* might be %NULL, if the warning is not about a setting. */ - NMSetting *setting; - - /* might be %NULL, if the warning is not about a property. */ - const char *property_name; - NMKeyfileWarnSeverity severity; const char *message; } NMKeyfileHandlerDataWarn; @@ -139,12 +130,19 @@ typedef struct { */ typedef struct { const NMSetting8021xSchemeVtable *vtable; - NMSetting8021x *setting; } NMKeyfileHandlerDataWriteCert; struct _NMKeyfileHandlerData { NMKeyfileHandlerType type; + GError **p_error; + + const char *kf_group_name; + const char *kf_key; + + NMSetting *cur_setting; + const char *cur_property; + union { NMKeyfileHandlerDataWarn warn; NMKeyfileHandlerDataWriteCert write_cert; diff --git a/shared/nm-keyfile/nm-keyfile.c b/shared/nm-keyfile/nm-keyfile.c index c8cf84b588..7248528539 100644 --- a/shared/nm-keyfile/nm-keyfile.c +++ b/shared/nm-keyfile/nm-keyfile.c @@ -52,6 +52,10 @@ typedef struct { static void _key_file_handler_data_init (NMKeyfileHandlerData *handler_data, NMKeyfileHandlerType handler_type, + const char *kf_group_name, + const char *kf_key, + NMSetting *cur_setting, + const char *cur_property, GError **p_error) { nm_assert (handler_data); @@ -59,23 +63,61 @@ _key_file_handler_data_init (NMKeyfileHandlerData *handler_data, handler_data->type = handler_type; handler_data->p_error = p_error; + handler_data->kf_group_name = kf_group_name; + handler_data->kf_key = kf_key; + handler_data->cur_setting = cur_setting; + handler_data->cur_property = cur_property; +} + +static void +_key_file_handler_data_init_read (NMKeyfileHandlerData *handler_data, + NMKeyfileHandlerType handler_type, + KeyfileReaderInfo *info, + const char *kf_key, + const char *cur_property) +{ + _key_file_handler_data_init (handler_data, + handler_type, + info->group, + kf_key, + info->setting, + cur_property, + &info->error); +} + +static void +_key_file_handler_data_init_write (NMKeyfileHandlerData *handler_data, + NMKeyfileHandlerType handler_type, + KeyfileWriterInfo *info, + const char *kf_group, + const char *kf_key, + NMSetting *cur_setting, + const char *cur_property) +{ + _key_file_handler_data_init (handler_data, + handler_type, + kf_group, + kf_key, + cur_setting, + cur_property, + &info->error); } static void _handle_warn (KeyfileReaderInfo *info, - const char *property_name, + const char *kf_key, + const char *cur_property, NMKeyfileWarnSeverity severity, char *message) { NMKeyfileHandlerData handler_data; - _key_file_handler_data_init (&handler_data, - NM_KEYFILE_HANDLER_TYPE_WARN, - &info->error); + _key_file_handler_data_init_read (&handler_data, + NM_KEYFILE_HANDLER_TYPE_WARN, + info, + kf_key, + cur_property); handler_data.warn = (NMKeyfileHandlerDataWarn) { - .group = info->group, - .setting = info->setting, - .property_name = property_name, .severity = severity, .message = message, }; @@ -87,14 +129,18 @@ _handle_warn (KeyfileReaderInfo *info, info->user_data); g_free (message); } -#define handle_warn(arg_info, arg_property_name, arg_severity, ...) \ + +#define handle_warn(arg_info, arg_kf_key, arg_property_name, arg_severity, ...) \ ({ \ KeyfileReaderInfo *_info = (arg_info); \ \ nm_assert (!_info->error); \ \ if (_info->read_handler) { \ - _handle_warn (_info, (arg_property_name), (arg_severity), \ + _handle_warn (_info, \ + (arg_kf_key), \ + (arg_property_name), \ + (arg_severity), \ g_strdup_printf (__VA_ARGS__)); \ } \ _info->error == NULL; \ @@ -196,15 +242,22 @@ read_array_of_uint (GKeyFile *file, } static gboolean -get_one_int (KeyfileReaderInfo *info, const char *property_name, const char *str, guint32 max_val, guint32 *out) +get_one_int (KeyfileReaderInfo *info, + const char *kf_key, + const char *property_name, + const char *str, + guint32 max_val, + guint32 *out) { gint64 tmp; nm_assert ((!info) == (!property_name)); + nm_assert ((!info) == (!kf_key)); if (!str || !str[0]) { - if (property_name) { + if (info) { handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring missing number")); @@ -214,8 +267,9 @@ get_one_int (KeyfileReaderInfo *info, const char *property_name, const char *str tmp = _nm_utils_ascii_str_to_int64 (str, 10, 0, max_val, -1); if (tmp == -1) { - if (property_name) { + if (info) { handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid number '%s'"), @@ -229,7 +283,12 @@ get_one_int (KeyfileReaderInfo *info, const char *property_name, const char *str } static gpointer -build_address (KeyfileReaderInfo *info, int family, const char *address_str, guint32 plen, const char *property_name) +build_address (KeyfileReaderInfo *info, + const char *kf_key, + const char *property_name, + int family, + const char *address_str, + guint32 plen) { NMIPAddress *addr; GError *error = NULL; @@ -239,6 +298,7 @@ build_address (KeyfileReaderInfo *info, int family, const char *address_str, gui addr = nm_ip_address_new (family, address_str, plen, &error); if (!addr) { handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid %s address: %s"), @@ -252,6 +312,7 @@ build_address (KeyfileReaderInfo *info, int family, const char *address_str, gui static gpointer build_route (KeyfileReaderInfo *info, + const char *kf_key, const char *property_name, int family, const char *dest_str, @@ -279,11 +340,12 @@ build_route (KeyfileReaderInfo *info, **/ if ( family == AF_INET6 && !metric_str - && get_one_int (NULL, NULL, gateway_str, G_MAXUINT32, &u32)) { + && get_one_int (NULL, NULL, NULL, gateway_str, G_MAXUINT32, &u32)) { metric = u32; gateway_str = NULL; } else { handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid gateway '%s' for %s route"), @@ -297,7 +359,12 @@ build_route (KeyfileReaderInfo *info, /* parse metric, default to -1 */ if (metric_str) { - if (!get_one_int (info, property_name, metric_str, G_MAXUINT32, &u32)) + if (!get_one_int (info, + kf_key, + property_name, + metric_str, + G_MAXUINT32, + &u32)) return NULL; metric = u32; } @@ -310,6 +377,7 @@ build_route (KeyfileReaderInfo *info, &error); if (!route) { handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid %s route: %s"), @@ -455,7 +523,7 @@ static gpointer read_one_ip_address_or_route (KeyfileReaderInfo *info, const char *property_name, const char *setting_name, - const char *key_name, + const char *kf_key, gboolean ipv6, gboolean route, char **out_gateway, @@ -472,9 +540,9 @@ read_one_ip_address_or_route (KeyfileReaderInfo *info, gs_free char *value = NULL; gs_free char *value_orig = NULL; -#define VALUE_ORIG() (value_orig ?: (value_orig = nm_keyfile_plugin_kf_get_string (info->keyfile, setting_name, key_name, NULL))) +#define VALUE_ORIG() (value_orig ?: (value_orig = nm_keyfile_plugin_kf_get_string (info->keyfile, setting_name, kf_key, NULL))) - value = nm_keyfile_plugin_kf_get_string (info->keyfile, setting_name, key_name, NULL); + value = nm_keyfile_plugin_kf_get_string (info->keyfile, setting_name, kf_key, NULL); if (!value) return NULL; @@ -484,11 +552,12 @@ read_one_ip_address_or_route (KeyfileReaderInfo *info, address_str = read_field (¤t, &err_str, IP_ADDRESS_CHARS, DELIMITERS); if (err_str) { handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("unexpected character '%c' for address %s: '%s' (position %td)"), *err_str, - key_name, + kf_key, VALUE_ORIG (), err_str - current); return NULL; @@ -499,11 +568,12 @@ read_one_ip_address_or_route (KeyfileReaderInfo *info, gateway_str = read_field (¤t, &err_str, IP_ADDRESS_CHARS, DELIMITERS); if (err_str) { handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("unexpected character '%c' for %s: '%s' (position %td)"), *err_str, - key_name, + kf_key, VALUE_ORIG (), err_str - current); return NULL; @@ -513,11 +583,12 @@ read_one_ip_address_or_route (KeyfileReaderInfo *info, metric_str = read_field (¤t, &err_str, DIGITS, DELIMITERS); if (err_str) { handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("unexpected character '%c' in prefix length for %s: '%s' (position %td)"), *err_str, - key_name, + kf_key, VALUE_ORIG (), err_str - current); return NULL; @@ -529,19 +600,21 @@ read_one_ip_address_or_route (KeyfileReaderInfo *info, if (*current) { /* another field follows */ handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("garbage at the end of value %s: '%s'"), - key_name, + kf_key, VALUE_ORIG ()); return NULL; } else { /* semicolon at the end of input */ if (!handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_INFO, _("deprecated semicolon at the end of value %s: '%s'"), - key_name, + kf_key, VALUE_ORIG ())) return NULL; } @@ -551,14 +624,20 @@ read_one_ip_address_or_route (KeyfileReaderInfo *info, /* parse plen, fallback to defaults */ if (plen_str) { - if (!get_one_int (info, property_name, plen_str, ipv6 ? 128 : 32, &plen)) { + if (!get_one_int (info, + kf_key, + property_name, + plen_str, + ipv6 ? 128 : 32, + &plen)) { plen = DEFAULT_PREFIX (route, ipv6); if ( info->error || !handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid prefix length for %s '%s', defaulting to %d"), - key_name, + kf_key, VALUE_ORIG (), plen)) return NULL; @@ -566,10 +645,11 @@ read_one_ip_address_or_route (KeyfileReaderInfo *info, } else { plen = DEFAULT_PREFIX (route, ipv6); if (!handle_warn (info, + kf_key, property_name, NM_KEYFILE_WARN_SEVERITY_WARN, _("missing prefix length for %s '%s', defaulting to %d"), - key_name, + kf_key, VALUE_ORIG (), plen)) return NULL; @@ -578,6 +658,7 @@ read_one_ip_address_or_route (KeyfileReaderInfo *info, /* build the appropriate data structure for NetworkManager settings */ if (route) { result = build_route (info, + kf_key, property_name, ipv6 ? AF_INET6 : AF_INET, address_str, @@ -586,10 +667,11 @@ read_one_ip_address_or_route (KeyfileReaderInfo *info, metric_str); } else { result = build_address (info, + kf_key, + property_name, ipv6 ? AF_INET6 : AF_INET, address_str, - plen, - property_name); + plen); if (!result) return NULL; if (gateway_str) @@ -905,6 +987,7 @@ ip_routing_rule_parser_full (KeyfileReaderInfo *info, &local); if (!rule) { if (!handle_warn (info, + build_list[i_build_list].s_key, property_info->name, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid value for \"%s\": %s"), @@ -945,6 +1028,7 @@ ip_dns_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (inet_pton (addr_family, list[i], &addr) <= 0) { if (!handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid DNS server IPv%c address '%s'"), nm_utils_addr_family_to_char (addr_family), @@ -979,6 +1063,7 @@ ip6_addr_gen_mode_parser (KeyfileReaderInfo *info, NMSetting *setting, const cha (int *) &addr_gen_mode, NULL)) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid option '%s', use one of [%s]"), s, @@ -1034,6 +1119,7 @@ mac_address_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid MAC address")); return; @@ -1292,6 +1378,7 @@ ssid_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (!bytes) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid SSID")); return; @@ -1307,7 +1394,10 @@ password_raw_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *ke bytes = get_bytes (info, setting_name, key, FALSE, TRUE); if (!bytes) { - handle_warn (info, key, NM_KEYFILE_WARN_SEVERITY_WARN, + handle_warn (info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid raw password")); return; } @@ -1451,6 +1541,7 @@ cert_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (!info->error) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid key/cert value")); } @@ -1464,6 +1555,7 @@ cert_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (nm_setting_802_1x_check_cert_scheme (bin, bin_len, NULL) != NM_SETTING_802_1X_CK_SCHEME_PATH) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid key/cert value path \"%s\""), bin); @@ -1487,6 +1579,7 @@ cert_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (!g_file_test (path2, G_FILE_TEST_EXISTS)) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE, _("certificate or key file '%s' does not exist"), path2); @@ -1498,6 +1591,7 @@ cert_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (nm_setting_802_1x_check_cert_scheme (bin, bin_len, NULL) != NM_SETTING_802_1X_CK_SCHEME_PKCS11) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid PKCS#11 URI \"%s\""), bin); @@ -1545,6 +1639,7 @@ cert_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (bin_decoded_len == 0) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid key/cert value data:;base64, is not base64")); return; @@ -1556,6 +1651,7 @@ cert_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) * with file://. Just warn and return TRUE to signal that we ~handled~ the setting. */ handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid key/cert value data:;base64,file://")); return; @@ -1579,6 +1675,7 @@ cert_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (!path_exists) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE, _("certificate or key file '%s' does not exist"), path); @@ -1593,6 +1690,7 @@ cert_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) * continue. */ handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid key/cert value is not a valid blob")); return; @@ -1697,6 +1795,7 @@ parity_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid parity value '%s'"), tmp_str ?: ""); @@ -1714,6 +1813,7 @@ out_err: } handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid setting: %s"), err->message); @@ -1734,6 +1834,7 @@ team_config_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key && !nm_setting_verify (setting, NULL, &error)) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid team configuration: %s"), error->message); @@ -1767,6 +1868,7 @@ bridge_vlan_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key if (!vlan) { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, "invalid bridge VLAN: %s", local->message); @@ -1817,6 +1919,7 @@ qdisc_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (!qdisc) { handle_warn (info, keys[i], + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid qdisc: %s"), err->message); @@ -1865,6 +1968,7 @@ tfilter_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (!tfilter) { handle_warn (info, keys[i], + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid tfilter: %s"), err->message); @@ -2439,9 +2543,9 @@ static void cert_writer_default (NMConnection *connection, GKeyFile *file, NMSetting8021x *setting, + const char *setting_name, const NMSetting8021xSchemeVtable *vtable) { - const char *setting_name = nm_setting_get_name (NM_SETTING (setting)); NMSetting8021xCKScheme scheme; scheme = vtable->scheme_func (setting); @@ -2515,7 +2619,7 @@ cert_writer (KeyfileWriterInfo *info, const GValue *value) { const NMSetting8021xSchemeVtable *vtable = NULL; - NMKeyfileHandlerData handler_data; + const char *setting_name; guint i; for (i = 0; nm_setting_8021x_scheme_vtable[i].setting_key; i++) { @@ -2527,12 +2631,19 @@ cert_writer (KeyfileWriterInfo *info, if (!vtable) g_return_if_reached (); + setting_name = nm_setting_get_name (NM_SETTING (setting)); + if (info->write_handler) { - _key_file_handler_data_init (&handler_data, - NM_KEYFILE_HANDLER_TYPE_WRITE_CERT, - &info->error); + NMKeyfileHandlerData handler_data; + + _key_file_handler_data_init_write (&handler_data, + NM_KEYFILE_HANDLER_TYPE_WRITE_CERT, + info, + setting_name, + vtable->setting_key, + setting, + key); handler_data.write_cert = (NMKeyfileHandlerDataWriteCert) { - .setting = NM_SETTING_802_1X (setting), .vtable = vtable, }; @@ -2549,6 +2660,7 @@ cert_writer (KeyfileWriterInfo *info, cert_writer_default (info->connection, info->keyfile, NM_SETTING_802_1X (setting), + setting_name, vtable); } @@ -3109,6 +3221,7 @@ read_one_setting_value (KeyfileReaderInfo *info, if (err) { if (!handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("error loading setting value: %s"), err->message)) @@ -3212,6 +3325,7 @@ read_one_setting_value (KeyfileReaderInfo *info, if ( !already_warned && !handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid byte element '%u' (not between 0 and 255 inclusive)"), val)) @@ -3264,6 +3378,7 @@ read_one_setting_value (KeyfileReaderInfo *info, } else { handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid setting: %s"), err->message); @@ -3288,6 +3403,7 @@ _read_setting (KeyfileReaderInfo *info) if (!type) { handle_warn (info, NULL, + NULL, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid setting name '%s'"), info->group); @@ -3336,6 +3452,7 @@ _read_setting (KeyfileReaderInfo *info) if (!variant_type) { if (!handle_warn (info, key, + NULL, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid key '%s.%s'"), info->group, @@ -3354,6 +3471,7 @@ _read_setting (KeyfileReaderInfo *info) if (local) { if (!handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("key '%s.%s' is not boolean"), info->group, @@ -3373,6 +3491,7 @@ _read_setting (KeyfileReaderInfo *info) if (local) { if (!handle_warn (info, key, + key, NM_KEYFILE_WARN_SEVERITY_WARN, _("key '%s.%s' is not a uint32"), info->group, @@ -3433,6 +3552,7 @@ _read_setting_wireguard_peer (KeyfileReaderInfo *info) * is uniquely identified. */ handle_warn (info, NULL, + NM_SETTING_WIREGUARD_PEERS, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid peer public key in section '%s'"), info->group); @@ -3447,6 +3567,7 @@ _read_setting_wireguard_peer (KeyfileReaderInfo *info) if (!nm_wireguard_peer_set_preshared_key (peer, str, FALSE)) { if (!handle_warn (info, key, + NM_SETTING_WIREGUARD_PEERS, NM_KEYFILE_WARN_SEVERITY_WARN, _("key '%s.%s' is not a valid 256 bit key in base64 encoding"), info->group, @@ -3463,6 +3584,7 @@ _read_setting_wireguard_peer (KeyfileReaderInfo *info) || !_nm_setting_secret_flags_valid (i64)) { if (!handle_warn (info, key, + NM_SETTING_WIREGUARD_PEERS, NM_KEYFILE_WARN_SEVERITY_WARN, _("key '%s.%s' is not a valid secret flag"), info->group, @@ -3478,6 +3600,7 @@ _read_setting_wireguard_peer (KeyfileReaderInfo *info) if (i64 == -1) { if (!handle_warn (info, key, + NM_SETTING_WIREGUARD_PEERS, NM_KEYFILE_WARN_SEVERITY_WARN, _("key '%s.%s' is not a integer in range 0 to 2^32"), info->group, @@ -3493,6 +3616,7 @@ _read_setting_wireguard_peer (KeyfileReaderInfo *info) if (!nm_wireguard_peer_set_endpoint (peer, str, FALSE)) { if (!handle_warn (info, key, + NM_SETTING_WIREGUARD_PEERS, NM_KEYFILE_WARN_SEVERITY_WARN, _("key '%s.%s' is not a valid endpoint"), info->group, @@ -3518,6 +3642,7 @@ _read_setting_wireguard_peer (KeyfileReaderInfo *info) if (has_error) { if (!handle_warn (info, key, + NM_SETTING_WIREGUARD_PEERS, NM_KEYFILE_WARN_SEVERITY_WARN, _("key '%s.%s' has invalid allowed-ips"), info->group, @@ -3531,7 +3656,8 @@ _read_setting_wireguard_peer (KeyfileReaderInfo *info) if (!nm_wireguard_peer_is_valid (peer, TRUE, TRUE, &error)) { handle_warn (info, - key, + NULL, + NM_SETTING_WIREGUARD_PEERS, NM_KEYFILE_WARN_SEVERITY_WARN, _("peer '%s' is invalid: %s"), info->group, diff --git a/src/settings/plugins/keyfile/nms-keyfile-reader.c b/src/settings/plugins/keyfile/nms-keyfile-reader.c index 460f740646..520053c191 100644 --- a/src/settings/plugins/keyfile/nms-keyfile-reader.c +++ b/src/settings/plugins/keyfile/nms-keyfile-reader.c @@ -43,23 +43,23 @@ _fmt_warn (const char *group, NMSetting *setting, const char *property_name, con typedef struct { bool verbose; -} HandlerReadData; +} ReadInfo; static gboolean _handler_read (GKeyFile *keyfile, NMConnection *connection, - NMKeyfileHandlerType type, - NMKeyfileHandlerData *type_data, + NMKeyfileHandlerType handler_type, + NMKeyfileHandlerData *handler_data, void *user_data) { - const HandlerReadData *handler_data = user_data; + const ReadInfo *read_info = user_data; - if (type == NM_KEYFILE_HANDLER_TYPE_WARN) { - const NMKeyfileHandlerDataWarn *warn_data = &type_data->warn; + if (handler_type == NM_KEYFILE_HANDLER_TYPE_WARN) { + const NMKeyfileHandlerDataWarn *warn_data = &handler_data->warn; NMLogLevel level; char *message_free = NULL; - if (!handler_data->verbose) + if (!read_info->verbose) return TRUE; if (warn_data->severity > NM_KEYFILE_WARN_SEVERITY_WARN) @@ -71,11 +71,15 @@ _handler_read (GKeyFile *keyfile, else level = LOGL_INFO; - nm_log (level, LOGD_SETTINGS, NULL, + nm_log (level, + LOGD_SETTINGS, + NULL, nm_connection_get_uuid (connection), "keyfile: %s", - _fmt_warn (warn_data->group, warn_data->setting, - warn_data->property_name, warn_data->message, + _fmt_warn (handler_data->kf_group_name, + handler_data->cur_setting, + handler_data->cur_property, + warn_data->message, &message_free)); g_free (message_free); return TRUE; @@ -93,7 +97,7 @@ nms_keyfile_reader_from_keyfile (GKeyFile *key_file, GError **error) { NMConnection *connection; - HandlerReadData data = { + ReadInfo read_info = { .verbose = verbose, }; gs_free char *base_dir_free = NULL; @@ -122,7 +126,7 @@ nms_keyfile_reader_from_keyfile (GKeyFile *key_file, filename = &s[1]; } - connection = nm_keyfile_read (key_file, base_dir, _handler_read, &data, error); + connection = nm_keyfile_read (key_file, base_dir, _handler_read, &read_info, error); if (!connection) return NULL; diff --git a/src/settings/plugins/keyfile/nms-keyfile-writer.c b/src/settings/plugins/keyfile/nms-keyfile-writer.c index efe5a9b16f..ac8ed6706b 100644 --- a/src/settings/plugins/keyfile/nms-keyfile-writer.c +++ b/src/settings/plugins/keyfile/nms-keyfile-writer.c @@ -28,21 +28,22 @@ typedef struct { static void cert_writer (NMConnection *connection, GKeyFile *file, - NMKeyfileHandlerDataWriteCert *cert_data, + NMSetting8021x *setting, + const NMSetting8021xSchemeVtable *vtable, WriteInfo *info, GError **error) { - const char *setting_name = nm_setting_get_name (NM_SETTING (cert_data->setting)); + const char *setting_name = nm_setting_get_name (NM_SETTING (setting)); NMSetting8021xCKScheme scheme; NMSetting8021xCKFormat format; const char *path = NULL, *ext = "pem"; - scheme = cert_data->vtable->scheme_func (cert_data->setting); + scheme = vtable->scheme_func (setting); if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) { char *tmp = NULL; const char *accepted_path = NULL; - path = cert_data->vtable->path_func (cert_data->setting); + path = vtable->path_func (setting); g_assert (path); if (g_str_has_prefix (path, info->keyfile_dir)) { @@ -78,11 +79,11 @@ cert_writer (NMConnection *connection, if (!accepted_path) accepted_path = tmp = g_strconcat (NM_KEYFILE_CERT_SCHEME_PREFIX_PATH, path, NULL); - nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->vtable->setting_key, accepted_path); + nm_keyfile_plugin_kf_set_string (file, setting_name, vtable->setting_key, accepted_path); g_free (tmp); } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11) { - nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->vtable->setting_key, - cert_data->vtable->uri_func (cert_data->setting)); + nm_keyfile_plugin_kf_set_string (file, setting_name, vtable->setting_key, + vtable->uri_func (setting)); } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) { GBytes *blob; const guint8 *blob_data; @@ -91,13 +92,13 @@ cert_writer (NMConnection *connection, GError *local = NULL; char *new_path; - blob = cert_data->vtable->blob_func (cert_data->setting); + blob = vtable->blob_func (setting); g_assert (blob); blob_data = g_bytes_get_data (blob, &blob_len); - if (cert_data->vtable->format_func) { + if (vtable->format_func) { /* Get the extension for a private key */ - format = cert_data->vtable->format_func (cert_data->setting); + format = vtable->format_func (setting); if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12) ext = "p12"; } else { @@ -110,7 +111,7 @@ cert_writer (NMConnection *connection, * from now on instead of pushing around the certificate data. */ new_path = g_strdup_printf ("%s/%s-%s.%s", info->keyfile_dir, nm_connection_get_uuid (connection), - cert_data->vtable->file_suffix, ext); + vtable->file_suffix, ext); /* FIXME(keyfile-parse-in-memory): writer must not access/write to the file system before * being sure that the entire profile can be written and all circumstances are good to @@ -125,10 +126,10 @@ cert_writer (NMConnection *connection, if (success) { /* Write the path value to the keyfile. * We know, that basename(new_path) starts with a UUID, hence no conflict with "data:;base64," */ - nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->vtable->setting_key, strrchr (new_path, '/') + 1); + nm_keyfile_plugin_kf_set_string (file, setting_name, vtable->setting_key, strrchr (new_path, '/') + 1); } else { nm_log_warn (LOGD_SETTINGS, "keyfile: %s.%s: failed to write certificate to file %s: %s", - setting_name, cert_data->vtable->setting_key, new_path, local->message); + setting_name, vtable->setting_key, new_path, local->message); g_error_free (local); } g_free (new_path); @@ -151,8 +152,10 @@ _handler_write (NMConnection *connection, void *user_data) { if (type == NM_KEYFILE_HANDLER_TYPE_WRITE_CERT) { - cert_writer (connection, keyfile, - &type_data->write_cert, + cert_writer (connection, + keyfile, + NM_SETTING_802_1X (type_data->cur_setting), + type_data->write_cert.vtable, user_data, type_data->p_error); return TRUE; |