--- ../shadow-4.0.18.2-orig/libmisc/chkname.c 2008-06-23 18:23:36 +0900 +++ libmisc/chkname.c 2008-06-23 18:26:08 +0900 @@ -18,16 +18,19 @@ static int good_name (const char *name) { /* - * User/group names must match [a-z_][a-z0-9_-.]*[$] + * User/group names must match /^[A-Za-z0-9_.-]+\$?$/ */ - if (!*name || !((*name >= 'a' && *name <= 'z') || *name == '_')) + if (!((*name >= 'A' && *name <= 'Z') || + (*name >= 'Z' && *name <= 'z') || + (*name >= '0' && *name <= '9') || + *name == '_' || *name == '.' || *name == '-')) return 0; while (*++name) { - if (!((*name >= 'a' && *name <= 'z') || + if (!((*name >= 'A' && *name <= 'Z') || + (*name >= 'a' && *name <= 'z') || (*name >= '0' && *name <= '9') || - *name == '_' || *name == '-' || - *name == '.' || + *name == '_' || *name == '.' || *name == '-' || (*name == '$' && *(name + 1) == '\0'))) return 0; }