libnm: check options in NMSettingEthtool.verify() in defined order

Iterating the hash gives the entries in undefined order. That
means, when validation would fail for more than one option,
then the error message arbitrarily points out one or the other.

Instead, process the entries in a defined order.
This commit is contained in:
Thomas Haller 2020-05-14 20:57:53 +02:00
parent 280600f0be
commit 16c8555b24
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -198,6 +198,8 @@ nm_setting_ethtool_clear_features (NMSettingEthtool *setting)
nm_ethtool_optname_is_feature);
}
/*****************************************************************************/
guint
nm_setting_ethtool_init_features (NMSettingEthtool *setting,
NMTernary *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */)
@ -277,17 +279,16 @@ nm_setting_ethtool_get_optnames (NMSettingEthtool *setting,
static gboolean
verify (NMSetting *setting, NMConnection *connection, GError **error)
{
GHashTable *hash;
GHashTableIter iter;
const char *optname;
GVariant *variant;
const char *const*optnames;
GVariant *const*variants;
guint len;
guint i;
hash = _nm_setting_option_hash (setting, FALSE);
if (!hash)
return TRUE;
len = _nm_setting_option_get_all (setting, &optnames, &variants);
g_hash_table_iter_init (&iter, hash);
while (g_hash_table_iter_next (&iter, (gpointer *) &optname, (gpointer *) &variant)) {
for (i = 0; i < len; i++) {
const char *optname = optnames[i];
GVariant *variant = variants[i];
const GVariantType *variant_type;
NMEthtoolID ethtool_id;