summaryrefslogtreecommitdiff
path: root/src/nm-audit-manager.h
blob: 2d44c2ca524ec222f18ec93eb4585085cc66b75a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager audit support
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Copyright 2015 Red Hat, Inc.
 */

#ifndef __NM_AUDIT_MANAGER_H__
#define __NM_AUDIT_MANAGER_H__

#include <glib.h>
#include <glib-object.h>

#include "nm-connection.h"
#include "nm-device.h"
#include "nm-types.h"

G_BEGIN_DECLS

#define NM_TYPE_AUDIT_MANAGER            (nm_audit_manager_get_type ())
#define NM_AUDIT_MANAGER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_AUDIT_MANAGER, NMAuditManager))
#define NM_AUDIT_MANAGER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  NM_TYPE_AUDIT_MANAGER, NMAuditManagerClass))
#define NM_IS_AUDIT_MANAGER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_AUDIT_MANAGER))
#define NM_IS_AUDIT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  NM_TYPE_AUDIT_MANAGER))
#define NM_AUDIT_MANAGER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  NM_TYPE_AUDIT_MANAGER, NMAuditManagerClass))

struct _NMAuditManager {
	GObject parent;
};

typedef struct {
	GObjectClass parent;
} NMAuditManagerClass;

#define NM_AUDIT_OP_CONN_ADD                "connection-add"
#define NM_AUDIT_OP_CONN_DELETE             "connection-delete"
#define NM_AUDIT_OP_CONN_UPDATE             "connection-update"
#define NM_AUDIT_OP_CONN_ACTIVATE           "connection-activate"
#define NM_AUDIT_OP_CONN_ADD_ACTIVATE       "connection-add-activate"
#define NM_AUDIT_OP_CONN_DEACTIVATE         "connection-deactivate"
#define NM_AUDIT_OP_CONN_CLEAR_SECRETS      "connection-clear-secrets"

#define NM_AUDIT_OP_RELOAD                  "reload"
#define NM_AUDIT_OP_SLEEP_CONTROL           "sleep-control"
#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_DEVICE_AUTOCONNECT      "device-autoconnect"
#define NM_AUDIT_OP_DEVICE_DISCONNECT       "device-disconnect"
#define NM_AUDIT_OP_DEVICE_DELETE           "device-delete"
#define NM_AUDIT_OP_DEVICE_MANAGED          "device-managed"
#define NM_AUDIT_OP_DEVICE_REAPPLY          "device-reapply"

#define NM_AUDIT_OP_CHECKPOINT_CREATE       "checkpoint-create"
#define NM_AUDIT_OP_CHECKPOINT_ROLLBACK     "checkpoint-rollback"
#define NM_AUDIT_OP_CHECKPOINT_DESTROY      "checkpoint-destroy"

GType nm_audit_manager_get_type (void);
NMAuditManager *nm_audit_manager_get (void);
gboolean nm_audit_manager_audit_enabled (NMAuditManager *self);

#define nm_audit_log_connection_op(op, connection, result, args, subject_context, reason) \
	G_STMT_START { \
		NMAuditManager *_audit = nm_audit_manager_get (); \
		\
		if (nm_audit_manager_audit_enabled (_audit)) { \
			_nm_audit_manager_log_connection_op (_audit, __FILE__, __LINE__, G_STRFUNC, \
			                                     (op), (connection), (result), (args), (subject_context), \
			                                     (reason)); \
		} \
	} G_STMT_END

#define nm_audit_log_control_op(op, arg, result, subject_context, reason) \
	G_STMT_START { \
		NMAuditManager *_audit = nm_audit_manager_get (); \
		\
		if (nm_audit_manager_audit_enabled (_audit)) { \
			_nm_audit_manager_log_generic_op (_audit, __FILE__, __LINE__, G_STRFUNC, \
			                                  (op), (arg), (result), (subject_context), (reason)); \
		} \
	} G_STMT_END

#define nm_audit_log_device_op(op, device, result, subject_context, reason) \
	G_STMT_START { \
		NMAuditManager *_audit = nm_audit_manager_get (); \
		\
		if (nm_audit_manager_audit_enabled (_audit)) { \
			_nm_audit_manager_log_device_op (_audit, __FILE__, __LINE__, G_STRFUNC, \
			                                 (op), (device), (result), (subject_context), (reason)); \
		} \
	} G_STMT_END

#define nm_audit_log_checkpoint_op(op, arg, result, subject_context, reason) \
	G_STMT_START { \
		NMAuditManager *_audit = nm_audit_manager_get (); \
		\
		if (nm_audit_manager_audit_enabled (_audit)) { \
			_nm_audit_manager_log_generic_op (_audit, __FILE__, __LINE__, G_STRFUNC, \
			                                  (op), (arg), (result), (subject_context), (reason)); \
		} \
	} G_STMT_END

void _nm_audit_manager_log_connection_op (NMAuditManager *self, const char *file, guint line,
                                          const char *func, const char *op, NMSettingsConnection *connection,
                                          gboolean result, const char *args, gpointer subject_context,
                                          const char *reason);

void _nm_audit_manager_log_generic_op    (NMAuditManager *self, const char *file, guint line,
                                          const char *func, const char *op, const char *arg,
                                          gboolean result, gpointer subject_context, const char *reason);

void _nm_audit_manager_log_device_op     (NMAuditManager *self, const char *file, guint line,
                                          const char *func, const char *op, NMDevice *device,
                                          gboolean result, gpointer subject_context, const char *reason);

G_END_DECLS

#endif /* __NM_AUDIT_MANAGER_H__ */