Annotation of /tags/mkinitrd-6_1_12/busybox/libbb/die_if_bad_username.c
Parent Directory | Revision Log
Revision 939 -
(hide annotations)
(download)
Tue Nov 17 21:24:51 2009 UTC (14 years, 10 months ago) by niro
File MIME type: text/plain
File size: 910 byte(s)
Tue Nov 17 21:24:51 2009 UTC (14 years, 10 months ago) by niro
File MIME type: text/plain
File size: 910 byte(s)
tagged 'mkinitrd-6_1_12'
1 | niro | 816 | /* vi: set sw=4 ts=4: */ |
2 | /* | ||
3 | * Ckeck 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 | goto skip; /* 1st char being dash isn't valid */ | ||
22 | do { | ||
23 | if (*name == '-') | ||
24 | continue; | ||
25 | skip: | ||
26 | if (isalnum(*name) | ||
27 | || *name == '_' | ||
28 | || *name == '.' | ||
29 | || *name == '@' | ||
30 | || (*name == '$' && !*(name + 1)) | ||
31 | ) { | ||
32 | continue; | ||
33 | } | ||
34 | bb_error_msg_and_die("illegal character '%c'", *name); | ||
35 | } while (*++name); | ||
36 | } |