Print this page
2989 Eliminate use of LOGNAME_MAX in ON
1166 useradd have warning with name more 8 chars

*** 18,46 **** * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 1997, by Sun Microsystems, Inc. * All rights reserved. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ - - #pragma ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.3 */ - /*LINTLIBRARY*/ #include <sys/types.h> #include <stdio.h> #include <ctype.h> #include <userdefs.h> #include <users.h> #include <limits.h> /* * validate string given as login name. */ int valid_login(char *login, struct passwd **pptr, int *warning) --- 18,49 ---- * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* + * Copyright (c) 2013 Gary Mills + * * Copyright (c) 1997, by Sun Microsystems, Inc. * All rights reserved. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ /*LINTLIBRARY*/ #include <sys/types.h> #include <stdio.h> #include <ctype.h> #include <userdefs.h> #include <users.h> + #include <deflt.h> #include <limits.h> + /* Defaults file */ + #define DEFAULT_USERADD "/etc/default/useradd" + /* * validate string given as login name. */ int valid_login(char *login, struct passwd **pptr, int *warning)
*** 47,56 **** --- 50,60 ---- { struct passwd *t_pptr; char *ptr = login; int bad1char, badc, clower, len; char c; + char action; len = 0; clower = 0; badc = 0; bad1char = 0; *warning = 0; if (!login || !*login) return (INVALID);
*** 66,81 **** badc++; if (islower(c)) clower++; } ! /* ! * XXX length checking causes some operational/compatibility problem. ! * This has to be revisited in the future as ARC/standards issue. ! */ if (len > LOGNAME_MAX) *warning = *warning | WARN_NAME_TOO_LONG; if (clower == 0) *warning = *warning | WARN_NO_LOWERCHAR; if (badc != 0) *warning = *warning | WARN_BAD_LOGNAME_CHAR; if (bad1char != 0) --- 70,107 ---- badc++; if (islower(c)) clower++; } ! action = 'w'; ! if (defopen(DEFAULT_USERADD) == 0) { ! char *defptr; ! ! if ((defptr = defread("EXCEED_TRAD=")) != NULL) { ! char let = tolower(*defptr); ! ! switch (let) { ! case 'w': /* warning */ ! case 'e': /* error */ ! case 's': /* silent */ ! action = let; ! break; ! } ! } ! (void) defopen((char *)NULL); ! } ! if (len > LOGNAME_MAX) + return (LONGNAME); + + if (len > LOGNAME_MAX_TRAD) { + if (action == 'w') *warning = *warning | WARN_NAME_TOO_LONG; + else if (action == 'e') + return (LONGNAME); + } + if (clower == 0) *warning = *warning | WARN_NO_LOWERCHAR; if (badc != 0) *warning = *warning | WARN_BAD_LOGNAME_CHAR; if (bad1char != 0)