From ef491acfde9981a7edc4ce5fe2db66a8fb023aa7 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 3 Mar 2017 23:59:16 +0100 Subject: [PATCH] core: split nm_utils_format_con_diff_for_audit() The function will be called to display in audit logs the changes done to connections. --- src/nm-core-utils.c | 28 ++++++++++++++ src/nm-core-utils.h | 2 + src/settings/nm-settings-connection.c | 56 ++++++--------------------- 3 files changed, 41 insertions(+), 45 deletions(-) diff --git a/src/nm-core-utils.c b/src/nm-core-utils.c index 75c44b786..b71974d83 100644 --- a/src/nm-core-utils.c +++ b/src/nm-core-utils.c @@ -4311,3 +4311,31 @@ skip: return result; } +char * +nm_utils_format_con_diff_for_audit (GHashTable *diff) +{ + GHashTable *setting_diff; + char *setting_name, *prop_name; + GHashTableIter iter, iter2; + GString *str; + + str = g_string_sized_new (32); + g_hash_table_iter_init (&iter, diff); + + while (g_hash_table_iter_next (&iter, + (gpointer *) &setting_name, + (gpointer *) &setting_diff)) { + if (!setting_diff) + continue; + + g_hash_table_iter_init (&iter2, setting_diff); + + while (g_hash_table_iter_next (&iter2, (gpointer *) &prop_name, NULL)) + g_string_append_printf (str, "%s.%s,", setting_name, prop_name); + } + + if (str->len) + str->str[str->len - 1] = '\0'; + + return g_string_free (str, FALSE); +} diff --git a/src/nm-core-utils.h b/src/nm-core-utils.h index a1d9c2d46..b0dbe9bf0 100644 --- a/src/nm-core-utils.h +++ b/src/nm-core-utils.h @@ -469,5 +469,7 @@ struct stat; gboolean nm_utils_validate_plugin (const char *path, struct stat *stat, GError **error); char **nm_utils_read_plugin_paths (const char *dirname, const char *prefix); +char *nm_utils_format_con_diff_for_audit (GHashTable *diff); + #endif /* __NM_CORE_UTILS_H__ */ diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c index 827a67b2c..bfbe051f1 100644 --- a/src/settings/nm-settings-connection.c +++ b/src/settings/nm-settings-connection.c @@ -1653,49 +1653,6 @@ con_update_cb (NMSettingsConnection *self, update_complete (self, info, error); } -static char * -con_list_changed_props (NMConnection *old, NMConnection *new) -{ - gs_unref_hashtable GHashTable *diff = NULL; - GHashTable *setting_diff; - char *setting_name, *prop_name; - GHashTableIter iter, iter2; - gboolean same; - GString *str; - - same = nm_connection_diff (old, new, - NM_SETTING_COMPARE_FLAG_EXACT | - NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT, - &diff); - - if (same || !diff) - return NULL; - - str = g_string_sized_new (32); - g_hash_table_iter_init (&iter, diff); - - while (g_hash_table_iter_next (&iter, - (gpointer *) &setting_name, - (gpointer *) &setting_diff)) { - if (!setting_diff) - continue; - - g_hash_table_iter_init (&iter2, setting_diff); - - while (g_hash_table_iter_next (&iter2, (gpointer *) &prop_name, NULL)) { - g_string_append (str, setting_name); - g_string_append_c (str, '.'); - g_string_append (str, prop_name); - g_string_append_c (str, ','); - } - } - - if (str->len) - str->str[str->len - 1] = '\0'; - - return g_string_free (str, FALSE); -} - static void update_auth_cb (NMSettingsConnection *self, GDBusMethodInvocation *context, @@ -1736,8 +1693,17 @@ update_auth_cb (NMSettingsConnection *self, update_agent_secrets_cache (self, info->new_settings); } - if (nm_audit_manager_audit_enabled (nm_audit_manager_get ())) - info->audit_args = con_list_changed_props (NM_CONNECTION (self), info->new_settings); + if (nm_audit_manager_audit_enabled (nm_audit_manager_get ())) { + gs_unref_hashtable GHashTable *diff = NULL; + gboolean same; + + same = nm_connection_diff (NM_CONNECTION (self), info->new_settings, + NM_SETTING_COMPARE_FLAG_EXACT | + NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT, + &diff); + if (!same && diff) + info->audit_args = nm_utils_format_con_diff_for_audit (diff); + } if (info->save_to_disk) { nm_settings_connection_replace_and_commit (self,