diff options
-rw-r--r-- | libbb/die_if_bad_username.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/libbb/die_if_bad_username.c b/libbb/die_if_bad_username.c index 251b1f06c..337ac6012 100644 --- a/libbb/die_if_bad_username.c +++ b/libbb/die_if_bad_username.c | |||
@@ -18,17 +18,19 @@ | |||
18 | 18 | ||
19 | void die_if_bad_username(const char *name) | 19 | void die_if_bad_username(const char *name) |
20 | { | 20 | { |
21 | int i = 0; | 21 | goto skip; /* 1st char being dash isn't valid */ |
22 | |||
23 | do { | 22 | do { |
24 | if (!isalnum(*name) | 23 | if (*name == '-') |
25 | && !(*name == '_') | 24 | continue; |
26 | && !(*name == '.') | 25 | skip: |
27 | && !(*name == '@') | 26 | if (isalnum(*name) |
28 | && !(*name == '-' && i) | 27 | || *name == '_' |
29 | && !(*name == '$' && !*(name + 1)) | 28 | || *name == '.' |
30 | ) | 29 | || *name == '@' |
31 | bb_error_msg_and_die("illegal character '%c'", *name); | 30 | || (*name == '$' && !*(name + 1)) |
32 | i++; | 31 | ) { |
32 | continue; | ||
33 | } | ||
34 | bb_error_msg_and_die("illegal character '%c'", *name); | ||
33 | } while (*++name); | 35 | } while (*++name); |
34 | } | 36 | } |