Date: Wed, 11 Jan 2006 10:42:56 +0000 (GMT) From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: Re: PERFORCE change 89501 for review Message-ID: <20060111104206.V28748@fledge.watson.org> In-Reply-To: <200601110829.k0B8T1AO055933@repoman.freebsd.org> References: <200601110829.k0B8T1AO055933@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 11 Jan 2006, Robert Watson wrote: > http://perforce.freebsd.org/chv.cgi?CH=89501 > > Change 89501 by rwatson@rwatson_peppercorn on 2006/01/11 08:28:14 > > Add Chunyang Yuan to the credits as a contributor to OpenBSM. .. And fix locking/file access in the OpenBSM user database, accidentally submitted at the same time. May require further revision. > > Affected files ... > > .. //depot/projects/trustedbsd/openbsm/README#7 edit > .. //depot/projects/trustedbsd/openbsm/bsm/libbsm.h#5 edit > .. //depot/projects/trustedbsd/openbsm/libbsm/bsm_audit.c#15 edit > .. //depot/projects/trustedbsd/openbsm/libbsm/bsm_user.c#6 edit > > Differences ... > > ==== //depot/projects/trustedbsd/openbsm/README#7 (text+ko) ==== > > @@ -58,6 +58,7 @@ > Wayne Salamon > Tom Rhodes > Wojciech Koszek > + Chunyang Yuan > > Contributions > > > ==== //depot/projects/trustedbsd/openbsm/bsm/libbsm.h#5 (text+ko) ==== > > @@ -827,6 +827,7 @@ > void endauclass(); > struct au_class_ent *getauclassent(); > struct au_class_ent *getauclassnam(const char *name); > +struct au_class_ent *getauclassnum(au_class_t class_number); > /* > * Free the au_class_ent structure > */ > > ==== //depot/projects/trustedbsd/openbsm/libbsm/bsm_audit.c#15 (text+ko) ==== > > > ==== //depot/projects/trustedbsd/openbsm/libbsm/bsm_user.c#6 (text+ko) ==== > > @@ -57,7 +57,7 @@ > { > struct au_user_ent *u; > > - u = (struct au_user_ent *) malloc (sizeof(struct au_user_ent)); > + u = (struct au_user_ent *) malloc(sizeof(struct au_user_ent)); > if (u == NULL) > return (NULL); > u->au_name = (char *)malloc(AU_USER_NAME_MAX * sizeof(char)); > @@ -112,13 +112,20 @@ > /* > * Rewind to beginning of the file > */ > +static void > +setauuser_locked(void) > +{ > + > + if (fp != NULL) > + fseek(fp, 0, SEEK_SET); > +} > + > void > setauuser(void) > { > > pthread_mutex_lock(&mutex); > - if (fp != NULL) > - fseek(fp, 0, SEEK_SET); > + setauuser_locked(); > pthread_mutex_unlock(&mutex); > } > > @@ -140,41 +147,42 @@ > /* > * Enumerate the au_user_ent structures from the file > */ > -struct au_user_ent * > -getauuserent(void) > +static struct au_user_ent * > +getauuserent_locked(void) > { > struct au_user_ent *u; > char *nl; > > - pthread_mutex_lock(&mutex); > - > - if ((fp == NULL) && ((fp = fopen(AUDIT_USER_FILE, "r")) == NULL)) { > - pthread_mutex_unlock(&mutex); > + if ((fp == NULL) && ((fp = fopen(AUDIT_USER_FILE, "r")) == NULL)) > return (NULL); > - } > > - if (fgets(linestr, AU_LINE_MAX, fp) == NULL) { > - pthread_mutex_unlock(&mutex); > + if (fgets(linestr, AU_LINE_MAX, fp) == NULL) > return (NULL); > - } > > /* Remove new lines. */ > if ((nl = strrchr(linestr, '\n')) != NULL) > *nl = '\0'; > > u = get_user_area(); > - if (u == NULL) { > - pthread_mutex_unlock(&mutex); > + if (u == NULL) > return (NULL); > - } > > /* Get the next structure. */ > if (userfromstr(linestr, delim, u) == NULL) { > destroy_user_area(u); > - pthread_mutex_unlock(&mutex); > return (NULL); > } > > + return (u); > +} > + > +struct au_user_ent * > +getauuserent(void) > +{ > + struct au_user_ent *u; > + > + pthread_mutex_lock(&mutex); > + u = getauuserent_locked(); > pthread_mutex_unlock(&mutex); > return (u); > } > @@ -186,40 +194,21 @@ > getauusernam(const char *name) > { > struct au_user_ent *u; > - char *nl; > > if (name == NULL) > return (NULL); > > - setauuser(); > - > pthread_mutex_lock(&mutex); > > - if ((fp == NULL) && ((fp = fopen(AUDIT_USER_FILE, "r")) == NULL)) { > - pthread_mutex_unlock(&mutex); > - return (NULL); > - } > - > - u = get_user_area(); > - if (u == NULL) { > - pthread_mutex_unlock(&mutex); > - return (NULL); > - } > - > - while (fgets(linestr, AU_LINE_MAX, fp) != NULL) { > - /* Remove new lines. */ > - if ((nl = strrchr(linestr, '\n')) != NULL) > - *nl = '\0'; > - > - if (userfromstr(linestr, delim, u) != NULL) { > - if (!strcmp(name, u->au_name)) { > - pthread_mutex_unlock(&mutex); > - return (u); > - } > + setauuser_locked(); > + while ((u = getauuserent()) != NULL) { > + if (strcmp(name, u->au_name) == 0) { > + pthread_mutex_unlock(&mutex); > + return (u); > } > + destroy_user_area(u); > } > > - destroy_user_area(u); > pthread_mutex_unlock(&mutex); > return (NULL); > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060111104206.V28748>