# HG changeset patch # User gww # Date 1189202742 25200 # Node ID 119c4a9949a85fee33f3984bbafc44c114116abe # Parent cc3cba45b2367d90a9d70fedd453dd263dec50b1 6601349 libbsm is missing support for various X related audit tokens. diff -r cc3cba45b236 -r 119c4a9949a8 usr/src/lib/libbsm/common/adr.c --- a/usr/src/lib/libbsm/common/adr.c Fri Sep 07 14:58:53 2007 -0700 +++ b/usr/src/lib/libbsm/common/adr.c Fri Sep 07 15:05:42 2007 -0700 @@ -35,25 +35,14 @@ #include void -#ifdef __STDC__ adr_start(adr_t *adr, char *p) -#else -adr_start(adr, p) - adr_t *adr; - char *p; -#endif { adr->adr_stream = p; adr->adr_now = p; } int -#ifdef __STDC__ adr_count(adr_t *adr) -#else -adr_count(adr) - adr_t *adr; -#endif { return (((intptr_t)adr->adr_now) - ((intptr_t)adr->adr_stream)); } @@ -63,14 +52,7 @@ * adr_char - pull out characters */ void -#ifdef __STDC__ adr_char(adr_t *adr, char *cp, int count) -#else -adr_char(adr, cp, count) - adr_t *adr; - char *cp; - int count; -#endif { while (count-- > 0) *adr->adr_now++ = *cp++; @@ -80,14 +62,7 @@ * adr_short - pull out shorts */ void -#ifdef __STDC__ adr_short(adr_t *adr, short *sp, int count) -#else -adr_short(adr, sp, count) - adr_t *adr; - short *sp; - int count; -#endif { for (; count-- > 0; sp++) { @@ -100,26 +75,37 @@ * adr_int32 - pull out uint32 */ #pragma weak adr_long = adr_int32 -#ifdef __STDC__ -void adr_long(adr_t *adr, int32_t *lp, int count); +void +adr_long(adr_t *adr, int32_t *lp, int count); void adr_int32(adr_t *adr, int32_t *lp, int count) -#else -void adr_long(); -void -adr_int32(adr, lp, count) - adr_t *adr; - int32_t *lp; - int count; -#endif { int i; /* index for counting */ - uint32_t l; /* value for shifting */ + uint32_t l; /* value for shifting */ for (; count-- > 0; lp++) { for (i = 0, l = *(uint32_t *)lp; i < 4; i++) { *adr->adr_now++ = - (char)((uint32_t)(l & 0xff000000) >> 24); + (char)((uint32_t)(l & 0xff000000) >> 24); + l <<= 8; + } + } +} + +/* + * adr_uid + */ + +void +adr_uid(adr_t *adr, uid_t *up, int count) +{ + int i; /* index for counting */ + uid_t l; /* value for shifting */ + + for (; count-- > 0; up++) { + for (i = 0, l = *(uint32_t *)up; i < 4; i++) { + *adr->adr_now++ = + (char)((uint32_t)(l & 0xff000000) >> 24); l <<= 8; } } @@ -129,14 +115,7 @@ * adr_int64 - pull out uint64_t */ void -#ifdef __STDC__ adr_int64(adr_t *adr, int64_t *lp, int count) -#else -adr_int64(adr, lp, count) - adr_t *adr; - int64_t *lp; - int count; -#endif { int i; /* index for counting */ uint64_t l; /* value for shifting */ @@ -144,7 +123,7 @@ for (; count-- > 0; lp++) { for (i = 0, l = *(uint64_t *)lp; i < 8; i++) { *adr->adr_now++ = (char) - ((uint64_t)(l & 0xff00000000000000ULL) >> 56); + ((uint64_t)(l & 0xff00000000000000ULL) >> 56); l <<= 8; } } diff -r cc3cba45b236 -r 119c4a9949a8 usr/src/lib/libbsm/common/au_to.c --- a/usr/src/lib/libbsm/common/au_to.c Fri Sep 07 14:58:53 2007 -0700 +++ b/usr/src/lib/libbsm/common/au_to.c Fri Sep 07 15:05:42 2007 -0700 @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -990,7 +990,7 @@ case AU_IPADR: ip = &(tid->gt_adr.at_ip); token = get_token((int)(2 * sizeof (char) + 2 * sizeof (short) + - sizeof (uint32_t) + ip->at_type)); + sizeof (uint32_t) + ip->at_type)); if (token == NULL) return (NULL); @@ -1144,18 +1144,49 @@ } /* + * au_to_upriv + * return s: + * pointer to a use of privilege token. + */ +token_t * +au_to_upriv(char sorf, char *priv) +{ + token_t *token; /* local token */ + adr_t adr; /* adr memory stream header */ + char data_header = AUT_UAUTH; /* header for this token */ + short bytes; /* length of string */ + + bytes = strlen(priv) + 1; + + token = get_token(sizeof (char) + sizeof (char) + sizeof (short) + + bytes); + if (token == NULL) + return (NULL); + adr_start(&adr, token->tt_data); + adr_char(&adr, &data_header, 1); + adr_char(&adr, &sorf, 1); /* success/failure */ + adr_short(&adr, &bytes, 1); + adr_char(&adr, priv, bytes); + + return (token); +} + +/* * au_to_xatom * return s: * pointer to a xatom token. */ token_t * -au_to_xatom(ushort_t len, char *atom) +au_to_xatom(char *atom) { token_t *token; /* local token */ adr_t adr; /* adr memory stream header */ char data_header = AUT_XATOM; /* header for this token */ + short len; - token = get_token((int)(sizeof (char) + sizeof (ushort_t) + len)); + len = strlen(atom) + 1; + + token = get_token(sizeof (char) + sizeof (short) + len); if (token == NULL) return (NULL); adr_start(&adr, token->tt_data); @@ -1167,79 +1198,185 @@ } /* - * au_to_xproto + * au_to_xselect * return s: - * pointer to a X protocol token. + * pointer to a X select token. */ token_t * -au_to_xproto(pid_t pid) +au_to_xselect(char *propname, char *proptype, char *windata) { token_t *token; /* local token */ adr_t adr; /* adr memory stream header */ - char data_header = AUT_XPROTO; /* header for this token */ - int32_t v = pid; + char data_header = AUT_XSELECT; /* header for this token */ + short proplen; + short typelen; + short datalen; - token = get_token(sizeof (char) + sizeof (int32_t)); + proplen = strlen(propname) + 1; + typelen = strlen(proptype) + 1; + datalen = strlen(windata) + 1; + + token = get_token(sizeof (char) + (sizeof (short) * 3) + + proplen + typelen + datalen); if (token == NULL) return (NULL); adr_start(&adr, token->tt_data); adr_char(&adr, &data_header, 1); - adr_int32(&adr, &v, 1); + adr_short(&adr, &proplen, 1); + adr_char(&adr, propname, proplen); + adr_short(&adr, &typelen, 1); + adr_char(&adr, proptype, typelen); + adr_short(&adr, &datalen, 1); + adr_char(&adr, windata, datalen); + + return (token); +} + +/* + * x_common + * return s: + * pointer to a common X token. + */ + +static token_t * +x_common(char data_header, int32_t xid, uid_t cuid) +{ + token_t *token; /* local token */ + adr_t adr; /* adr memory stream header */ + + token = get_token(sizeof (char) + sizeof (int32_t) + sizeof (uid_t)); + if (token == NULL) + return (NULL); + adr_start(&adr, token->tt_data); + adr_char(&adr, &data_header, 1); + adr_int32(&adr, &xid, 1); + adr_uid(&adr, &cuid, 1); return (token); } /* - * au_to_xobj + * au_to_xcolormap + * return s: + * pointer to a X Colormap token. + */ + +token_t * +au_to_xcolormap(int32_t xid, uid_t cuid) +{ + return (x_common(AUT_XCOLORMAP, xid, cuid)); +} + +/* + * au_to_xcursor + * return s: + * pointer to a X Cursor token. + */ + +token_t * +au_to_xcursor(int32_t xid, uid_t cuid) +{ + return (x_common(AUT_XCURSOR, xid, cuid)); +} + +/* + * au_to_xfont + * return s: + * pointer to a X Font token. + */ + +token_t * +au_to_xfont(int32_t xid, uid_t cuid) +{ + return (x_common(AUT_XFONT, xid, cuid)); +} + +/* + * au_to_xgc * return s: - * pointer to a X object token. + * pointer to a X Graphic Context token. + */ + +token_t * +au_to_xgc(int32_t xid, uid_t cuid) +{ + return (x_common(AUT_XGC, xid, cuid)); +} + +/* + * au_to_xpixmap + * return s: + * pointer to a X Pixal Map token. */ + token_t * -au_to_xobj(int oid, int xid, int cuid) +au_to_xpixmap(int32_t xid, uid_t cuid) +{ + return (x_common(AUT_XPIXMAP, xid, cuid)); +} + +/* + * au_to_xwindow + * return s: + * pointer to a X Window token. + */ + +token_t * +au_to_xwindow(int32_t xid, uid_t cuid) +{ + return (x_common(AUT_XWINDOW, xid, cuid)); +} + +/* + * au_to_xproperty + * return s: + * pointer to a X Property token. + */ + +token_t * +au_to_xproperty(int32_t xid, uid_t cuid, char *propname) { token_t *token; /* local token */ adr_t adr; /* adr memory stream header */ - char data_header = AUT_XOBJ; /* header for this token */ + char data_header = AUT_XPROPERTY; /* header for this token */ + short proplen; - token = get_token(sizeof (char) + 3 * sizeof (int32_t)); + proplen = strlen(propname) + 1; + + token = get_token(sizeof (char) + sizeof (int32_t) + sizeof (uid_t) + + sizeof (short) + proplen); if (token == NULL) return (NULL); adr_start(&adr, token->tt_data); adr_char(&adr, &data_header, 1); - adr_int32(&adr, (int32_t *)&oid, 1); - adr_int32(&adr, (int32_t *)&xid, 1); - adr_int32(&adr, (int32_t *)&cuid, 1); + adr_int32(&adr, &xid, 1); + adr_uid(&adr, &cuid, 1); + adr_short(&adr, &proplen, 1); + adr_char(&adr, propname, proplen); return (token); } /* - * au_to_xselect + * au_to_xclient * return s: - * pointer to a X select token. + * pointer to a X Client token */ + token_t * -au_to_xselect(char *pstring, char *type, short dlen, char *data) +au_to_xclient(uint32_t client) { token_t *token; /* local token */ adr_t adr; /* adr memory stream header */ - char data_header = AUT_XSELECT; /* header for this token */ - short bytes; + char data_header = AUT_XCLIENT; /* header for this token */ - bytes = strlen(pstring) + strlen(type) + 2 + dlen; - token = get_token((int)(sizeof (char) + sizeof (short) * 3 + bytes)); + token = get_token(sizeof (char) + sizeof (uint32_t)); if (token == NULL) return (NULL); adr_start(&adr, token->tt_data); adr_char(&adr, &data_header, 1); - bytes = strlen(pstring) + 1; - adr_short(&adr, &bytes, 1); - adr_char(&adr, pstring, bytes); - bytes = strlen(type) + 1; - adr_short(&adr, &bytes, 1); - adr_char(&adr, type, bytes); - adr_short(&adr, &dlen, 1); - adr_char(&adr, data, dlen); + adr_int32(&adr, (int32_t *)&client, 1); + return (token); } diff -r cc3cba45b236 -r 119c4a9949a8 usr/src/lib/libbsm/common/libbsm.h --- a/usr/src/lib/libbsm/common/libbsm.h Fri Sep 07 14:58:53 2007 -0700 +++ b/usr/src/lib/libbsm/common/libbsm.h Fri Sep 07 15:05:42 2007 -0700 @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -105,6 +105,7 @@ extern void adr_char(adr_t *, char *, int); extern int adr_count(adr_t *); extern void adr_int32(adr_t *, int32_t *, int); +extern void adr_uid(adr_t *, uid_t *, int); extern void adr_int64(adr_t *, int64_t *, int); extern void adr_short(adr_t *, short *, int); extern void adr_start(adr_t *, char *); diff -r cc3cba45b236 -r 119c4a9949a8 usr/src/lib/libbsm/common/mapfile-vers --- a/usr/src/lib/libbsm/common/mapfile-vers Fri Sep 07 14:58:53 2007 -0700 +++ b/usr/src/lib/libbsm/common/mapfile-vers Fri Sep 07 15:05:42 2007 -0700 @@ -128,6 +128,7 @@ adrf_u_int64; adrf_u_short; adr_int32; + adr_uid; adr_int64; adrm_char; adrm_int32; @@ -260,10 +261,17 @@ au_to_seq; au_to_trailer; au_to_uauth; + au_to_upriv; au_to_xatom; - au_to_xobj; - au_to_xproto; + au_to_xcolormap; + au_to_xclient; + au_to_xcursor; + au_to_xfont; + au_to_xgc; + au_to_xpixmap; + au_to_xproperty; au_to_xselect; + au_to_xwindow; cacheauclass; cacheauclassnam; cacheauevent; diff -r cc3cba45b236 -r 119c4a9949a8 usr/src/uts/common/c2/audit_record.h --- a/usr/src/uts/common/c2/audit_record.h Fri Sep 07 14:58:53 2007 -0700 +++ b/usr/src/uts/common/c2/audit_record.h Fri Sep 07 15:05:42 2007 -0700 @@ -746,10 +746,17 @@ extern token_t *au_to_tid(au_generic_tid_t *); extern token_t *au_to_trailer(void); extern token_t *au_to_uauth(char *); -extern token_t *au_to_xatom(ushort_t, char *); -extern token_t *au_to_xobj(int, int, int); -extern token_t *au_to_xproto(pid_t); -extern token_t *au_to_xselect(char *, char *, short, char *); +extern token_t *au_to_upriv(char, char *); +extern token_t *au_to_xatom(char *); +extern token_t *au_to_xselect(char *, char *, char *); +extern token_t *au_to_xcolormap(int32_t, uid_t); +extern token_t *au_to_xcursor(int32_t, uid_t); +extern token_t *au_to_xfont(int32_t, uid_t); +extern token_t *au_to_xgc(int32_t, uid_t); +extern token_t *au_to_xpixmap(int32_t, uid_t); +extern token_t *au_to_xwindow(int32_t, uid_t); +extern token_t *au_to_xproperty(int32_t, uid_t, char *); +extern token_t *au_to_xclient(uint32_t); extern token_t *au_to_zonename(char *); #endif /* _KERNEL */