diff -up shadow-4.1.0/libmisc/chkname.c.goodname shadow-4.1.0/libmisc/chkname.c --- shadow-4.1.0/libmisc/chkname.c.goodname 2007-11-11 00:45:59.000000000 +0100 +++ shadow-4.1.0/libmisc/chkname.c 2007-12-12 13:57:20.000000000 +0100 @@ -18,16 +18,24 @@ static int good_name (const char *name) { /* - * User/group names must match [a-z_][a-z0-9_-]*[$] - */ - if (!*name || !((*name >= 'a' && *name <= 'z') || *name == '_')) + * User/group names must match gnu e-regex: + * [a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,30}[a-zA-Z0-9_.$-]? + * + * as a non-POSIX, extension, allow "$" as the last char for + * sake of Samba 3.x "add machine script" + */ + if (!*name || !((*name >= 'a' && *name <= 'z') + || (*name >= 'A' && *name <= 'Z') + || (*name >= '0' && *name <= '9') + || *name == '_' || *name == '.')) return 0; while (*++name) { - if (!((*name >= 'a' && *name <= 'z') || - (*name >= '0' && *name <= '9') || - *name == '_' || *name == '-' || - (*name == '$' && *(name + 1) == '\0'))) + if (!( (*name >= 'a' && *name <= 'z') + || (*name >= 'A' && *name <= 'Z') + || (*name >= '0' && *name <= '9') + || *name == '_' || *name == '.' || *name == '-' + || (*name == '$' && *(name + 1) == '\0'))) return 0; } @@ -43,10 +51,9 @@ int check_user_name (const char *name) #endif /* - * User names are limited by whatever utmp can - * handle (usually max 8 characters). + * User names are limited by whatever utmp can handle. */ - if (strlen (name) > sizeof (ut.ut_user)) + if (strlen(name) + 1 > sizeof(ut.ut_user)) return 0; return good_name (name); @@ -54,11 +61,13 @@ int check_user_name (const char *name) int check_group_name (const char *name) { - /* - * Arbitrary limit for group names - max 16 - * characters (same as on HP-UX 10). - */ - if (strlen (name) > 16) +#if HAVE_UTMPX_H + struct utmpx ut; +#else + struct utmp ut; +#endif + + if (strlen(name) + 1 > sizeof(ut.ut_user)) return 0; return good_name (name); diff -up shadow-4.1.0/man/groupadd.8.goodname shadow-4.1.0/man/groupadd.8 --- shadow-4.1.0/man/groupadd.8.goodname 2007-12-12 13:51:43.000000000 +0100 +++ shadow-4.1.0/man/groupadd.8 2007-12-12 14:00:29.000000000 +0100 @@ -126,9 +126,7 @@ Shadow password suite configuration\. .RE .SH "CAVEATS" .PP -Groupnames must begin with a lower case letter or an underscore, and only lower case letters, underscores, dashes, and dollar signs may follow\. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$] -.PP -Groupnames may only be up to 16 characters long\. +Groupnames may only be up to 32 characters long\. .PP You may not add a NIS or LDAP group\. This must be performed on the corresponding server\. .PP diff -up shadow-4.1.0/man/useradd.8.goodname shadow-4.1.0/man/useradd.8 --- shadow-4.1.0/man/useradd.8.goodname 2007-12-12 13:51:43.000000000 +0100 +++ shadow-4.1.0/man/useradd.8 2007-12-12 14:01:36.000000000 +0100 @@ -242,8 +242,6 @@ You may not add a user to a NIS or LDAP Similarly, if the username already exists in an external user database such as NIS or LDAP, \fBuseradd\fR will deny the user account creation request\. -.PP -Usernames must begin with a lower case letter or an underscore, and only lower case letters, underscores, dashes, and dollar signs may follow\. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$] .SH "CONFIGURATION" .PP The following configuration variables in