diff options
| author | Michael Biebl <biebl@debian.org> | 2022-02-14 19:23:28 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2022-02-14 19:23:28 +0100 |
| commit | 2f94dba7385fd0e0ef19a06eb4a2fcf6c43d7946 (patch) | |
| tree | e2222f5577115985dd52044d2991253403cdd952 /src/core/nm-config-data.c | |
| parent | 88c227d90a6b7b388c5c85d72802a0ca8f05ed5c (diff) | |
New upstream version 1.35.91 upstream/1.35.91
Diffstat (limited to 'src/core/nm-config-data.c')
| -rw-r--r-- | src/core/nm-config-data.c | 250 |
1 files changed, 153 insertions, 97 deletions
diff --git a/src/core/nm-config-data.c b/src/core/nm-config-data.c index 1cb8a43c..ddb7787f 100644 --- a/src/core/nm-config-data.c +++ b/src/core/nm-config-data.c @@ -17,18 +17,18 @@ /*****************************************************************************/ typedef struct { - char * group_name; + char *group_name; gboolean stop_match; struct { /* have a separate boolean field @has, because a @spec with * value %NULL does not necessarily mean, that the property * "match-device" was unspecified. */ gboolean has; - GSList * spec; + GSList *spec; } match_device; union { struct { - GSList * allowed_connections; + GSList *allowed_connections; gboolean allowed_connections_has; } device; }; @@ -40,15 +40,15 @@ typedef struct { } MatchSectionInfo; struct _NMGlobalDnsDomain { - char * name; + char *name; char **servers; char **options; }; struct _NMGlobalDnsConfig { - char ** searches; - char ** options; - GHashTable * domains; + char **searches; + char **options; + GHashTable *domains; const char **domain_list; gboolean internal; }; @@ -83,8 +83,8 @@ typedef struct { struct { gboolean enabled; - char * uri; - char * response; + char *uri; + char *response; guint interval; } connectivity; @@ -92,7 +92,7 @@ typedef struct { struct { /* from /var/lib/NetworkManager/no-auto-default.state */ - char ** arr; + char **arr; GSList *specs; /* from main.no-auto-default setting in NetworkManager.conf. */ @@ -158,9 +158,9 @@ nm_config_data_has_group(const NMConfigData *self, const char *group) } char * -nm_config_data_get_value(const NMConfigData * self, - const char * group, - const char * key, +nm_config_data_get_value(const NMConfigData *self, + const char *group, + const char *key, NMConfigGetValueFlags flags) { g_return_val_if_fail(NM_IS_CONFIG_DATA(self), NULL); @@ -174,9 +174,9 @@ nm_config_data_get_value(const NMConfigData * self, } gboolean -nm_config_data_has_value(const NMConfigData * self, - const char * group, - const char * key, +nm_config_data_has_value(const NMConfigData *self, + const char *group, + const char *key, NMConfigGetValueFlags flags) { gs_free char *value = NULL; @@ -192,8 +192,8 @@ nm_config_data_has_value(const NMConfigData * self, int nm_config_data_get_value_boolean(const NMConfigData *self, - const char * group, - const char * key, + const char *group, + const char *key, int default_value) { char *str; @@ -217,8 +217,8 @@ nm_config_data_get_value_boolean(const NMConfigData *self, gint64 nm_config_data_get_value_int64(const NMConfigData *self, - const char * group, - const char * key, + const char *group, + const char *key, guint base, gint64 min, gint64 max, @@ -226,7 +226,7 @@ nm_config_data_get_value_int64(const NMConfigData *self, { int errsv; gint64 val; - char * str; + char *str; g_return_val_if_fail(NM_IS_CONFIG_DATA(self), fallback); g_return_val_if_fail(group && *group, fallback); @@ -248,9 +248,9 @@ nm_config_data_get_value_int64(const NMConfigData *self, char ** nm_config_data_get_plugins(const NMConfigData *self, gboolean allow_default) { - gs_free_error GError * error = NULL; + gs_free_error GError *error = NULL; const NMConfigDataPrivate *priv; - char ** list; + char **list; g_return_val_if_fail(self, NULL); @@ -406,7 +406,7 @@ GKeyFile * nm_config_data_clone_keyfile_intern(const NMConfigData *self) { const NMConfigDataPrivate *priv; - GKeyFile * keyfile; + GKeyFile *keyfile; g_return_val_if_fail(NM_IS_CONFIG_DATA(self), FALSE); @@ -461,7 +461,7 @@ static NMAuthPolkitMode _config_data_get_main_auth_polkit(const NMConfigData *self, gboolean *out_invalid_config) { NMAuthPolkitMode auth_polkit_mode; - gs_free char * str = NULL; + gs_free char *str = NULL; str = nm_config_data_get_value(self, NM_CONFIG_KEYFILE_GROUP_MAIN, @@ -560,7 +560,7 @@ _merge_keyfiles(GKeyFile *keyfile_user, GKeyFile *keyfile_intern) { gs_strfreev char **groups = NULL; guint g, k; - GKeyFile * keyfile; + GKeyFile *keyfile; gsize ngroups; keyfile = nm_config_create_keyfile(); @@ -577,7 +577,7 @@ _merge_keyfiles(GKeyFile *keyfile_user, GKeyFile *keyfile_intern) * have lowest priority last. */ _nm_config_sort_groups(groups, ngroups); for (g = 0; groups[g]; g++) { - const char * group = groups[g]; + const char *group = groups[g]; gs_strfreev char **keys = NULL; gboolean is_intern, is_atomic = FALSE; @@ -597,7 +597,7 @@ _merge_keyfiles(GKeyFile *keyfile_user, GKeyFile *keyfile_intern) } for (k = 0; keys[k]; k++) { - const char * key = keys[k]; + const char *key = keys[k]; gs_free char *value = NULL; if (is_atomic && nm_streq(key, NM_CONFIG_KEYFILE_KEY_ATOMIC_SECTION_WAS)) @@ -711,20 +711,23 @@ static const struct { {NM_CONFIG_KEYFILE_GROUP_MAIN, NM_CONFIG_KEYFILE_KEY_MAIN_IWD_CONFIG_PATH, ""}, {NM_CONFIG_KEYFILE_GROUP_LOGGING, "backend", NM_CONFIG_DEFAULT_LOGGING_BACKEND}, {NM_CONFIG_KEYFILE_GROUP_LOGGING, "audit", NM_CONFIG_DEFAULT_LOGGING_AUDIT}, + {NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE, + NM_CONFIG_KEYFILE_KEY_DEVICE_WIFI_BACKEND, + NM_CONFIG_DEFAULT_WIFI_BACKEND}, }; void -nm_config_data_log(const NMConfigData * self, - const char * prefix, - const char * key_prefix, - const char * no_auto_default_file, +nm_config_data_log(const NMConfigData *self, + const char *prefix, + const char *key_prefix, + const char *no_auto_default_file, /* FILE* */ gpointer print_stream) { - const NMConfigDataPrivate *priv; - gs_strfreev char ** groups = NULL; - gsize ngroups; - guint g, k, i; - FILE * stream = print_stream; + const NMConfigDataPrivate *priv; + gs_strfreev char **groups = NULL; + gsize ngroups; + guint g, k, i; + FILE *stream = print_stream; gs_unref_ptrarray GPtrArray *groups_full = NULL; gboolean print_default = !!stream; @@ -792,7 +795,7 @@ nm_config_data_log(const NMConfigData * self, _LOG(stream, prefix, "config-data[%p]: %u groups", self, groups_full->len); for (g = 0; g < groups_full->len; g++) { - const char * group = groups_full->pdata[g]; + const char *group = groups_full->pdata[g]; gs_strfreev char **keys = NULL; gboolean is_atomic; @@ -818,7 +821,7 @@ nm_config_data_log(const NMConfigData * self, keys = g_key_file_get_keys(priv->keyfile, group, NULL, NULL); for (k = 0; keys && keys[k]; k++) { - const char * key = keys[k]; + const char *key = keys[k]; gs_free char *value = NULL; value = g_key_file_get_value(priv->keyfile, group, key, NULL); @@ -929,6 +932,59 @@ nm_global_dns_config_is_empty(const NMGlobalDnsConfig *dns_config) return !dns_config->searches && !dns_config->options && !dns_config->domain_list; } +int +nm_global_dns_config_cmp(const NMGlobalDnsConfig *a, + const NMGlobalDnsConfig *b, + gboolean check_internal) +{ + guint i; + + NM_CMP_SELF(a, b); + + NM_CMP_RETURN( + nm_strv_cmp_n(a->searches ?: NM_STRV_EMPTY(), -1, b->searches ?: NM_STRV_EMPTY(), -1)); + + NM_CMP_RETURN( + nm_strv_cmp_n(a->options ?: NM_STRV_EMPTY(), -1, b->options ?: NM_STRV_EMPTY(), -1)); + + NM_CMP_RETURN(nm_strv_cmp_n(a->domain_list ?: NM_STRV_EMPTY_CC(), + -1, + b->domain_list ?: NM_STRV_EMPTY_CC(), + -1)); + + if (a->domain_list) { + for (i = 0; a->domain_list[i]; i++) { + const NMGlobalDnsDomain *domain_a; + const NMGlobalDnsDomain *domain_b; + + nm_assert(nm_streq(a->domain_list[i], b->domain_list[i])); + + domain_a = g_hash_table_lookup(a->domains, a->domain_list[i]); + nm_assert(domain_a); + + domain_b = g_hash_table_lookup(b->domains, b->domain_list[i]); + nm_assert(domain_b); + + NM_CMP_FIELD_STR0(domain_a, domain_b, name); + + NM_CMP_RETURN(nm_strv_cmp_n(domain_a->servers ?: NM_STRV_EMPTY(), + -1, + domain_b->servers ?: NM_STRV_EMPTY(), + -1)); + + NM_CMP_RETURN(nm_strv_cmp_n(domain_a->options ?: NM_STRV_EMPTY(), + -1, + domain_b->options ?: NM_STRV_EMPTY(), + -1)); + } + } + + if (check_internal) + NM_CMP_FIELD(a, b, internal); + + return 0; +} + void nm_global_dns_config_update_checksum(const NMGlobalDnsConfig *dns_config, GChecksum *sum) { @@ -1033,11 +1089,11 @@ static NMGlobalDnsConfig * load_global_dns(GKeyFile *keyfile, gboolean internal) { NMGlobalDnsConfig *dns_config; - char * group, *domain_prefix; + char *group, *domain_prefix; gs_strfreev char **groups = NULL; int g, i, j, domain_prefix_len; gboolean default_found = FALSE; - char ** strv; + char **strv; group = internal ? NM_CONFIG_KEYFILE_GROUP_INTERN_GLOBAL_DNS : NM_CONFIG_KEYFILE_GROUP_GLOBAL_DNS; @@ -1090,8 +1146,8 @@ load_global_dns(GKeyFile *keyfile, gboolean internal) groups = g_key_file_get_groups(keyfile, NULL); for (g = 0; groups[g]; g++) { - char * name; - char ** servers = NULL, **options = NULL; + char *name; + char **servers = NULL, **options = NULL; NMGlobalDnsDomain *domain; if (!g_str_has_prefix(groups[g], domain_prefix) || !groups[g][domain_prefix_len]) @@ -1226,8 +1282,8 @@ global_dns_domain_from_dbus(char *name, GVariant *variant) { NMGlobalDnsDomain *domain; GVariantIter iter; - char ** strv, *key; - GVariant * val; + char **strv, *key; + GVariant *val; int i, j; if (!g_variant_is_of_type(variant, G_VARIANT_TYPE("a{sv}"))) @@ -1279,9 +1335,9 @@ NMGlobalDnsConfig * nm_global_dns_config_from_dbus(const GValue *value, GError **error) { NMGlobalDnsConfig *dns_config; - GVariant * variant, *val; + GVariant *variant, *val; GVariantIter iter; - char ** strv, *key; + char **strv, *key; int i, j; if (!G_VALUE_HOLDS_VARIANT(value)) { @@ -1326,8 +1382,8 @@ nm_global_dns_config_from_dbus(const GValue *value, GError **error) && g_variant_is_of_type(val, G_VARIANT_TYPE("a{sv}"))) { NMGlobalDnsDomain *domain; GVariantIter domain_iter; - GVariant * v; - char * k; + GVariant *v; + char *k; g_variant_iter_init(&domain_iter, val); while (g_variant_iter_next(&domain_iter, "{&sv}", &k, &v)) { @@ -1400,12 +1456,12 @@ global_dns_equal(NMGlobalDnsConfig *old, NMGlobalDnsConfig *new) static const MatchSectionInfo * _match_section_infos_lookup(const MatchSectionInfo *match_section_infos, - GKeyFile * keyfile, - const char * property, - NMDevice * device, - const NMPlatformLink * pllink, - const char * match_device_type, - const char ** out_value) + GKeyFile *keyfile, + const char *property, + NMDevice *device, + const NMPlatformLink *pllink, + const char *match_device_type, + const char **out_value) { const char *match_dhcp_plugin; @@ -1456,13 +1512,13 @@ out: const char * nm_config_data_get_device_config(const NMConfigData *self, - const char * property, - NMDevice * device, - gboolean * has_match) + const char *property, + NMDevice *device, + gboolean *has_match) { const NMConfigDataPrivate *priv; - const MatchSectionInfo * connection_info; - const char * value; + const MatchSectionInfo *connection_info; + const char *value; NM_SET_OUT(has_match, FALSE); @@ -1483,15 +1539,15 @@ nm_config_data_get_device_config(const NMConfigData *self, } const char * -nm_config_data_get_device_config_by_pllink(const NMConfigData * self, - const char * property, +nm_config_data_get_device_config_by_pllink(const NMConfigData *self, + const char *property, const NMPlatformLink *pllink, - const char * match_device_type, - gboolean * has_match) + const char *match_device_type, + gboolean *has_match) { const NMConfigDataPrivate *priv; - const MatchSectionInfo * connection_info; - const char * value; + const MatchSectionInfo *connection_info; + const char *value; g_return_val_if_fail(self, NULL); g_return_val_if_fail(property && *property, NULL); @@ -1511,8 +1567,8 @@ nm_config_data_get_device_config_by_pllink(const NMConfigData * self, gboolean nm_config_data_get_device_config_boolean(const NMConfigData *self, - const char * property, - NMDevice * device, + const char *property, + NMDevice *device, int val_no_match, int val_invalid) { @@ -1527,8 +1583,8 @@ nm_config_data_get_device_config_boolean(const NMConfigData *self, gint64 nm_config_data_get_device_config_int64(const NMConfigData *self, - const char * property, - NMDevice * device, + const char *property, + NMDevice *device, int base, gint64 min, gint64 max, @@ -1548,12 +1604,12 @@ nm_config_data_get_device_config_int64(const NMConfigData *self, const GSList * nm_config_data_get_device_allowed_connections_specs(const NMConfigData *self, - NMDevice * device, - gboolean * has_match) + NMDevice *device, + gboolean *has_match) { const NMConfigDataPrivate *priv; - const MatchSectionInfo * connection_info; - const GSList * ret = NULL; + const MatchSectionInfo *connection_info; + const GSList *ret = NULL; g_return_val_if_fail(self, NULL); @@ -1579,11 +1635,11 @@ nm_config_data_get_device_allowed_connections_specs(const NMConfigData *self, const char * nm_config_data_get_connection_default(const NMConfigData *self, - const char * property, - NMDevice * device) + const char *property, + NMDevice *device) { const NMConfigDataPrivate *priv; - const char * value; + const char *value; g_return_val_if_fail(self, NULL); g_return_val_if_fail(property && *property, NULL); @@ -1616,8 +1672,8 @@ nm_config_data_get_connection_default(const NMConfigData *self, gint64 nm_config_data_get_connection_default_int64(const NMConfigData *self, - const char * property, - NMDevice * device, + const char *property, + NMDevice *device, gint64 min, gint64 max, gint64 fallback) @@ -1650,11 +1706,11 @@ _match_section_info_get_str(const MatchSectionInfo *m, GKeyFile *keyfile, const static void _match_section_info_init(MatchSectionInfo *connection_info, - GKeyFile * keyfile, - char * group, + GKeyFile *keyfile, + char *group, gboolean is_device) { - char ** keys = NULL; + char **keys = NULL; gsize n_keys; gsize i; gsize j; @@ -1686,7 +1742,7 @@ _match_section_info_init(MatchSectionInfo *connection_info, for (i = 0, j = 0; i < n_keys; i++) { gs_free char *key = g_steal_pointer(&keys[i]); - char * value; + char *value; if (NM_IN_STRSET(key, NM_CONFIG_KEYFILE_KEY_STOP_MATCH, NM_CONFIG_KEYFILE_KEY_MATCH_DEVICE)) continue; @@ -1749,11 +1805,11 @@ _match_section_infos_free(MatchSectionInfo *match_section_infos) static MatchSectionInfo * _match_section_infos_construct(GKeyFile *keyfile, gboolean is_device) { - char ** groups; + char **groups; gsize i, j, ngroups; - char * connection_tag = NULL; + char *connection_tag = NULL; MatchSectionInfo *match_section_infos = NULL; - const char * prefix; + const char *prefix; prefix = is_device ? NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE : NM_CONFIG_KEYFILE_GROUPPREFIX_CONNECTION; @@ -1920,7 +1976,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - NMConfigData * self = NM_CONFIG_DATA(object); + NMConfigData *self = NM_CONFIG_DATA(object); NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE(self); switch (prop_id) { @@ -1951,9 +2007,9 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps case PROP_NO_AUTO_DEFAULT: /* construct-only */ { - const char *const * value_arr_orig = g_value_get_boxed(value); + const char *const *value_arr_orig = g_value_get_boxed(value); gs_free const char **value_arr = NULL; - GSList * specs = NULL; + GSList *specs = NULL; gsize i, j; gsize len; @@ -1970,7 +2026,7 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps for (i = 0; i < len; i++) { const char *s = value_arr[i]; gboolean is_mac; - char * spec; + char *spec; if (NM_STR_HAS_PREFIX(s, NM_MATCH_SPEC_INTERFACE_NAME_TAG "=")) is_mac = FALSE; @@ -2006,9 +2062,9 @@ nm_config_data_init(NMConfigData *self) static void constructed(GObject *object) { - NMConfigData * self = NM_CONFIG_DATA(object); + NMConfigData *self = NM_CONFIG_DATA(object); NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE(self); - char * str; + char *str; priv->keyfile = _merge_keyfiles(priv->keyfile_user, priv->keyfile_intern); @@ -2092,11 +2148,11 @@ constructed(GObject *object) } NMConfigData * -nm_config_data_new(const char * config_main_file, - const char * config_description, +nm_config_data_new(const char *config_main_file, + const char *config_description, const char *const *no_auto_default, - GKeyFile * keyfile_user, - GKeyFile * keyfile_intern) + GKeyFile *keyfile_user, + GKeyFile *keyfile_intern) { return g_object_new(NM_TYPE_CONFIG_DATA, NM_CONFIG_DATA_CONFIG_MAIN_FILE, @@ -2133,7 +2189,7 @@ nm_config_data_new_update_keyfile_intern(const NMConfigData *base, GKeyFile *key NMConfigData * nm_config_data_new_update_no_auto_default(const NMConfigData *base, - const char *const * no_auto_default) + const char *const *no_auto_default) { const NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE(base); |