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