| From ca472d6866e545aaa70a70020e3226f236a8aafc Mon Sep 17 00:00:00 2001 |
| From: Shan Hai <shan.hai@windriver.com> |
| 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 <shan.hai@windriver.com> |
| |
| --- |
| 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 @@ |
| |
| <refsect1 id='caveats'> |
| <title>CAVEATS</title> |
| - <para> |
| - 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_-]*[$]? |
| - </para> |
| <para> |
| Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long. |
| </para> |
| 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 @@ |
| </term> |
| <listitem> |
| <para> |
| - 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 <filename>/etc/login.defs</filename> |
| (<option>CREATE_HOME</option>) is set to |
| <replaceable>yes</replaceable>. |
| @@ -660,12 +660,6 @@ |
| the user account creation request. |
| </para> |
| |
| - <para> |
| - 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_-]*[$]? |
| - </para> |
| <para> |
| Usernames may only be up to 32 characters long. |
| </para> |