Print this page
NEX-13644 File access audit logging
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>

*** 19,28 **** --- 19,30 ---- * CDDL HEADER END */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. + * + * Copyright 2018 Nexenta Systems, Inc. All rights reserved. */ /* * Support routines for building audit records. */
*** 50,59 **** --- 52,62 ---- #include <sys/vmparam.h> /* for USRSTACK/USRSTACK32 */ #include <sys/vfs.h> /* for sonode */ #include <sys/socketvar.h> /* for sonode */ #include <sys/zone.h> #include <sys/tsol/label.h> + #include <sys/cmn_err.h> /* * These are the control tokens */
*** 603,612 **** --- 606,645 ---- return (token); } /* + * au_to_path_string + * returns: + * pointer to au_membuf chain containing a path token. + */ + token_t * + au_to_path_string(const char *path) + { + token_t *token; /* local au_membuf */ + adr_t adr; /* adr memory stream header */ + char data_header = AUT_PATH; /* header for this token */ + short bytes; /* length of string */ + + bytes = strlen(path) + 1; + + /* + * generate path token header + */ + token = au_getclr(); + adr_start(&adr, memtod(token, char *)); + adr_char(&adr, &data_header, 1); + adr_short(&adr, &bytes, 1); + token->len = adr_count(&adr); + + /* append path string */ + (void) au_append_buf(path, bytes, token); + + return (token); + } + + /* * au_to_ipc * returns: * pointer to au_membuf chain containing a System V IPC token. */ token_t *
*** 1202,1207 **** --- 1235,1284 ---- adr_char(&adr, (char *)label, sizeof (_mac_label_impl_t)); m->len = adr_count(&adr); return (m); + } + + token_t * + au_to_access_mask(uint32_t access) + { + token_t *m; /* local au_membuf */ + adr_t adr; /* adr memory stream header */ + char data_header = AUT_ACCESS_MASK; /* header for this token */ + + m = au_getclr(); + + adr_start(&adr, memtod(m, char *)); + adr_char(&adr, &data_header, 1); + + adr_uint32(&adr, &access, 1); + + m->len = adr_count(&adr); + return (m); + } + + token_t * + au_to_wsid(ksid_t *ks) + { + token_t *token; /* local au_membuf */ + adr_t adr; /* adr memory stream header */ + char data_header = AUT_WSID; /* header for this token */ + short bytes; /* length of string */ + char sidbuf[256]; /* SMB_SID_STRSZ */ + + sidbuf[0] = '\0'; + (void) snprintf(sidbuf, sizeof (sidbuf), "%s-%u", + ksid_getdomain(ks), ksid_getrid(ks)); + + token = au_getclr(); + + bytes = (short)strlen(sidbuf) + 1; + adr_start(&adr, memtod(token, char *)); + adr_char(&adr, &data_header, 1); + adr_short(&adr, &bytes, 1); + + token->len = (char)adr_count(&adr); + (void) au_append_buf(sidbuf, bytes, token); + + return (token); }