diff options
| author | Bill Paul <wpaul@FreeBSD.org> | 1996-12-27 19:28:46 +0000 | 
|---|---|---|
| committer | Bill Paul <wpaul@FreeBSD.org> | 1996-12-27 19:28:46 +0000 | 
| commit | 1d2493ff77f8fcc1c7197e4fb0124db17ecf8ea3 (patch) | |
| tree | b3899e41109595c94a952b728bb8f15ac2b7d3c4 /lib/libc | |
| parent | 33c9a3df24c6dfea95c009d27a23e7629a7c9c6a (diff) | |
Notes
Diffstat (limited to 'lib/libc')
| -rw-r--r-- | lib/libc/gen/getgrent.c | 8 | ||||
| -rw-r--r-- | lib/libc/gen/getnetgrent.c | 4 | ||||
| -rw-r--r-- | lib/libc/gen/getpwent.c | 12 | 
3 files changed, 14 insertions, 10 deletions
| diff --git a/lib/libc/gen/getgrent.c b/lib/libc/gen/getgrent.c index e2cefb9c4b7c..47d229ee6e04 100644 --- a/lib/libc/gen/getgrent.c +++ b/lib/libc/gen/getgrent.c @@ -473,7 +473,7 @@ static int  _getypgroup(struct group *gr, const char *name, char *map)  {  	char *result, *s; -	static char resultbuf[1024]; +	static char resultbuf[YPMAXRECORD + 2];  	int resultlen;  	if(!_gr_yp_domain) { @@ -490,6 +490,7 @@ _getypgroup(struct group *gr, const char *name, char *map)  	if(resultlen >= sizeof resultbuf) return 0;  	strncpy(resultbuf, result, resultlen); +	resultbuf[resultlen] = '\0';  	free(result);  	return(_gr_breakout_yp(gr, resultbuf)); @@ -502,7 +503,7 @@ _nextypgroup(struct group *gr)  	static char *key;  	static int keylen;  	char *lastkey, *result; -	static char resultbuf[1024]; +	static char resultbuf[YPMAXRECORD + 2];  	int resultlen;  	int rv; @@ -537,7 +538,8 @@ unpack:  			goto tryagain;  		} -		strcpy(resultbuf, result); +		strncpy(resultbuf, result, resultlen); +		resultbuf[resultlen] = '\0';  		free(result);  		if((result = strchr(resultbuf, '\n')) != NULL)  			*result = '\0'; diff --git a/lib/libc/gen/getnetgrent.c b/lib/libc/gen/getnetgrent.c index f0d7967f1417..46cc76462c92 100644 --- a/lib/libc/gen/getnetgrent.c +++ b/lib/libc/gen/getnetgrent.c @@ -503,7 +503,7 @@ read_for_group(group)  	register int len, olen;  	int cont;  	struct linelist *lp; -	char line[LINSIZ + 1]; +	char line[LINSIZ + 2];  #ifdef YP  	char *result;  	int resultlen; @@ -523,7 +523,7 @@ read_for_group(group)  					continue;  				}  			} -			sprintf(line, "%s %s", group, result); +			snprintf(line, LINSIZ, "%s %s", group, result);  			free(result);  		}  #else diff --git a/lib/libc/gen/getpwent.c b/lib/libc/gen/getpwent.c index 20f1d2c45ba6..4ec5bfcdb8cd 100644 --- a/lib/libc/gen/getpwent.c +++ b/lib/libc/gen/getpwent.c @@ -568,7 +568,8 @@ static char * _get_adjunct_pw(name)  		    &result, &resultlen)))  		return(NULL); -	strncpy((char *)&adjunctbuf, result, YPMAXRECORD); +	strncpy(adjunctbuf, result, resultlen); +	adjunctbuf[resultlen] = '\0';  	free(result);  	result = (char *)&adjunctbuf; @@ -582,7 +583,7 @@ static char * _get_adjunct_pw(name)  }  static int -_pw_breakout_yp(struct passwd *pw, char *res, int master) +_pw_breakout_yp(struct passwd *pw, char *res, int resultlen, int master)  {  	char *s, *result;  	static char resbuf[YPMAXRECORD+2]; @@ -602,7 +603,8 @@ _pw_breakout_yp(struct passwd *pw, char *res, int master)  	 * a static buffer here since the memory pointed to by  	 * res will be free()ed when this function returns.  	 */ -	strncpy((char *)&resbuf, res, YPMAXRECORD); +	strncpy((char *)&resbuf, res, resultlen); +	resbuf[resultlen] = '\0';  	result = (char *)&resbuf;  	/* @@ -756,7 +758,7 @@ _getyppass(struct passwd *pw, const char *name, const char *map)  		*s = ':'; /* Put back the colon we previously replaced with a NUL. */  	} -	rv = _pw_breakout_yp(pw, result, _gotmaster); +	rv = _pw_breakout_yp(pw, result, resultlen, _gotmaster);  	free(result);  	return(rv);  } @@ -816,7 +818,7 @@ unpack:  		}  		*s = ':'; /* Put back the colon we previously replaced with a NUL. */ -		if (_pw_breakout_yp(pw, result, _gotmaster)) { +		if (_pw_breakout_yp(pw, result, resultlen, _gotmaster)) {  			free(result);  			return(1);  		} else { | 
