Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/libbb/bb_pwd.c

Parent Directory Parent Directory | Revision Log 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)
-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     }