Contents of /trunk/mkinitrd-magellan/busybox/libbb/bb_pwd.c
Parent Directory | Revision Log
Revision 816 -
(show annotations)
(download)
Fri Apr 24 18:33:46 2009 UTC (15 years, 5 months ago) by niro
File MIME type: text/plain
File size: 2576 byte(s)
Fri Apr 24 18:33:46 2009 UTC (15 years, 5 months ago) by niro
File MIME type: text/plain
File size: 2576 byte(s)
-updated to busybox-1.13.4
1 | /* vi: set sw=4 ts=4: */ |
2 | /* |
3 | * password utility routines. |
4 | * |
5 | * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> |
6 | * |
7 | * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. |
8 | */ |
9 | |
10 | #include "libbb.h" |
11 | |
12 | #define assert(x) ((void)0) |
13 | |
14 | /* internal function for bb_getpwuid and bb_getgrgid */ |
15 | /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more |
16 | * flexible: |
17 | * |
18 | * bufsize > 0: If idname is not NULL it is copied to buffer, |
19 | * and buffer is returned. Else id as string is written |
20 | * to buffer, and NULL is returned. |
21 | * |
22 | * bufsize == 0: idname is returned. |
23 | * |
24 | * bufsize < 0: If idname is not NULL it is returned. |
25 | * Else an error message is printed and the program exits. |
26 | */ |
27 | static char* bb_getug(char *buffer, int bufsize, char *idname, long id, char prefix) |
28 | { |
29 | if (bufsize > 0) { |
30 | assert(buffer != NULL); |
31 | if (idname) { |
32 | return safe_strncpy(buffer, idname, bufsize); |
33 | } |
34 | snprintf(buffer, bufsize, "%ld", id); |
35 | } else if (bufsize < 0 && !idname) { |
36 | bb_error_msg_and_die("unknown %cid %ld", prefix, id); |
37 | } |
38 | return idname; |
39 | } |
40 | |
41 | /* bb_getpwuid, bb_getgrgid: |
42 | * bb_getXXXid(buf, bufsz, id) - copy user/group name or id |
43 | * as a string to buf, return user/group name or NULL |
44 | * bb_getXXXid(NULL, 0, id) - return user/group name or NULL |
45 | * bb_getXXXid(NULL, -1, id) - return user/group name or exit |
46 | */ |
47 | /* gets a username given a uid */ |
48 | char* FAST_FUNC bb_getpwuid(char *name, int bufsize, long uid) |
49 | { |
50 | struct passwd *myuser = getpwuid(uid); |
51 | |
52 | return bb_getug(name, bufsize, |
53 | (myuser ? myuser->pw_name : (char*)myuser), |
54 | uid, 'u'); |
55 | } |
56 | /* gets a groupname given a gid */ |
57 | char* FAST_FUNC bb_getgrgid(char *group, int bufsize, long gid) |
58 | { |
59 | struct group *mygroup = getgrgid(gid); |
60 | |
61 | return bb_getug(group, bufsize, |
62 | (mygroup ? mygroup->gr_name : (char*)mygroup), |
63 | gid, 'g'); |
64 | } |
65 | |
66 | /* returns a gid given a group name */ |
67 | long FAST_FUNC xgroup2gid(const char *name) |
68 | { |
69 | struct group *mygroup; |
70 | |
71 | mygroup = getgrnam(name); |
72 | if (mygroup == NULL) |
73 | bb_error_msg_and_die("unknown group name: %s", name); |
74 | |
75 | return mygroup->gr_gid; |
76 | } |
77 | |
78 | /* returns a uid given a username */ |
79 | long FAST_FUNC xuname2uid(const char *name) |
80 | { |
81 | struct passwd *myuser; |
82 | |
83 | myuser = getpwnam(name); |
84 | if (myuser == NULL) |
85 | bb_error_msg_and_die("unknown user %s", name); |
86 | |
87 | return myuser->pw_uid; |
88 | } |
89 | |
90 | unsigned long FAST_FUNC get_ug_id(const char *s, |
91 | long FAST_FUNC (*xname2id)(const char *)) |
92 | { |
93 | unsigned long r; |
94 | |
95 | r = bb_strtoul(s, NULL, 10); |
96 | if (errno) |
97 | return xname2id(s); |
98 | return r; |
99 | } |