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 1676 jpk * Common Development and Distribution License (the "License"). 6 1676 jpk * 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 9487 Marek * 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_AUDIT_RECORD_H 27 0 stevel #define _BSM_AUDIT_RECORD_H 28 0 stevel 29 0 stevel 30 0 stevel #ifdef _KERNEL 31 0 stevel #include <sys/priv.h> 32 0 stevel #else 33 0 stevel #include <priv.h> 34 0 stevel #endif 35 0 stevel #include <sys/socket.h> 36 0 stevel #include <sys/acl.h> 37 0 stevel 38 0 stevel #include <sys/tsol/label.h> 39 0 stevel 40 0 stevel #ifdef __cplusplus 41 0 stevel extern "C" { 42 0 stevel #endif 43 0 stevel 44 0 stevel /* 45 0 stevel * Version of audit attributes 46 0 stevel * 47 0 stevel * OS Release Version Number Comments 48 0 stevel * ========== ============== ======== 49 0 stevel * SunOS 5.1 2 Unbundled Package 50 0 stevel * SunOS 5.3 2 Bundled into the base OS 51 0 stevel * SunOS 5.4-5.x 2 52 0 stevel * Trusted Solaris 2.5 3 To distinguish potential new tokens 53 0 stevel * Trusted Solaris 7-8 4 Redefine X tokens that overlap with 54 0 stevel * SunOS 5.7 55 0 stevel */ 56 0 stevel 57 0 stevel #define TOKEN_VERSION 2 58 0 stevel 59 0 stevel /* 60 0 stevel * Audit record token type codes 61 0 stevel */ 62 0 stevel 63 0 stevel /* 64 0 stevel * Control token types 65 0 stevel */ 66 0 stevel 67 0 stevel #define AUT_INVALID ((char)0x00) 68 0 stevel #define AUT_OTHER_FILE ((char)0x11) 69 0 stevel #define AUT_OTHER_FILE32 AUT_OTHER_FILE 70 0 stevel #define AUT_OHEADER ((char)0x12) 71 0 stevel #define AUT_TRAILER ((char)0x13) 72 0 stevel #define AUT_HEADER ((char)0x14) 73 0 stevel #define AUT_HEADER32 AUT_HEADER 74 0 stevel #define AUT_HEADER32_EX ((char)0x15) 75 0 stevel #define AUT_TRAILER_MAGIC ((short)0xB105) 76 0 stevel 77 0 stevel /* 78 0 stevel * Data token types 79 0 stevel */ 80 0 stevel 81 1780 gww #define AUT_FMRI ((char)0x20) 82 0 stevel #define AUT_DATA ((char)0x21) 83 0 stevel #define AUT_IPC ((char)0x22) 84 0 stevel #define AUT_PATH ((char)0x23) 85 0 stevel #define AUT_SUBJECT ((char)0x24) 86 0 stevel #define AUT_SUBJECT32 AUT_SUBJECT 87 0 stevel #define AUT_XATPATH ((char)0x25) 88 0 stevel #define AUT_PROCESS ((char)0x26) 89 0 stevel #define AUT_PROCESS32 AUT_PROCESS 90 0 stevel #define AUT_RETURN ((char)0x27) 91 0 stevel #define AUT_RETURN32 AUT_RETURN 92 0 stevel #define AUT_TEXT ((char)0x28) 93 0 stevel #define AUT_OPAQUE ((char)0x29) 94 0 stevel #define AUT_IN_ADDR ((char)0x2A) 95 0 stevel #define AUT_IP ((char)0x2B) 96 0 stevel #define AUT_IPORT ((char)0x2C) 97 0 stevel #define AUT_ARG ((char)0x2D) 98 0 stevel #define AUT_ARG32 AUT_ARG 99 0 stevel #define AUT_SOCKET ((char)0x2E) 100 0 stevel #define AUT_SEQ ((char)0x2F) 101 0 stevel #define AUT_TID ((char)0x61) 102 0 stevel 103 0 stevel /* 104 0 stevel * Modifier token types 105 0 stevel */ 106 0 stevel 107 0 stevel #define AUT_ACL ((char)0x30) 108 0 stevel #define AUT_ATTR ((char)0x31) 109 0 stevel #define AUT_IPC_PERM ((char)0x32) 110 0 stevel #define AUT_LABEL ((char)0x33) 111 0 stevel #define AUT_GROUPS ((char)0x34) 112 5344 tz204579 #define AUT_ACE ((char)0x35) 113 2425 gww /* 114 5344 tz204579 * 0x36, 0x37 unused 115 2425 gww */ 116 0 stevel #define AUT_PRIV ((char)0x38) 117 0 stevel #define AUT_UPRIV ((char)0x39) 118 0 stevel #define AUT_LIAISON ((char)0x3A) 119 0 stevel #define AUT_NEWGROUPS ((char)0x3B) 120 0 stevel #define AUT_EXEC_ARGS ((char)0x3C) 121 0 stevel #define AUT_EXEC_ENV ((char)0x3D) 122 0 stevel #define AUT_ATTR32 ((char)0x3E) 123 0 stevel #define AUT_UAUTH ((char)0x3F) 124 0 stevel #define AUT_ZONENAME ((char)0x60) 125 0 stevel 126 0 stevel /* 127 0 stevel * X windows token types 128 0 stevel */ 129 0 stevel 130 0 stevel #define AUT_XATOM ((char)0x40) 131 0 stevel #define AUT_XOBJ ((char)0x41) 132 0 stevel #define AUT_XPROTO ((char)0x42) 133 0 stevel #define AUT_XSELECT ((char)0x43) 134 0 stevel 135 0 stevel #if TOKEN_VERSION != 3 136 0 stevel #define AUT_XCOLORMAP ((char)0x44) 137 0 stevel #define AUT_XCURSOR ((char)0x45) 138 0 stevel #define AUT_XFONT ((char)0x46) 139 0 stevel #define AUT_XGC ((char)0x47) 140 0 stevel #define AUT_XPIXMAP ((char)0x48) 141 0 stevel #define AUT_XPROPERTY ((char)0x49) 142 0 stevel #define AUT_XWINDOW ((char)0x4A) 143 0 stevel #define AUT_XCLIENT ((char)0x4B) 144 0 stevel #else /* TOKEN_VERSION == 3 */ 145 0 stevel #define AUT_XCOLORMAP ((char)0x74) 146 0 stevel #define AUT_XCURSOR ((char)0x75) 147 0 stevel #define AUT_XFONT ((char)0x76) 148 0 stevel #define AUT_XGC ((char)0x77) 149 0 stevel #define AUT_XPIXMAP ((char)0x78) 150 0 stevel #define AUT_XPROPERTY ((char)0x79) 151 0 stevel #define AUT_XWINDOW ((char)0x7A) 152 0 stevel #define AUT_XCLIENT ((char)0x7B) 153 0 stevel #endif /* TOKEN_VERSION != 3 */ 154 0 stevel 155 0 stevel /* 156 0 stevel * Command token types 157 0 stevel */ 158 0 stevel 159 0 stevel #define AUT_CMD ((char)0x51) 160 0 stevel #define AUT_EXIT ((char)0x52) 161 0 stevel 162 0 stevel /* 163 0 stevel * Miscellaneous token types 164 0 stevel */ 165 0 stevel 166 0 stevel #define AUT_HOST ((char)0x70) 167 0 stevel 168 0 stevel /* 169 0 stevel * Solaris64 token types 170 0 stevel */ 171 0 stevel 172 0 stevel #define AUT_ARG64 ((char)0x71) 173 0 stevel #define AUT_RETURN64 ((char)0x72) 174 0 stevel #define AUT_ATTR64 ((char)0x73) 175 0 stevel #define AUT_HEADER64 ((char)0x74) 176 0 stevel #define AUT_SUBJECT64 ((char)0x75) 177 0 stevel #define AUT_PROCESS64 ((char)0x77) 178 0 stevel #define AUT_OTHER_FILE64 ((char)0x78) 179 0 stevel 180 0 stevel /* 181 0 stevel * Extended network address token types 182 0 stevel */ 183 0 stevel 184 0 stevel #define AUT_HEADER64_EX ((char)0x79) 185 0 stevel #define AUT_SUBJECT32_EX ((char)0x7a) 186 0 stevel #define AUT_PROCESS32_EX ((char)0x7b) 187 0 stevel #define AUT_SUBJECT64_EX ((char)0x7c) 188 0 stevel #define AUT_PROCESS64_EX ((char)0x7d) 189 0 stevel #define AUT_IN_ADDR_EX ((char)0x7e) 190 0 stevel #define AUT_SOCKET_EX ((char)0x7f) 191 0 stevel 192 0 stevel 193 0 stevel /* 194 0 stevel * Audit print suggestion types. 195 0 stevel */ 196 0 stevel 197 0 stevel #define AUP_BINARY ((char)0) 198 0 stevel #define AUP_OCTAL ((char)1) 199 0 stevel #define AUP_DECIMAL ((char)2) 200 0 stevel #define AUP_HEX ((char)3) 201 0 stevel #define AUP_STRING ((char)4) 202 0 stevel 203 0 stevel /* 204 0 stevel * Audit data member types. 205 0 stevel */ 206 0 stevel 207 0 stevel #define AUR_BYTE ((char)0) 208 0 stevel #define AUR_CHAR ((char)0) 209 0 stevel #define AUR_SHORT ((char)1) 210 0 stevel #define AUR_INT ((char)2) 211 0 stevel #define AUR_INT32 ((char)2) 212 0 stevel #define AUR_INT64 ((char)3) 213 0 stevel 214 0 stevel /* 215 0 stevel * Adr structures 216 0 stevel */ 217 0 stevel 218 0 stevel struct adr_s { 219 0 stevel char *adr_stream; /* The base of the stream */ 220 0 stevel char *adr_now; /* The location within the stream */ 221 0 stevel }; 222 0 stevel 223 0 stevel typedef struct adr_s adr_t; 224 0 stevel 225 0 stevel 226 0 stevel #ifdef _KERNEL 227 0 stevel 228 0 stevel #include <sys/param.h> 229 0 stevel #include <sys/systm.h> /* for rval */ 230 0 stevel #include <sys/time.h> 231 0 stevel #include <sys/types.h> 232 0 stevel #include <sys/vnode.h> 233 0 stevel #include <sys/mode.h> 234 0 stevel #include <sys/user.h> 235 0 stevel #include <sys/session.h> 236 0 stevel #include <sys/ipc_impl.h> 237 0 stevel #include <netinet/in_systm.h> 238 0 stevel #include <netinet/in.h> 239 0 stevel #include <netinet/ip.h> 240 0 stevel #include <sys/socket.h> 241 0 stevel #include <net/route.h> 242 0 stevel #include <netinet/in_pcb.h> 243 0 stevel 244 0 stevel /* 245 0 stevel * au_close flag arguments 246 0 stevel */ 247 0 stevel 248 0 stevel #define AU_OK 0x1 /* Good audit record */ 249 0 stevel #define AU_DONTBLOCK 0x2 /* Don't block or discard if queue full */ 250 0 stevel #define AU_DEFER 0x4 /* Defer record queueing to syscall end */ 251 0 stevel 252 0 stevel /* 253 0 stevel * Audit token type is really an au_membuf pointer 254 0 stevel */ 255 0 stevel typedef au_buff_t token_t; 256 0 stevel /* 257 0 stevel * token generation functions 258 0 stevel */ 259 0 stevel token_t *au_append_token(token_t *, token_t *); 260 0 stevel token_t *au_set(caddr_t, uint_t); 261 0 stevel 262 0 stevel void au_free_rec(au_buff_t *); 263 0 stevel 264 0 stevel #define au_getclr() ((token_t *)au_get_buff()) 265 0 stevel #define au_toss_token(tok) (au_free_rec((au_buff_t *)(tok))) 266 0 stevel 267 0 stevel token_t *au_to_acl(); 268 5344 tz204579 token_t *au_to_ace(); 269 0 stevel token_t *au_to_attr(struct vattr *); 270 0 stevel token_t *au_to_data(char, char, char, char *); 271 0 stevel token_t *au_to_header(int, au_event_t, au_emod_t); 272 0 stevel token_t *au_to_header_ex(int, au_event_t, au_emod_t); 273 0 stevel token_t *au_to_ipc(char, int); 274 0 stevel token_t *au_to_ipc_perm(kipc_perm_t *); 275 0 stevel token_t *au_to_iport(ushort_t); 276 0 stevel token_t *au_to_in_addr(struct in_addr *); 277 0 stevel token_t *au_to_in_addr_ex(int32_t *); 278 0 stevel token_t *au_to_ip(struct ip *); 279 0 stevel token_t *au_to_groups(const gid_t *, uint_t); 280 0 stevel token_t *au_to_path(struct audit_path *); 281 0 stevel token_t *au_to_seq(); 282 0 stevel token_t *au_to_process(uid_t, gid_t, uid_t, gid_t, pid_t, 283 0 stevel au_id_t, au_asid_t, const au_tid_addr_t *); 284 0 stevel token_t *au_to_subject(uid_t, gid_t, uid_t, gid_t, pid_t, 285 0 stevel au_id_t, au_asid_t, const au_tid_addr_t *); 286 0 stevel token_t *au_to_return32(int, int32_t); 287 0 stevel token_t *au_to_return64(int, int64_t); 288 0 stevel token_t *au_to_text(const char *); 289 0 stevel /* token_t *au_to_tid(au_generic_tid_t *); no kernel implementation */ 290 0 stevel token_t *au_to_trailer(int); 291 0 stevel token_t *au_to_uauth(char *); 292 4165 tz204579 size_t au_zonename_length(zone_t *); 293 4165 tz204579 token_t *au_to_zonename(size_t, zone_t *); 294 0 stevel token_t *au_to_arg32(char, char *, uint32_t); 295 0 stevel token_t *au_to_arg64(char, char *, uint64_t); 296 0 stevel token_t *au_to_socket_ex(short, short, char *, char *); 297 0 stevel token_t *au_to_sock_inet(struct sockaddr_in *); 298 0 stevel token_t *au_to_exec_args(const char *, ssize_t); 299 0 stevel token_t *au_to_exec_env(const char *, ssize_t); 300 1676 jpk token_t *au_to_label(bslabel_t *); 301 0 stevel token_t *au_to_privset(const char *, const priv_set_t *, char, int); 302 0 stevel 303 0 stevel void au_uwrite(); 304 0 stevel void au_close(au_kcontext_t *, caddr_t *, int, au_event_t, au_emod_t); 305 0 stevel void au_close_defer(token_t *, int, au_event_t, au_emod_t); 306 0 stevel void au_close_time(au_kcontext_t *, token_t *, int, au_event_t, au_emod_t, 307 0 stevel timestruc_t *); 308 0 stevel void au_free_rec(au_buff_t *); 309 0 stevel void au_write(caddr_t *, token_t *); 310 0 stevel void au_mem_init(void); 311 0 stevel void au_zone_setup(); 312 0 stevel void au_enqueue(au_kcontext_t *, au_buff_t *, adr_t *, adr_t *, int, int); 313 0 stevel int au_doorio(au_kcontext_t *); 314 0 stevel int au_doormsg(au_kcontext_t *, uint32_t, void *); 315 0 stevel int au_token_size(token_t *); 316 0 stevel int au_append_rec(au_buff_t *, au_buff_t *, int); 317 0 stevel int au_append_buf(const char *, int, au_buff_t *); 318 0 stevel 319 0 stevel #else /* !_KERNEL */ 320 0 stevel 321 0 stevel #include <limits.h> 322 0 stevel #include <sys/types.h> 323 0 stevel #include <sys/vnode.h> 324 0 stevel #include <netinet/in_systm.h> 325 0 stevel #include <netinet/in.h> 326 0 stevel #include <netinet/ip.h> 327 0 stevel #include <sys/ipc.h> 328 0 stevel 329 0 stevel struct token_s { 330 0 stevel struct token_s *tt_next; /* Next in the list */ 331 0 stevel short tt_size; /* Size of data */ 332 0 stevel char *tt_data; /* The data */ 333 0 stevel }; 334 0 stevel typedef struct token_s token_t; 335 0 stevel 336 0 stevel /* 337 0 stevel * Old socket structure definition, formerly in <sys/socketvar.h> 338 0 stevel */ 339 0 stevel struct oldsocket { 340 0 stevel short so_type; /* generic type, see socket.h */ 341 0 stevel short so_options; /* from socket call, see socket.h */ 342 0 stevel short so_linger; /* time to linger while closing */ 343 0 stevel short so_state; /* internal state flags SS_*, below */ 344 0 stevel struct inpcb *so_pcb; /* protocol control block */ 345 0 stevel struct protosw *so_proto; /* protocol handle */ 346 0 stevel /* 347 0 stevel * Variables for connection queueing. 348 0 stevel * Socket where accepts occur is so_head in all subsidiary sockets. 349 0 stevel * If so_head is 0, socket is not related to an accept. 350 0 stevel * For head socket so_q0 queues partially completed connections, 351 0 stevel * while so_q is a queue of connections ready to be accepted. 352 0 stevel * If a connection is aborted and it has so_head set, then 353 0 stevel * it has to be pulled out of either so_q0 or so_q. 354 0 stevel * We allow connections to queue up based on current queue lengths 355 0 stevel * and limit on number of queued connections for this socket. 356 0 stevel */ 357 0 stevel struct oldsocket *so_head; /* back pointer to accept socket */ 358 0 stevel struct oldsocket *so_q0; /* queue of partial connections */ 359 0 stevel struct oldsocket *so_q; /* queue of incoming connections */ 360 0 stevel short so_q0len; /* partials on so_q0 */ 361 0 stevel short so_qlen; /* number of connections on so_q */ 362 0 stevel short so_qlimit; /* max number queued connections */ 363 0 stevel short so_timeo; /* connection timeout */ 364 0 stevel ushort_t so_error; /* error affecting connection */ 365 0 stevel short so_pgrp; /* pgrp for signals */ 366 0 stevel ulong_t so_oobmark; /* chars to oob mark */ 367 0 stevel /* 368 0 stevel * Variables for socket buffering. 369 0 stevel */ 370 0 stevel struct sockbuf { 371 0 stevel ulong_t sb_cc; /* actual chars in buffer */ 372 0 stevel ulong_t sb_hiwat; /* max actual char count */ 373 0 stevel ulong_t sb_mbcnt; /* chars of mbufs used */ 374 0 stevel ulong_t sb_mbmax; /* max chars of mbufs to use */ 375 0 stevel ulong_t sb_lowat; /* low water mark (not used yet) */ 376 0 stevel struct mbuf *sb_mb; /* the mbuf chain */ 377 0 stevel struct proc *sb_sel; /* process selecting read/write */ 378 0 stevel short sb_timeo; /* timeout (not used yet) */ 379 0 stevel short sb_flags; /* flags, see below */ 380 0 stevel } so_rcv, so_snd; 381 0 stevel /* 382 0 stevel * Hooks for alternative wakeup strategies. 383 0 stevel * These are used by kernel subsystems wishing to access the socket 384 0 stevel * abstraction. If so_wupfunc is nonnull, it is called in place of 385 0 stevel * wakeup any time that wakeup would otherwise be called with an 386 0 stevel * argument whose value is an address lying within a socket structure. 387 0 stevel */ 388 0 stevel struct wupalt *so_wupalt; 389 0 stevel }; 390 0 stevel extern token_t *au_to_arg32(char, char *, uint32_t); 391 0 stevel extern token_t *au_to_arg64(char, char *, uint64_t); 392 0 stevel extern token_t *au_to_acl(struct acl *); 393 0 stevel extern token_t *au_to_attr(struct vattr *); 394 0 stevel extern token_t *au_to_cmd(uint_t, char **, char **); 395 0 stevel extern token_t *au_to_data(char, char, char, char *); 396 0 stevel extern token_t *au_to_exec_args(char **); 397 0 stevel extern token_t *au_to_exec_env(char **); 398 0 stevel extern token_t *au_to_exit(int, int); 399 1780 gww extern token_t *au_to_fmri(char *); 400 0 stevel extern token_t *au_to_groups(int *); 401 0 stevel extern token_t *au_to_newgroups(int, gid_t *); 402 0 stevel extern token_t *au_to_header(au_event_t, au_emod_t); 403 0 stevel extern token_t *au_to_header_ex(au_event_t, au_emod_t); 404 0 stevel extern token_t *au_to_in_addr(struct in_addr *); 405 5537 gww extern token_t *au_to_in_addr_ex(struct in6_addr *); 406 0 stevel extern token_t *au_to_ipc(char, int); 407 0 stevel extern token_t *au_to_ipc_perm(struct ipc_perm *); 408 0 stevel extern token_t *au_to_iport(ushort_t); 409 0 stevel extern token_t *au_to_me(void); 410 1676 jpk extern token_t *au_to_mylabel(void); 411 0 stevel extern token_t *au_to_opaque(char *, short); 412 0 stevel extern token_t *au_to_path(char *); 413 0 stevel extern token_t *au_to_privset(const char *, const priv_set_t *); 414 0 stevel extern token_t *au_to_process(au_id_t, uid_t, gid_t, uid_t, gid_t, 415 0 stevel pid_t, au_asid_t, au_tid_t *); 416 0 stevel extern token_t *au_to_process_ex(au_id_t, uid_t, gid_t, uid_t, gid_t, 417 0 stevel pid_t, au_asid_t, au_tid_addr_t *); 418 0 stevel extern token_t *au_to_return32(char, uint32_t); 419 0 stevel extern token_t *au_to_return64(char, uint64_t); 420 0 stevel extern token_t *au_to_seq(int); 421 2425 gww extern token_t *au_to_label(m_label_t *); 422 0 stevel extern token_t *au_to_socket(struct oldsocket *); 423 0 stevel extern token_t *au_to_subject(au_id_t, uid_t, gid_t, uid_t, gid_t, 424 0 stevel pid_t, au_asid_t, au_tid_t *); 425 0 stevel extern token_t *au_to_subject_ex(au_id_t, uid_t, gid_t, uid_t, gid_t, 426 0 stevel pid_t, au_asid_t, au_tid_addr_t *); 427 0 stevel extern token_t *au_to_text(char *); 428 0 stevel extern token_t *au_to_tid(au_generic_tid_t *); 429 0 stevel extern token_t *au_to_trailer(void); 430 0 stevel extern token_t *au_to_uauth(char *); 431 5012 gww extern token_t *au_to_upriv(char, char *); 432 5012 gww extern token_t *au_to_xatom(char *); 433 5012 gww extern token_t *au_to_xselect(char *, char *, char *); 434 5012 gww extern token_t *au_to_xcolormap(int32_t, uid_t); 435 5012 gww extern token_t *au_to_xcursor(int32_t, uid_t); 436 5012 gww extern token_t *au_to_xfont(int32_t, uid_t); 437 5012 gww extern token_t *au_to_xgc(int32_t, uid_t); 438 5012 gww extern token_t *au_to_xpixmap(int32_t, uid_t); 439 5012 gww extern token_t *au_to_xwindow(int32_t, uid_t); 440 5012 gww extern token_t *au_to_xproperty(int32_t, uid_t, char *); 441 5012 gww extern token_t *au_to_xclient(uint32_t); 442 0 stevel extern token_t *au_to_zonename(char *); 443 0 stevel #endif /* _KERNEL */ 444 0 stevel 445 0 stevel #ifdef _KERNEL 446 0 stevel 447 0 stevel void adr_char(adr_t *, char *, int); 448 0 stevel void adr_int32(adr_t *, int32_t *, int); 449 0 stevel void adr_uint32(adr_t *, uint32_t *, int); 450 0 stevel void adr_int64(adr_t *, int64_t *, int); 451 0 stevel void adr_uint64(adr_t *, uint64_t *, int); 452 0 stevel void adr_short(adr_t *, short *, int); 453 0 stevel void adr_ushort(adr_t *, ushort_t *, int); 454 0 stevel void adr_start(adr_t *, char *); 455 0 stevel 456 0 stevel char *adr_getchar(adr_t *, char *); 457 0 stevel char *adr_getshort(adr_t *, short *); 458 0 stevel char *adr_getushort(adr_t *, ushort_t *); 459 0 stevel char *adr_getint32(adr_t *, int32_t *); 460 0 stevel char *adr_getuint32(adr_t *, uint32_t *); 461 0 stevel char *adr_getint64(adr_t *, int64_t *); 462 0 stevel char *adr_getuint64(adr_t *, uint64_t *); 463 0 stevel 464 0 stevel int adr_count(adr_t *); 465 0 stevel 466 0 stevel #endif /* _KERNEL */ 467 0 stevel 468 0 stevel #ifdef __cplusplus 469 0 stevel } 470 0 stevel #endif 471 0 stevel 472 0 stevel #endif /* _BSM_AUDIT_RECORD_H */ 473