From ca472d6866e545aaa70a70020e3226f236a8aafc Mon Sep 17 00:00:00 2001 From: Shan Hai Date: Tue, 13 Sep 2016 13:45:46 +0800 Subject: [PATCH] shadow: use relaxed usernames The groupadd from shadow does not allow upper case group names, the same is true for the upstream shadow. But distributions like Debian/Ubuntu/CentOS has their own way to cope with this problem, this patch is picked up from CentOS release 7.0 to relax the usernames restrictions to allow the upper case group names, and the relaxation is POSIX compliant because POSIX indicate that usernames are composed of characters from the portable filename character set [A-Za-z0-9._-]. Upstream-Status: Pending Signed-off-by: Shan Hai --- libmisc/chkname.c | 30 ++++++++++++++++++------------ man/groupadd.8.xml | 6 ------ man/useradd.8.xml | 8 +------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/libmisc/chkname.c b/libmisc/chkname.c index 90f185c..65762b4 100644 --- a/libmisc/chkname.c +++ b/libmisc/chkname.c @@ -55,22 +55,28 @@ static bool is_valid_name (const char *name) } /* - * User/group names must match [a-z_][a-z0-9_-]*[$] - */ - - if (('\0' == *name) || - !((('a' <= *name) && ('z' >= *name)) || ('_' == *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 ( ('\0' == *name) || + !((*name >= 'a' && *name <= 'z') || + (*name >= 'A' && *name <= 'Z') || + (*name >= '0' && *name <= '9') || + (*name == '_') || (*name == '.') + )) { return false; } while ('\0' != *++name) { - if (!(( ('a' <= *name) && ('z' >= *name) ) || - ( ('0' <= *name) && ('9' >= *name) ) || - ('_' == *name) || - ('-' == *name) || - ('.' == *name) || - ( ('$' == *name) && ('\0' == *(name + 1)) ) - )) { + if (!( (*name >= 'a' && *name <= 'z') || + (*name >= 'A' && *name <= 'Z') || + (*name >= '0' && *name <= '9') || + (*name == '_') || (*name == '.') || (*name == '-') || + (*name == '$' && *(name + 1) == '\0') + )) { return false; } } diff --git a/man/groupadd.8.xml b/man/groupadd.8.xml index 1e58f09..d804b61 100644 --- a/man/groupadd.8.xml +++ b/man/groupadd.8.xml @@ -272,12 +272,6 @@ CAVEATS - - Groupnames must start with a lower case letter or an underscore, - followed by lower case letters, digits, underscores, or dashes. - They can end with a dollar sign. - In regular expression terms: [a-z_][a-z0-9_-]*[$]? - Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long. diff --git a/man/useradd.8.xml b/man/useradd.8.xml index a16d730..c0bd777 100644 --- a/man/useradd.8.xml +++ b/man/useradd.8.xml @@ -366,7 +366,7 @@ - Do no create the user's home directory, even if the system + Do not create the user's home directory, even if the system wide setting from /etc/login.defs () is set to yes. @@ -660,12 +660,6 @@ the user account creation request. - - Usernames must start with a lower case letter or an underscore, - followed by lower case letters, digits, underscores, or dashes. - They can end with a dollar sign. - In regular expression terms: [a-z_][a-z0-9_-]*[$]? - Usernames may only be up to 32 characters long.