1 |
--- shadow-4.1.4.2/libmisc/chkname.c.dot 2009-04-28 21:14:04.000000000 +0200 |
2 |
+++ shadow-4.1.4.2/libmisc/chkname.c 2009-11-23 16:26:32.000000000 +0100 |
3 |
@@ -49,18 +49,24 @@ |
4 |
static bool is_valid_name (const char *name) |
5 |
{ |
6 |
/* |
7 |
- * User/group names must match [a-z_][a-z0-9_-]*[$] |
8 |
+ * User/group names must match gnu e-regex: |
9 |
+ * [a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,30}[a-zA-Z0-9_.$-]? |
10 |
*/ |
11 |
if (('\0' == *name) || |
12 |
- !((('a' <= *name) && ('z' >= *name)) || ('_' == *name))) { |
13 |
+ !((('a' <= *name) && ('z' >= *name)) || |
14 |
+ (('A' <= *name) && ('Z' >= *name)) || |
15 |
+ (('0' <= *name) && ('9' >= *name)) || |
16 |
+ ('_' == *name) || ('.' == *name))) { |
17 |
return false; |
18 |
} |
19 |
|
20 |
while ('\0' != *++name) { |
21 |
if (!(( ('a' <= *name) && ('z' >= *name) ) || |
22 |
+ ( ('A' <= *name) && ('Z' >= *name) ) || |
23 |
( ('0' <= *name) && ('9' >= *name) ) || |
24 |
('_' == *name) || |
25 |
('-' == *name) || |
26 |
+ ('.' == *name) || |
27 |
( ('$' == *name) && ('\0' == *(name + 1)) ) |
28 |
)) { |
29 |
return false; |