1 /* vi: set sw=4 ts=4: */
3 * password utility routines.
5 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
6 * Copyright (C) 2008 by Tito Ragusa <farmatito@tiscali.it>
8 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
13 /* TODO: maybe change API to return malloced data?
14 * This will allow to stop using libc functions returning
15 * pointers to static data (getpwuid)
18 struct passwd
* FAST_FUNC
xgetpwnam(const char *name
)
20 struct passwd
*pw
= getpwnam(name
);
22 bb_error_msg_and_die("unknown user %s", name
);
26 struct group
* FAST_FUNC
xgetgrnam(const char *name
)
28 struct group
*gr
= getgrnam(name
);
30 bb_error_msg_and_die("unknown group %s", name
);
35 struct passwd
* FAST_FUNC
xgetpwuid(uid_t uid
)
37 struct passwd
*pw
= getpwuid(uid
);
39 bb_error_msg_and_die("unknown uid %u", (unsigned)uid
);
43 struct group
* FAST_FUNC
xgetgrgid(gid_t gid
)
45 struct group
*gr
= getgrgid(gid
);
47 bb_error_msg_and_die("unknown gid %u", (unsigned)gid
);
51 char* FAST_FUNC
xuid2uname(uid_t uid
)
53 struct passwd
*pw
= xgetpwuid(uid
);
57 char* FAST_FUNC
xgid2group(gid_t gid
)
59 struct group
*gr
= xgetgrgid(gid
);
63 char* FAST_FUNC
uid2uname(uid_t uid
)
65 struct passwd
*pw
= getpwuid(uid
);
66 return (pw
) ? pw
->pw_name
: NULL
;
69 char* FAST_FUNC
gid2group(gid_t gid
)
71 struct group
*gr
= getgrgid(gid
);
72 return (gr
) ? gr
->gr_name
: NULL
;
75 char* FAST_FUNC
uid2uname_utoa(uid_t uid
)
77 char *name
= uid2uname(uid
);
78 return (name
) ? name
: utoa(uid
);
81 char* FAST_FUNC
gid2group_utoa(gid_t gid
)
83 char *name
= gid2group(gid
);
84 return (name
) ? name
: utoa(gid
);
87 long FAST_FUNC
xuname2uid(const char *name
)
89 struct passwd
*myuser
;
91 myuser
= xgetpwnam(name
);
92 return myuser
->pw_uid
;
95 long FAST_FUNC
xgroup2gid(const char *name
)
97 struct group
*mygroup
;
99 mygroup
= xgetgrnam(name
);
100 return mygroup
->gr_gid
;
103 unsigned long FAST_FUNC
get_ug_id(const char *s
,
104 long FAST_FUNC (*xname2id
)(const char *))
108 r
= bb_strtoul(s
, NULL
, 10);