enforce maxlength in usernames

Rich Felker dalias at aerifal.cx
Thu Jul 28 21:36:57 UTC 2011


On Thu, Jul 28, 2011 at 10:29:01PM +0200, Matthias Andree wrote:
> > 	/* For example, name like ".." can make adduser
> > 	 * chown "/home/.." recursively - NOT GOOD
> > 	 */
> > 
> > 	do {
> > 		if (*name == '-' || *name == '.')
> > 			continue;
> >  skip:
> > 		if (isalnum(*name)
> 
> This is bogus and can lead to segfaults through out-of-bounds array
> subscripts on systems with signed chars.  This needs to be
> isalnum((unsigned char)*name).  This is true for all toupper/tolower and
> is*() functions from <ctype.h> where the argument is as wide as char.

Any use of isalnum or similar in validating login names is completely
bogus because it cannot handle alphanumeric multibyte characters.
Either skip the validation (which is almost surely just harmful and
not helpful to anyone) or make correct use of mbrtowc and iswalnum.

Rich


More information about the busybox mailing list