Annotation of /trunk/mkinitrd-magellan/busybox/libbb/bb_pwd.c
Parent Directory
|
Revision Log
Revision 816 -
(hide annotations)
(download)
Fri Apr 24 18:33:46 2009 UTC (15 years, 1 month ago) by niro
File MIME type: text/plain
File size: 2576 byte(s)
Fri Apr 24 18:33:46 2009 UTC (15 years, 1 month ago) by niro
File MIME type: text/plain
File size: 2576 byte(s)
-updated to busybox-1.13.4
1 | niro | 532 | /* 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 | niro | 816 | /* 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 | niro | 532 | */ |
27 | niro | 816 | static char* bb_getug(char *buffer, int bufsize, char *idname, long id, char prefix) |
28 | niro | 532 | { |
29 | niro | 816 | if (bufsize > 0) { |
30 | niro | 532 | 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 | niro | 816 | /* 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 | niro | 532 | */ |
47 | niro | 816 | /* 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 | niro | 532 | |
52 | niro | 816 | return bb_getug(name, bufsize, |
53 | (myuser ? myuser->pw_name : (char*)myuser), | ||
54 | uid, 'u'); | ||
55 | } | ||
56 | niro | 532 | /* gets a groupname given a gid */ |
57 | niro | 816 | char* FAST_FUNC bb_getgrgid(char *group, int bufsize, long gid) |
58 | niro | 532 | { |
59 | struct group *mygroup = getgrgid(gid); | ||
60 | |||
61 | niro | 816 | return bb_getug(group, bufsize, |
62 | (mygroup ? mygroup->gr_name : (char*)mygroup), | ||
63 | gid, 'g'); | ||
64 | niro | 532 | } |
65 | |||
66 | /* returns a gid given a group name */ | ||
67 | niro | 816 | long FAST_FUNC xgroup2gid(const char *name) |
68 | niro | 532 | { |
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 | niro | 816 | long FAST_FUNC xuname2uid(const char *name) |
80 | niro | 532 | { |
81 | struct passwd *myuser; | ||
82 | |||
83 | myuser = getpwnam(name); | ||
84 | if (myuser == NULL) | ||
85 | niro | 816 | bb_error_msg_and_die("unknown user %s", name); |
86 | niro | 532 | |
87 | return myuser->pw_uid; | ||
88 | } | ||
89 | |||
90 | niro | 816 | unsigned long FAST_FUNC get_ug_id(const char *s, |
91 | long FAST_FUNC (*xname2id)(const char *)) | ||
92 | niro | 532 | { |
93 | unsigned long r; | ||
94 | |||
95 | r = bb_strtoul(s, NULL, 10); | ||
96 | if (errno) | ||
97 | return xname2id(s); | ||
98 | return r; | ||
99 | } |