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);
}