Date: Mon, 28 Nov 2005 22:14:13 GMT From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 87387 for review Message-ID: <200511282214.jASMED82024902@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=87387 Change 87387 by rwatson@rwatson_peppercorn on 2005/11/28 22:13:12 Merge class lookup fixes from OpenBSM to audit3. Affected files ... .. //depot/projects/trustedbsd/audit3/contrib/openbsm/libbsm/bsm_class.c#3 integrate .. //depot/projects/trustedbsd/audit3/contrib/openbsm/libbsm/bsm_flags.c#3 integrate .. //depot/projects/trustedbsd/audit3/contrib/openbsm/libbsm/bsm_token.c#5 integrate Differences ... ==== //depot/projects/trustedbsd/audit3/contrib/openbsm/libbsm/bsm_class.c#3 (text+ko) ==== @@ -146,10 +146,18 @@ return (NULL); } - if (fgets(linestr, AU_LINE_MAX, fp) == NULL) { - pthread_mutex_unlock(&mutex); - return (NULL); + /* + * Read until next non-comment line is found, or EOF. + */ + while (1) { + if (fgets(linestr, AU_LINE_MAX, fp) == NULL) { + pthread_mutex_unlock(&mutex); + return (NULL); + } + if (linestr[0] != '#') + break; } + /* Remove trailing new line character. */ if ((nl = strrchr(linestr, '\n')) != NULL) *nl = '\0'; @@ -180,7 +188,6 @@ getauclassnam(const char *name) { struct au_class_ent *c; - char *nl; if (name == NULL) return (NULL); @@ -201,24 +208,16 @@ return (NULL); } - while(fgets(linestr, AU_LINE_MAX, fp) != NULL) { - /* Remove trailing new line character */ - if ((nl = strrchr(linestr, '\n')) != NULL) - *nl = '\0'; - - /* parse tokptr to au_class_ent components */ - if (classfromstr(linestr, delim, c) != NULL) { - if (!strcmp(name, c->ac_name)) { - pthread_mutex_unlock(&mutex); - return (c); - } + while ((c = getauclassent()) != NULL) { + if (strcmp(name, c->ac_name) == 0) { + pthread_mutex_unlock(&mutex); + return (c); } + free_au_class_ent(c); } - free_au_class_ent(c); pthread_mutex_unlock(&mutex); return (NULL); - } /* ==== //depot/projects/trustedbsd/audit3/contrib/openbsm/libbsm/bsm_flags.c#3 (text+ko) ==== @@ -28,6 +28,7 @@ #include <bsm/libbsm.h> +#include <errno.h> #include <stdio.h> #include <string.h> @@ -45,8 +46,10 @@ struct au_class_ent *c; char *last; - if ((auditstr == NULL) || (masks == NULL)) + if ((auditstr == NULL) || (masks == NULL)) { + errno = EINVAL; return (-1); + } masks->am_success = 0; masks->am_failure = 0; @@ -76,8 +79,10 @@ else ADD_TO_MASK(masks, c->ac_class, sel); free_au_class_ent(c); - } else + } else { + errno = EINVAL; return (-1); + } /* Get the next class. */ tok = strtok_r(NULL, delim, &last); @@ -89,6 +94,9 @@ * Convert the au_mask_t fields into a string value. If verbose is non-zero * the long flag names are used else the short (2-character)flag names are * used. + * + * XXXRW: If bits are specified that are not matched by any class, they are + * omitted rather than rejected with EINVAL. */ int getauditflagschar(char *auditstr, au_mask_t *masks, int verbose) @@ -97,8 +105,10 @@ char *strptr = auditstr; u_char sel; - if ((auditstr == NULL) || (masks == NULL)) + if ((auditstr == NULL) || (masks == NULL)) { + return (EINVAL); return (-1); + } /* * Enumerate the class entries, check if each is selected in either ==== //depot/projects/trustedbsd/audit3/contrib/openbsm/libbsm/bsm_token.c#5 (text+ko) ==== @@ -1108,8 +1108,8 @@ } token_t * -au_to_subject_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid, - pid_t pid, au_asid_t sid, au_tid_addr_t *tid) +au_to_subject_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, + gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid) { return (au_to_subject32_ex(auid, euid, egid, ruid, rgid, pid, sid,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511282214.jASMED82024902>