summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2019-09-04 08:54:37 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2019-09-05 11:07:55 +0200
commit0ba362e4972a881e8b52eacada4234d4c008675c (patch)
tree983ca10a4e83ade88f09a34b33e396c2bd4f8a53
parent3b72858ed904e664ce45231317466abf4fc40230 (diff)
downloadNetworkManager-bg/audit-hostname.tar.gz
core: add audit log for the SaveHostname callbg/audit-hostname
-rw-r--r--src/nm-audit-manager.h1
-rw-r--r--src/settings/nm-settings.c38
2 files changed, 27 insertions, 12 deletions
diff --git a/src/nm-audit-manager.h b/src/nm-audit-manager.h
index b867822794..b4ad5db995 100644
--- a/src/nm-audit-manager.h
+++ b/src/nm-audit-manager.h
@@ -49,6 +49,7 @@ typedef struct _NMAuditManagerClass NMAuditManagerClass;
#define NM_AUDIT_OP_NET_CONTROL "networking-control"
#define NM_AUDIT_OP_RADIO_CONTROL "radio-control"
#define NM_AUDIT_OP_STATISTICS "statistics"
+#define NM_AUDIT_OP_HOSTNAME_SAVE "hostname-save"
#define NM_AUDIT_OP_DEVICE_AUTOCONNECT "device-autoconnect"
#define NM_AUDIT_OP_DEVICE_DISCONNECT "device-disconnect"
diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
index ce294f54e7..5b8bd84bc5 100644
--- a/src/settings/nm-settings.c
+++ b/src/settings/nm-settings.c
@@ -3277,6 +3277,7 @@ pk_hostname_cb (NMAuthChain *chain,
c_list_unlink (nm_auth_chain_parent_lst_list (chain));
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME);
+ hostname = nm_auth_chain_get_data (chain, "hostname");
/* If our NMSettingsConnection is already gone, do nothing */
if (result != NM_AUTH_CALL_RESULT_YES) {
@@ -3284,8 +3285,6 @@ pk_hostname_cb (NMAuthChain *chain,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
NM_UTILS_ERROR_MSG_INSUFF_PRIV);
} else {
- hostname = nm_auth_chain_get_data (chain, "hostname");
-
if (!nm_hostname_manager_write_hostname (priv->hostname_manager, hostname)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_FAILED,
@@ -3293,6 +3292,12 @@ pk_hostname_cb (NMAuthChain *chain,
}
}
+ nm_audit_log_control_op (NM_AUDIT_OP_HOSTNAME_SAVE,
+ hostname,
+ !error,
+ nm_auth_chain_get_subject (chain),
+ error ? error->message : NULL);
+
if (error)
g_dbus_method_invocation_take_error (context, error);
else
@@ -3312,30 +3317,39 @@ impl_settings_save_hostname (NMDBusObject *obj,
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
NMAuthChain *chain;
const char *hostname;
+ const char *error_reason;
+ int error_code;
g_variant_get (parameters, "(&s)", &hostname);
/* Minimal validation of the hostname */
if (!nm_hostname_manager_validate_hostname (hostname)) {
- g_dbus_method_invocation_return_error_literal (invocation,
- NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_INVALID_HOSTNAME,
- "The hostname was too long or contained invalid characters.");
- return;
+ error_code = NM_SETTINGS_ERROR_INVALID_HOSTNAME;
+ error_reason = "The hostname was too long or contained invalid characters";
+ goto err;
}
chain = nm_auth_chain_new_context (invocation, pk_hostname_cb, self);
if (!chain) {
- g_dbus_method_invocation_return_error_literal (invocation,
- NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_PERMISSION_DENIED,
- "Unable to authenticate the request.");
- return;
+ error_code = NM_SETTINGS_ERROR_PERMISSION_DENIED;
+ error_reason = NM_UTILS_ERROR_MSG_REQ_AUTH_FAILED;
+ goto err;
}
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME, TRUE);
nm_auth_chain_set_data (chain, "hostname", g_strdup (hostname), g_free);
+ return;
+err:
+ nm_audit_log_control_op (NM_AUDIT_OP_HOSTNAME_SAVE,
+ hostname,
+ FALSE,
+ invocation,
+ error_reason);
+ g_dbus_method_invocation_return_error_literal (invocation,
+ NM_SETTINGS_ERROR,
+ error_code,
+ error_reason);
}
/*****************************************************************************/