2  * Copyright (c) 2005-2009 Apple Inc. 
   5  * Redistribution and use in source and binary forms, with or without 
   6  * modification, are permitted provided that the following conditions 
   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. 
  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. 
  29  * $P4: //depot/projects/trustedbsd/openbsm/sys/bsm/audit.h#10 $ 
  35 #include <sys/param.h> 
  36 #include <sys/types.h> 
  38 #define AUDIT_RECORD_MAGIC      0x828a0f1b 
  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) 
  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. 
  50 #define AUDIT_HARD_LIMIT_FREE_BLOCKS    4 
  53  * Triggers for the audit daemon. 
  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 
  67  * The special device filename (FreeBSD). 
  69 #define AUDITDEV_FILENAME       "audit" 
  70 #define AUDIT_TRIGGER_FILE      ("/dev/" AUDITDEV_FILENAME) 
  73  * Pre-defined audit IDs 
  75 #define AU_DEFAUDITID   (uid_t)(-1) 
  76 #define AU_DEFAUDITSID   0 
  77 #define AU_ASSIGN_ASID  -1 
  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. */ 
  90 #define AUC_AUDITING            1 
  92 #define AUC_DISABLED            -1 
  95  * auditon(2) commands. 
  97 #define A_OLDGETPOLICY  2 
  98 #define A_OLDSETPOLICY  3 
 101 #define A_OLDGETQCTRL   6 
 102 #define A_OLDSETQCTRL   7 
 107 #define A_SETUMASK      14 
 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 
 128 #define A_GETSFLAGS     39 
 129 #define A_SETSFLAGS     40 
 132  * Audit policy controls. 
 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 
 150  * Default audit queue control parameters. 
 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 
 159  * Default minimum percentage free space on file system. 
 161 #define AU_FS_MINFREE   20 
 164  * Type definitions used indicating the length of variable length addresses 
 165  * in tokens containing addresses, such as header fields. 
 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))); 
 183 typedef struct au_tid   au_tid_t
; 
 188         u_int32_t       at_addr
[4]; 
 190 typedef struct au_tid_addr      au_tid_addr_t
; 
 193         unsigned int    am_success
;     /* Success bits. */ 
 194         unsigned int    am_failure
;     /* Failure bits. */ 
 196 typedef struct au_mask  au_mask_t
; 
 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. */ 
 204 typedef struct auditinfo        auditinfo_t
; 
 206 struct auditinfo_addr 
{ 
 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. */ 
 213 typedef struct auditinfo_addr   auditinfo_addr_t
; 
 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. */ 
 222 typedef struct auditpinfo       auditpinfo_t
; 
 224 struct auditpinfo_addr 
{ 
 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. */ 
 232 typedef struct auditpinfo_addr  auditpinfo_addr_t
; 
 235         auditinfo_addr_t        
*as_aia_p
;      /* Ptr to full audit info. */ 
 236         au_mask_t                as_mask
;       /* Process Audit Masks. */ 
 238 typedef struct au_session       au_session_t
; 
 241  * Contents of token_t are opaque outside of libbsm. 
 243 typedef struct au_token token_t
; 
 246  * Kernel audit queue control parameters: 
 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)  
 254         int     aq_hiwater
;     /* Max # of audit recs in queue when */ 
 255                                 /* threads with new ARs get blocked. */  
 257         int     aq_lowater
;     /* # of audit recs in queue when */ 
 258                                 /* blocked threads get unblocked. */ 
 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. */ 
 264 typedef struct au_qctrl au_qctrl_t
; 
 267  * Structure for the audit statistics. 
 270         unsigned int    as_version
; 
 271         unsigned int    as_numevent
; 
 283         unsigned int    as_memused
; 
 285 typedef struct audit_stat       au_stat_t
; 
 288  * Structure for the audit file statistics. 
 294 typedef struct audit_fstat      au_fstat_t
; 
 297  * Audit to event class mapping. 
 299 struct au_evclass_map 
{ 
 300         au_event_t      ec_number
; 
 303 typedef struct au_evclass_map   au_evclass_map_t
; 
 306  * Audit system calls. 
 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_addr(struct auditinfo_addr 
*, int); 
 315 int     setaudit_addr(const struct auditinfo_addr 
*, int); 
 317 #if defined(__APPLE__) 
 318 #include <Availability.h> 
 321  * getaudit()/setaudit() are deprecated and have been replaced with 
 322  * wrappers to the getaudit_addr()/setaudit_addr() syscalls above. 
 325 int     getaudit(struct auditinfo 
*) 
 326                 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0
, __MAC_10_8
, 
 327                     __IPHONE_2_0
, __IPHONE_6_0
); 
 328 int     setaudit(const struct auditinfo 
*) 
 329                 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0
, __MAC_10_8
, 
 330                     __IPHONE_2_0
, __IPHONE_6_0
); 
 333 int     getaudit(struct auditinfo 
*); 
 334 int     setaudit(const struct auditinfo 
*); 
 335 #endif /* !__APPLE__ */ 
 337 #ifdef __APPLE_API_PRIVATE 
 338 #include <mach/port.h> 
 339 mach_port_name_t 
audit_session_self(void); 
 340 au_asid_t        
audit_session_join(mach_port_name_t port
); 
 341 int              audit_session_port(au_asid_t asid
, mach_port_name_t 
*portname
); 
 342 #endif /* __APPLE_API_PRIVATE */ 
 344 #endif /* defined(_KERNEL) || defined(KERNEL) */ 
 348 #endif /* !_BSM_AUDIT_H */