Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/libbb/bb_pwd.c
- Timestamp:
- Feb 25, 2011, 9:26:54 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mindi-busybox/libbb/bb_pwd.c
r1765 r2725 4 4 * 5 5 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> 6 * Copyright (C) 2008 by Tito Ragusa <farmatito@tiscali.it> 6 7 * 7 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.8 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 8 9 */ 9 10 10 11 #include "libbb.h" 11 12 12 #define assert(x) ((void)0) 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) 16 */ 13 17 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) 18 struct passwd* FAST_FUNC xgetpwnam(const char *name) 28 19 { 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; 20 struct passwd *pw = getpwnam(name); 21 if (!pw) 22 bb_error_msg_and_die("unknown user %s", name); 23 return pw; 39 24 } 40 25 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* bb_getpwuid(char *name, int bufsize, long uid) 26 struct group* FAST_FUNC xgetgrnam(const char *name) 49 27 { 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* 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'); 28 struct group *gr = getgrnam(name); 29 if (!gr) 30 bb_error_msg_and_die("unknown group %s", name); 31 return gr; 64 32 } 65 33 66 /* returns a gid given a group name */ 67 long xgroup2gid(const char *name) 34 35 struct passwd* FAST_FUNC xgetpwuid(uid_t uid) 36 { 37 struct passwd *pw = getpwuid(uid); 38 if (!pw) 39 bb_error_msg_and_die("unknown uid %u", (unsigned)uid); 40 return pw; 41 } 42 43 struct group* FAST_FUNC xgetgrgid(gid_t gid) 44 { 45 struct group *gr = getgrgid(gid); 46 if (!gr) 47 bb_error_msg_and_die("unknown gid %u", (unsigned)gid); 48 return gr; 49 } 50 51 char* FAST_FUNC xuid2uname(uid_t uid) 52 { 53 struct passwd *pw = xgetpwuid(uid); 54 return pw->pw_name; 55 } 56 57 char* FAST_FUNC xgid2group(gid_t gid) 58 { 59 struct group *gr = xgetgrgid(gid); 60 return gr->gr_name; 61 } 62 63 char* FAST_FUNC uid2uname(uid_t uid) 64 { 65 struct passwd *pw = getpwuid(uid); 66 return (pw) ? pw->pw_name : NULL; 67 } 68 69 char* FAST_FUNC gid2group(gid_t gid) 70 { 71 struct group *gr = getgrgid(gid); 72 return (gr) ? gr->gr_name : NULL; 73 } 74 75 char* FAST_FUNC uid2uname_utoa(long uid) 76 { 77 char *name = uid2uname(uid); 78 return (name) ? name : utoa(uid); 79 } 80 81 char* FAST_FUNC gid2group_utoa(long gid) 82 { 83 char *name = gid2group(gid); 84 return (name) ? name : utoa(gid); 85 } 86 87 long FAST_FUNC xuname2uid(const char *name) 88 { 89 struct passwd *myuser; 90 91 myuser = xgetpwnam(name); 92 return myuser->pw_uid; 93 } 94 95 long FAST_FUNC xgroup2gid(const char *name) 68 96 { 69 97 struct group *mygroup; 70 98 71 mygroup = getgrnam(name); 72 if (mygroup == NULL) 73 bb_error_msg_and_die("unknown group name: %s", name); 74 99 mygroup = xgetgrnam(name); 75 100 return mygroup->gr_gid; 76 101 } 77 102 78 /* returns a uid given a username */ 79 long 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 name: %s", name); 86 87 return myuser->pw_uid; 88 } 89 90 unsigned long get_ug_id(const char *s, 91 long (*xname2id)(const char *)) 103 unsigned long FAST_FUNC get_ug_id(const char *s, 104 long FAST_FUNC (*xname2id)(const char *)) 92 105 { 93 106 unsigned long r;
Note:
See TracChangeset
for help on using the changeset viewer.