PERFORCE change 89501 for review

Robert Watson rwatson at FreeBSD.org
Wed Jan 11 02:43:39 PST 2006


On Wed, 11 Jan 2006, Robert Watson wrote:

> http://perforce.freebsd.org/chv.cgi?CH=89501
>
> Change 89501 by rwatson at 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);
>
>


More information about the p4-projects mailing list