From kwebb@flux.utah.edu  Sat May  6 00:27:52 2006
Return-Path: <kwebb@flux.utah.edu>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 0498616A401
	for <bug-followup@FreeBSD.org>; Sat,  6 May 2006 00:27:52 +0000 (UTC)
	(envelope-from kwebb@flux.utah.edu)
Received: from bas.flux.utah.edu (bas.flux.utah.edu [155.98.60.2])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 962F343D45
	for <bug-followup@FreeBSD.org>; Sat,  6 May 2006 00:27:51 +0000 (GMT)
	(envelope-from kwebb@flux.utah.edu)
Received: from bas.flux.utah.edu (localhost [127.0.0.1])
	by bas.flux.utah.edu (8.12.11/8.12.11) with ESMTP id k460RoBh093225;
	Fri, 5 May 2006 18:27:50 -0600 (MDT)
	(envelope-from kwebb@bas.flux.utah.edu)
Received: (from kwebb@localhost)
	by bas.flux.utah.edu (8.12.11/8.13.1/Submit) id k460RoKq093224;
	Fri, 5 May 2006 18:27:50 -0600 (MDT)
	(envelope-from kwebb)
Message-Id: <20060506002750.GF53718@flux.utah.edu>
Date: Fri, 5 May 2006 18:27:50 -0600
From: Kirk R Webb <kwebb@flux.utah.edu>
To: bug-followup@FreeBSD.org, kwebb@flux.utah.edu
Subject: Problem Report kern/96840 : reversed patch.

>Number:         96841
>Category:       kern
>Synopsis:       Re: kern/96840: reversed patch.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat May 06 00:30:19 GMT 2006
>Closed-Date:    Sat May 06 03:24:40 GMT 2006
>Last-Modified:  Sat May 06 03:24:40 GMT 2006
>Originator:     
>Release:        
>Organization:
>Environment:
>Description:
 Oops... I submitted the patch revered.  Sorry!  Here is the corrected 
 version:
 
 --- /usr/src/lib/libc/gen/getgrent.c	Fri May  5 15:44:13 2006
 +++ getgrent.c	Fri May  5 15:46:28 2006
 @@ -967,6 +967,7 @@
  	int		*errnop, keylen, resultlen, rv;
  	
  	name = NULL;
 +        key  = NULL;
  	gid = (gid_t)-1;
  	how = (enum nss_lookup_type)mdata;
  	switch (how) {
 @@ -1016,19 +1017,16 @@
  		result = NULL;
  		if (how == nss_lt_all) {
  			if (st->key == NULL)
 -				rv = yp_first(st->domain, map, &st->key,
 -				    &st->keylen, &result, &resultlen);
 +				rv = yp_first(st->domain, map, &key,
 +				    &keylen, &result, &resultlen);
  			else {
 -				key = st->key;
 -				keylen = st->keylen;
 -				st->key = NULL;
 -				rv = yp_next(st->domain, map, key, keylen,
 -				    &st->key, &st->keylen, &result,
 -				    &resultlen);
 -				free(key);
 +				rv = yp_next(st->domain, map, 
 +                                    st->key, st->keylen,
 +                                    &key, &keylen, &result, &resultlen);
  			}
  			if (rv != 0) {
  				free(result);
 +                                free(key);
  				free(st->key);
  				st->key = NULL;
  				if (rv == YPERR_NOMORE) {
 @@ -1054,16 +1052,35 @@
  		 * terminator, alignment padding, and one (char *)
  		 * pointer for the member list terminator.
  		 */
 -		if (resultlen >= bufsize - _ALIGNBYTES - sizeof(char *))
 -			goto erange;
 +		if (resultlen >= bufsize - _ALIGNBYTES - sizeof(char *)) {
 +                        if (how == nss_lt_all) {
 +                                free(key);
 +                        }
 +                        goto erange;
 +                }
  		memcpy(buffer, result, resultlen);
  		buffer[resultlen] = '\0';
  		free(result);
  		rv = __gr_match_entry(buffer, resultlen, how, name, gid);
 -		if (rv == NS_SUCCESS)
 +		if (rv == NS_SUCCESS) {
  			rv = __gr_parse_entry(buffer, resultlen, grp,
  			    &buffer[resultlen+1], bufsize - resultlen - 1,
  			    errnop);
 +                        if (*errnop == ERANGE) {
 +                                if (how == nss_lt_all) {
 +                                        free(key);
 +                                }
 +                                goto erange;
 +                        }
 +                }
 +                if (how == nss_lt_all) {
 +                        if (st->key != NULL) {
 +                                free(st->key);
 +                        }
 +                        st->key = key;
 +                        st->keylen = keylen;
 +                        key = NULL;
 +                }
  	} while (how == nss_lt_all && !(rv & NS_TERMINATE));
  fin:
  	if (rv == NS_SUCCESS && retval != NULL)
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: linimon 
State-Changed-When: Sat May 6 03:22:52 UTC 2006 
State-Changed-Why:  
Misfiled followup to kern/96840; content migrated. 


Responsible-Changed-From-To: gnats-admin->freebsd-ports-bugs 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Sat May 6 03:22:52 UTC 2006 
Responsible-Changed-Why:  

http://www.freebsd.org/cgi/query-pr.cgi?pr=96841 
>Unformatted:
