1 0 stevel /* 2 0 stevel * CDDL HEADER START 3 0 stevel * 4 0 stevel * The contents of this file are subject to the terms of the 5 2694 gww * Common Development and Distribution License (the "License"). 6 2694 gww * You may not use this file except in compliance with the License. 7 0 stevel * 8 0 stevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 0 stevel * or http://www.opensolaris.org/os/licensing. 10 0 stevel * See the License for the specific language governing permissions 11 0 stevel * and limitations under the License. 12 0 stevel * 13 0 stevel * When distributing Covered Code, include this CDDL HEADER in each 14 0 stevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 0 stevel * If applicable, add the following below this CDDL HEADER, with the 16 0 stevel * fields enclosed by brackets "[]" replaced with your own identifying 17 0 stevel * information: Portions Copyright [yyyy] [name of copyright owner] 18 0 stevel * 19 0 stevel * CDDL HEADER END 20 0 stevel */ 21 0 stevel /* 22 9083 Jan * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 0 stevel * Use is subject to license terms. 24 0 stevel */ 25 0 stevel 26 0 stevel #ifndef _BSM_LIBBSM_H 27 0 stevel #define _BSM_LIBBSM_H 28 0 stevel 29 0 stevel 30 0 stevel #include <secdb.h> 31 0 stevel #include <stdio.h> 32 0 stevel #include <errno.h> 33 0 stevel #include <sys/types.h> 34 0 stevel #include <bsm/audit.h> 35 0 stevel #include <bsm/audit_record.h> 36 0 stevel 37 0 stevel #ifdef __cplusplus 38 0 stevel extern "C" { 39 0 stevel #endif 40 0 stevel 41 0 stevel #ifndef TEXT_DOMAIN 42 0 stevel #define TEXT_DOMAIN "SUNW_OST_OSLIB" 43 0 stevel #endif 44 0 stevel 45 0 stevel extern const char *bsm_dom; 46 0 stevel 47 0 stevel /* 48 0 stevel * For audit_event(5) 49 0 stevel */ 50 0 stevel struct au_event_ent { 51 0 stevel au_event_t ae_number; 52 0 stevel char *ae_name; 53 0 stevel char *ae_desc; 54 0 stevel au_class_t ae_class; 55 0 stevel }; 56 0 stevel typedef struct au_event_ent au_event_ent_t; 57 0 stevel 58 0 stevel /* 59 0 stevel * For audit_class(5) 60 0 stevel */ 61 0 stevel struct au_class_ent { 62 0 stevel char *ac_name; 63 0 stevel au_class_t ac_class; 64 0 stevel char *ac_desc; 65 0 stevel }; 66 0 stevel typedef struct au_class_ent au_class_ent_t; 67 0 stevel 68 0 stevel /* 69 0 stevel * For audit_user(5) 70 0 stevel */ 71 0 stevel struct au_user_ent { 72 0 stevel char *au_name; 73 0 stevel au_mask_t au_always; 74 0 stevel au_mask_t au_never; 75 0 stevel }; 76 0 stevel typedef struct au_user_ent au_user_ent_t; 77 0 stevel 78 0 stevel /* 79 0 stevel * Internal representation of audit user in libnsl 80 0 stevel */ 81 0 stevel typedef struct au_user_str_s { 82 0 stevel char *au_name; 83 0 stevel char *au_always; 84 0 stevel char *au_never; 85 0 stevel } au_user_str_t; 86 0 stevel 87 0 stevel /* 88 0 stevel * opaque context value for getacval.c 89 0 stevel */ 90 0 stevel typedef struct au_acinfo au_acinfo_t; 91 0 stevel 92 0 stevel /* 93 0 stevel * adrf's version of adr_t 94 0 stevel */ 95 0 stevel typedef struct adrf_s { 96 0 stevel adr_t *adrf_adr; 97 0 stevel FILE *adrf_fp; 98 0 stevel } adrf_t; 99 0 stevel 100 0 stevel /* 101 0 stevel * Functions that manipulate bytes from an audit file 102 0 stevel */ 103 0 stevel 104 0 stevel extern void adr_char(adr_t *, char *, int); 105 0 stevel extern int adr_count(adr_t *); 106 0 stevel extern void adr_int32(adr_t *, int32_t *, int); 107 5012 gww extern void adr_uid(adr_t *, uid_t *, int); 108 0 stevel extern void adr_int64(adr_t *, int64_t *, int); 109 0 stevel extern void adr_short(adr_t *, short *, int); 110 7753 Ton extern void adr_ushort(adr_t *, ushort_t *, int); 111 0 stevel extern void adr_start(adr_t *, char *); 112 0 stevel 113 0 stevel extern int adrf_char(adrf_t *, char *, int); 114 0 stevel extern int adrf_int32(adrf_t *, int32_t *, int); 115 0 stevel extern int adrf_int64(adrf_t *, int64_t *, int); 116 0 stevel extern int adrf_short(adrf_t *, short *, int); 117 0 stevel extern void adrf_start(adrf_t *, adr_t *, FILE *); 118 0 stevel extern int adrf_u_char(adrf_t *, uchar_t *, int); 119 0 stevel extern int adrf_u_int32(adrf_t *, uint32_t *, int); 120 0 stevel extern int adrf_u_int64(adrf_t *, uint64_t *, int); 121 0 stevel extern int adrf_u_short(adrf_t *, ushort_t *, int); 122 0 stevel 123 0 stevel /* 124 0 stevel * Functions that manipulate bytes from an audit character stream. 125 0 stevel */ 126 0 stevel 127 0 stevel extern void adrm_start(adr_t *, char *); 128 0 stevel extern void adrm_char(adr_t *, char *, int); 129 0 stevel extern void adrm_short(adr_t *, short *, int); 130 0 stevel extern void adrm_int64(adr_t *, int64_t *, int); 131 0 stevel extern void adrm_int32(adr_t *, int32_t *, int); 132 5344 tz204579 extern void adrm_uid(adr_t *, uid_t *, int); 133 0 stevel extern void adrm_u_int32(adr_t *, uint32_t *, int); 134 0 stevel extern void adrm_u_char(adr_t *, uchar_t *, int); 135 0 stevel extern void adrm_u_int64(adr_t *, uint64_t *, int); 136 0 stevel extern void adrm_u_short(adr_t *, ushort_t *, int); 137 0 stevel extern void adrm_putint32(adr_t *, int32_t *, int); 138 0 stevel 139 0 stevel /* 140 0 stevel * Functions that do I/O for audit files 141 0 stevel */ 142 0 stevel 143 7753 Ton extern int au_close(int, int, au_event_t); 144 0 stevel extern int au_open(void); 145 0 stevel extern int au_write(int, token_t *); 146 0 stevel 147 0 stevel /* 148 0 stevel * Functions than manipulate audit events 149 0 stevel */ 150 0 stevel 151 0 stevel extern void setauevent(void); 152 0 stevel extern void endauevent(void); 153 0 stevel 154 0 stevel extern au_event_ent_t *getauevent(void); 155 0 stevel extern au_event_ent_t *getauevent_r(au_event_ent_t *); 156 0 stevel extern au_event_ent_t *getauevnam(char *); 157 0 stevel extern au_event_ent_t *getauevnam_r(au_event_ent_t *, char *); 158 0 stevel extern au_event_ent_t *getauevnum(au_event_t); 159 0 stevel extern au_event_ent_t *getauevnum_r(au_event_ent_t *, au_event_t); 160 0 stevel extern au_event_t getauevnonam(char *); 161 0 stevel extern int au_preselect(au_event_t, au_mask_t *, int, int); 162 0 stevel extern int cacheauevent(au_event_ent_t **, au_event_t); 163 0 stevel 164 0 stevel /* 165 0 stevel * Functions that manipulate audit classes 166 0 stevel */ 167 0 stevel 168 0 stevel extern void setauclass(void); 169 0 stevel extern void endauclass(void); 170 0 stevel 171 0 stevel extern int cacheauclass(au_class_ent_t **, au_class_t); 172 0 stevel extern int cacheauclassnam(au_class_ent_t **, char *); 173 0 stevel extern au_class_ent_t *getauclassent(void); 174 0 stevel extern au_class_ent_t *getauclassent_r(au_class_ent_t *); 175 0 stevel extern au_class_ent_t *getauclassnam(char *); 176 0 stevel extern au_class_ent_t *getauclassnam_r(au_class_ent_t *, char *); 177 0 stevel 178 0 stevel /* 179 0 stevel * Functions that manipulate audit attributes of users 180 0 stevel */ 181 0 stevel 182 0 stevel void setauuser(void); 183 0 stevel void endauuser(void); 184 0 stevel 185 0 stevel au_user_ent_t *getauuserent(void); 186 0 stevel au_user_ent_t *getauuserent_r(au_user_ent_t *); 187 0 stevel au_user_ent_t *getauusernam(char *); 188 0 stevel au_user_ent_t *getauusernam_r(au_user_ent_t *, char *); 189 0 stevel 190 0 stevel /* 191 0 stevel * Functions that manipulate the audit control file 192 0 stevel */ 193 0 stevel 194 0 stevel void endac(void); 195 0 stevel void setac(void); 196 0 stevel 197 0 stevel int getacdir(char *, int); 198 0 stevel int getacmin(int *); 199 0 stevel int getacna(char *, int); 200 0 stevel int getacflg(char *, int); 201 0 stevel 202 0 stevel /* 203 0 stevel * Functions that manipulate the audit control file 204 0 stevel */ 205 0 stevel 206 0 stevel 207 0 stevel au_acinfo_t *_openac(char *); 208 0 stevel void _endac(au_acinfo_t *); 209 0 stevel void _rewindac(au_acinfo_t *); 210 0 stevel 211 0 stevel int _getacdir(au_acinfo_t *, char *, int); 212 0 stevel int _getaclib(au_acinfo_t *, kva_t **); 213 0 stevel int _getacmin(au_acinfo_t *, int *); 214 0 stevel int _getacna(au_acinfo_t *, char *, int); 215 0 stevel int _getacflg(au_acinfo_t *, char *, int); 216 0 stevel int _getacplug(au_acinfo_t *, kva_t **); 217 0 stevel 218 0 stevel /* 219 0 stevel * Functions that manipulate audit masks 220 0 stevel */ 221 0 stevel 222 0 stevel extern int au_user_mask(char *, au_mask_t *); 223 0 stevel extern int getauditflagsbin(char *, au_mask_t *); 224 0 stevel extern int getauditflagschar(char *, au_mask_t *, int); 225 0 stevel extern int getfauditflags(au_mask_t *, au_mask_t *, au_mask_t *); 226 0 stevel 227 0 stevel /* 228 0 stevel * Functions that do system calls 229 0 stevel */ 230 0 stevel 231 0 stevel extern int audit(char *, int); 232 0 stevel extern int auditon(int, caddr_t, int); 233 0 stevel extern int auditdoor(int); 234 0 stevel extern int getaudit(auditinfo_t *); 235 0 stevel extern int getaudit_addr(auditinfo_addr_t *, int); 236 0 stevel extern int getauid(au_id_t *); 237 0 stevel extern int setaudit(auditinfo_t *); 238 0 stevel extern int setaudit_addr(auditinfo_addr_t *, int); 239 0 stevel extern int setauid(au_id_t *); 240 0 stevel 241 0 stevel #define BSM_TEXTBUFSZ 256 /* size of string for generic text token */ 242 0 stevel 243 0 stevel /* 244 0 stevel * Defines for au_preselect(3) 245 0 stevel */ 246 0 stevel #define AU_PRS_SUCCESS 1 247 0 stevel #define AU_PRS_FAILURE 2 248 0 stevel #define AU_PRS_BOTH (AU_PRS_SUCCESS|AU_PRS_FAILURE) 249 0 stevel 250 0 stevel #define AU_PRS_USECACHE 0 251 0 stevel #define AU_PRS_REREAD 1 252 0 stevel 253 0 stevel /* 254 0 stevel * Defines for cacheauclass and cacheauevent 255 0 stevel */ 256 0 stevel #define AU_CACHE_FREE 0x0000 257 0 stevel #define AU_CACHE_NAME 0x0001 258 0 stevel #define AU_CACHE_NUMBER 0x0002 259 0 stevel 260 0 stevel /* Flags for user-level audit routines: au_open, au_close, au_to_ */ 261 0 stevel #define AU_TO_NO_WRITE 0 262 0 stevel #define AU_TO_WRITE 1 263 0 stevel 264 0 stevel /* system audit files for auditd */ 265 0 stevel #define AUDITCLASSFILE "/etc/security/audit_class" 266 0 stevel #define AUDITCONTROLFILE "/etc/security/audit_control" 267 0 stevel #define AUDITDATAFILE "/etc/security/audit_data" 268 0 stevel #define AUDITEVENTFILE "/etc/security/audit_event" 269 0 stevel #define AUDITUSERFILE "/etc/security/audit_user" 270 0 stevel 271 0 stevel /* array sizes for audit library structures */ 272 0 stevel #define AU_CLASS_NAME_MAX 8 273 0 stevel #define AU_CLASS_DESC_MAX 72 274 0 stevel #define AU_EVENT_NAME_MAX 30 275 0 stevel #define AU_EVENT_DESC_MAX 50 276 0 stevel #define AU_EVENT_LINE_MAX 256 277 0 stevel 278 0 stevel /* 279 0 stevel * Some macros used internally by the nsswitch code 280 0 stevel */ 281 0 stevel #define AUDITUSER_FILENAME "/etc/security/audit_user" 282 0 stevel #define AUDITUSER_DB_NAME "audit_user.org_dir" 283 0 stevel #define AUDITUSER_DB_NCOL 3 /* total columns */ 284 0 stevel #define AUDITUSER_DB_NKEYCOL 1 /* total searchable columns */ 285 0 stevel #define AUDITUSER_DB_TBLT "audit_user_tbl" 286 0 stevel #define AUDITUSER_SUCCESS 0 287 0 stevel #define AUDITUSER_PARSE_ERANGE 1 288 0 stevel #define AUDITUSER_NOT_FOUND 2 289 0 stevel 290 0 stevel #define AUDITUSER_COL0_KW "name" 291 0 stevel #define AUDITUSER_COL1_KW "always" 292 0 stevel #define AUDITUSER_COL2_KW "never" 293 0 stevel 294 0 stevel /* 295 0 stevel * indices of searchable columns 296 0 stevel */ 297 0 stevel #define AUDITUSER_KEYCOL0 0 /* name */ 298 0 stevel 299 0 stevel 300 0 stevel #ifdef __cplusplus 301 0 stevel } 302 0 stevel #endif 303 0 stevel 304 0 stevel #endif /* _BSM_LIBBSM_H */ 305