]> CyberLeo.Net >> Repos - FreeBSD/releng/10.3.git/blob - contrib/openbsm/sys/bsm/audit.h
- Copy stable/10@296371 to releng/10.3 in preparation for 10.3-RC1
[FreeBSD/releng/10.3.git] / contrib / openbsm / sys / bsm / audit.h
1 /*-
2  * Copyright (c) 2005-2009 Apple Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1.  Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer.
11  * 2.  Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
15  *     its contributors may be used to endorse or promote products derived
16  *     from this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #ifndef _BSM_AUDIT_H
31 #define _BSM_AUDIT_H
32
33 #include <sys/param.h>
34 #include <sys/types.h>
35
36 #define AUDIT_RECORD_MAGIC      0x828a0f1b
37 #define MAX_AUDIT_RECORDS       20
38 #define MAXAUDITDATA            (0x8000 - 1)
39 #define MAX_AUDIT_RECORD_SIZE   MAXAUDITDATA
40 #define MIN_AUDIT_FILE_SIZE     (512 * 1024)
41
42 /*
43  * Minimum noumber of free blocks on the filesystem containing the audit
44  * log necessary to avoid a hard log rotation. DO NOT SET THIS VALUE TO 0
45  * as the kernel does an unsigned compare, plus we want to leave a few blocks
46  * free so userspace can terminate the log, etc.
47  */
48 #define AUDIT_HARD_LIMIT_FREE_BLOCKS    4
49
50 /*
51  * Triggers for the audit daemon.
52  */
53 #define AUDIT_TRIGGER_MIN               1
54 #define AUDIT_TRIGGER_LOW_SPACE         1       /* Below low watermark. */
55 #define AUDIT_TRIGGER_ROTATE_KERNEL     2       /* Kernel requests rotate. */
56 #define AUDIT_TRIGGER_READ_FILE         3       /* Re-read config file. */
57 #define AUDIT_TRIGGER_CLOSE_AND_DIE     4       /* Terminate audit. */
58 #define AUDIT_TRIGGER_NO_SPACE          5       /* Below min free space. */
59 #define AUDIT_TRIGGER_ROTATE_USER       6       /* User requests rotate. */
60 #define AUDIT_TRIGGER_INITIALIZE        7       /* User initialize of auditd. */
61 #define AUDIT_TRIGGER_EXPIRE_TRAILS     8       /* User expiration of trails. */
62 #define AUDIT_TRIGGER_MAX               8
63
64 /*
65  * The special device filename (FreeBSD).
66  */
67 #define AUDITDEV_FILENAME       "audit"
68 #define AUDIT_TRIGGER_FILE      ("/dev/" AUDITDEV_FILENAME)
69
70 /*
71  * Pre-defined audit IDs
72  */
73 #define AU_DEFAUDITID   (uid_t)(-1)
74 #define AU_DEFAUDITSID   0
75 #define AU_ASSIGN_ASID  -1
76
77 /*
78  * IPC types.
79  */
80 #define AT_IPC_MSG      ((u_char)1)     /* Message IPC id. */
81 #define AT_IPC_SEM      ((u_char)2)     /* Semaphore IPC id. */
82 #define AT_IPC_SHM      ((u_char)3)     /* Shared mem IPC id. */
83
84 /*
85  * Audit conditions.
86  */
87 #define AUC_UNSET               0
88 #define AUC_AUDITING            1
89 #define AUC_NOAUDIT             2
90 #define AUC_DISABLED            -1
91
92 /*
93  * auditon(2) commands.
94  */
95 #define A_OLDGETPOLICY  2
96 #define A_OLDSETPOLICY  3
97 #define A_GETKMASK      4
98 #define A_SETKMASK      5
99 #define A_OLDGETQCTRL   6
100 #define A_OLDSETQCTRL   7
101 #define A_GETCWD        8
102 #define A_GETCAR        9
103 #define A_GETSTAT       12
104 #define A_SETSTAT       13
105 #define A_SETUMASK      14
106 #define A_SETSMASK      15
107 #define A_OLDGETCOND    20
108 #define A_OLDSETCOND    21
109 #define A_GETCLASS      22
110 #define A_SETCLASS      23
111 #define A_GETPINFO      24
112 #define A_SETPMASK      25
113 #define A_SETFSIZE      26
114 #define A_GETFSIZE      27
115 #define A_GETPINFO_ADDR 28
116 #define A_GETKAUDIT     29
117 #define A_SETKAUDIT     30
118 #define A_SENDTRIGGER   31
119 #define A_GETSINFO_ADDR 32
120 #define A_GETPOLICY     33
121 #define A_SETPOLICY     34
122 #define A_GETQCTRL      35
123 #define A_SETQCTRL      36
124 #define A_GETCOND       37
125 #define A_SETCOND       38
126
127 /*
128  * Audit policy controls.
129  */
130 #define AUDIT_CNT       0x0001
131 #define AUDIT_AHLT      0x0002
132 #define AUDIT_ARGV      0x0004
133 #define AUDIT_ARGE      0x0008
134 #define AUDIT_SEQ       0x0010
135 #define AUDIT_WINDATA   0x0020
136 #define AUDIT_USER      0x0040
137 #define AUDIT_GROUP     0x0080
138 #define AUDIT_TRAIL     0x0100
139 #define AUDIT_PATH      0x0200
140 #define AUDIT_SCNT      0x0400
141 #define AUDIT_PUBLIC    0x0800
142 #define AUDIT_ZONENAME  0x1000
143 #define AUDIT_PERZONE   0x2000
144
145 /*
146  * Default audit queue control parameters.
147  */
148 #define AQ_HIWATER      100
149 #define AQ_MAXHIGH      10000
150 #define AQ_LOWATER      10
151 #define AQ_BUFSZ        MAXAUDITDATA
152 #define AQ_MAXBUFSZ     1048576
153
154 /*
155  * Default minimum percentage free space on file system.
156  */
157 #define AU_FS_MINFREE   20
158
159 /*
160  * Type definitions used indicating the length of variable length addresses
161  * in tokens containing addresses, such as header fields.
162  */
163 #define AU_IPv4         4
164 #define AU_IPv6         16
165
166 __BEGIN_DECLS
167
168 typedef uid_t           au_id_t;
169 typedef pid_t           au_asid_t;
170 typedef u_int16_t       au_event_t;
171 typedef u_int16_t       au_emod_t;
172 typedef u_int32_t       au_class_t;
173 typedef u_int64_t       au_asflgs_t __attribute__ ((aligned (8)));
174
175 struct au_tid {
176         dev_t           port;
177         u_int32_t       machine;
178 };
179 typedef struct au_tid   au_tid_t;
180
181 struct au_tid_addr {
182         dev_t           at_port;
183         u_int32_t       at_type;
184         u_int32_t       at_addr[4];
185 };
186 typedef struct au_tid_addr      au_tid_addr_t;
187
188 struct au_mask {
189         unsigned int    am_success;     /* Success bits. */
190         unsigned int    am_failure;     /* Failure bits. */
191 };
192 typedef struct au_mask  au_mask_t;
193
194 struct auditinfo {
195         au_id_t         ai_auid;        /* Audit user ID. */
196         au_mask_t       ai_mask;        /* Audit masks. */
197         au_tid_t        ai_termid;      /* Terminal ID. */
198         au_asid_t       ai_asid;        /* Audit session ID. */
199 };
200 typedef struct auditinfo        auditinfo_t;
201
202 struct auditinfo_addr {
203         au_id_t         ai_auid;        /* Audit user ID. */
204         au_mask_t       ai_mask;        /* Audit masks. */
205         au_tid_addr_t   ai_termid;      /* Terminal ID. */
206         au_asid_t       ai_asid;        /* Audit session ID. */
207         au_asflgs_t     ai_flags;       /* Audit session flags. */
208 };
209 typedef struct auditinfo_addr   auditinfo_addr_t;
210
211 struct auditpinfo {
212         pid_t           ap_pid;         /* ID of target process. */
213         au_id_t         ap_auid;        /* Audit user ID. */
214         au_mask_t       ap_mask;        /* Audit masks. */
215         au_tid_t        ap_termid;      /* Terminal ID. */
216         au_asid_t       ap_asid;        /* Audit session ID. */
217 };
218 typedef struct auditpinfo       auditpinfo_t;
219
220 struct auditpinfo_addr {
221         pid_t           ap_pid;         /* ID of target process. */
222         au_id_t         ap_auid;        /* Audit user ID. */
223         au_mask_t       ap_mask;        /* Audit masks. */
224         au_tid_addr_t   ap_termid;      /* Terminal ID. */
225         au_asid_t       ap_asid;        /* Audit session ID. */
226         au_asflgs_t     ap_flags;       /* Audit session flags. */
227 };
228 typedef struct auditpinfo_addr  auditpinfo_addr_t;
229
230 struct au_session {
231         auditinfo_addr_t        *as_aia_p;      /* Ptr to full audit info. */
232         au_mask_t                as_mask;       /* Process Audit Masks. */
233 };
234 typedef struct au_session       au_session_t;
235
236 /*
237  * Contents of token_t are opaque outside of libbsm.
238  */
239 typedef struct au_token token_t;
240
241 /*
242  * Kernel audit queue control parameters:
243  *                      Default:                Maximum:
244  *      aq_hiwater:     AQ_HIWATER (100)        AQ_MAXHIGH (10000) 
245  *      aq_lowater:     AQ_LOWATER (10)         <aq_hiwater
246  *      aq_bufsz:       AQ_BUFSZ (32767)        AQ_MAXBUFSZ (1048576)
247  *      aq_delay:       20                      20000 (not used) 
248  */
249 struct au_qctrl {
250         int     aq_hiwater;     /* Max # of audit recs in queue when */
251                                 /* threads with new ARs get blocked. */ 
252
253         int     aq_lowater;     /* # of audit recs in queue when */
254                                 /* blocked threads get unblocked. */
255
256         int     aq_bufsz;       /* Max size of audit record for audit(2). */
257         int     aq_delay;       /* Queue delay (not used). */
258         int     aq_minfree;     /* Minimum filesystem percent free space. */
259 };
260 typedef struct au_qctrl au_qctrl_t;
261
262 /*
263  * Structure for the audit statistics.
264  */
265 struct audit_stat {
266         unsigned int    as_version;
267         unsigned int    as_numevent;
268         int             as_generated;
269         int             as_nonattrib;
270         int             as_kernel;
271         int             as_audit;
272         int             as_auditctl;
273         int             as_enqueue;
274         int             as_written;
275         int             as_wblocked;
276         int             as_rblocked;
277         int             as_dropped;
278         int             as_totalsize;
279         unsigned int    as_memused;
280 };
281 typedef struct audit_stat       au_stat_t;
282
283 /*
284  * Structure for the audit file statistics.
285  */
286 struct audit_fstat {
287         u_int64_t       af_filesz;
288         u_int64_t       af_currsz;
289 };
290 typedef struct audit_fstat      au_fstat_t;
291
292 /*
293  * Audit to event class mapping.
294  */
295 struct au_evclass_map {
296         au_event_t      ec_number;
297         au_class_t      ec_class;
298 };
299 typedef struct au_evclass_map   au_evclass_map_t;
300
301 /*
302  * Audit system calls.
303  */
304 #if !defined(_KERNEL) && !defined(KERNEL)
305 int     audit(const void *, int);
306 int     auditon(int, void *, int);
307 int     auditctl(const char *);
308 int     getauid(au_id_t *);
309 int     setauid(const au_id_t *);
310 int     getaudit(struct auditinfo *);
311 int     setaudit(const struct auditinfo *);
312 int     getaudit_addr(struct auditinfo_addr *, int);
313 int     setaudit_addr(const struct auditinfo_addr *, int);
314
315 #ifdef __APPLE_API_PRIVATE
316 #include <mach/port.h>
317 mach_port_name_t audit_session_self(void);
318 au_asid_t        audit_session_join(mach_port_name_t port);
319 #endif /* __APPLE_API_PRIVATE */
320
321 #endif /* defined(_KERNEL) || defined(KERNEL) */
322
323 __END_DECLS
324
325 #endif /* !_BSM_AUDIT_H */