Contents of /tags/mkinitrd-6_4_0/busybox/libbb/die_if_bad_username.c
Parent Directory | Revision Log
Revision 1313 -
(show annotations)
(download)
Fri May 27 18:20:23 2011 UTC (13 years, 4 months ago) by niro
File MIME type: text/plain
File size: 1011 byte(s)
Fri May 27 18:20:23 2011 UTC (13 years, 4 months ago) by niro
File MIME type: text/plain
File size: 1011 byte(s)
tagged 'mkinitrd-6_4_0'
1 | /* vi: set sw=4 ts=4: */ |
2 | /* |
3 | * Check user and group names for illegal characters |
4 | * |
5 | * Copyright (C) 2008 Tito Ragusa <farmatito@tiscali.it> |
6 | * |
7 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. |
8 | */ |
9 | |
10 | #include "libbb.h" |
11 | |
12 | /* To avoid problems, the username should consist only of |
13 | * letters, digits, underscores, periods, at signs and dashes, |
14 | * and not start with a dash (as defined by IEEE Std 1003.1-2001). |
15 | * For compatibility with Samba machine accounts $ is also supported |
16 | * at the end of the username. |
17 | */ |
18 | |
19 | void FAST_FUNC die_if_bad_username(const char *name) |
20 | { |
21 | /* 1st char being dash or dot isn't valid: */ |
22 | goto skip; |
23 | /* For example, name like ".." can make adduser |
24 | * chown "/home/.." recursively - NOT GOOD |
25 | */ |
26 | |
27 | do { |
28 | if (*name == '-' || *name == '.') |
29 | continue; |
30 | skip: |
31 | if (isalnum(*name) |
32 | || *name == '_' |
33 | || *name == '@' |
34 | || (*name == '$' && !name[1]) |
35 | ) { |
36 | continue; |
37 | } |
38 | bb_error_msg_and_die("illegal character '%c'", *name); |
39 | } while (*++name); |
40 | } |