Changeset 1770 in MondoRescue for branches/stable/mindi-busybox/libbb/bb_pwd.c
- Timestamp:
- Nov 6, 2007, 11:01:53 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mindi-busybox/libbb/bb_pwd.c
r821 r1770 5 5 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> 6 6 * 7 * Licensed under the GPL v2 , see the file LICENSE in this tarball.7 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. 8 8 */ 9 9 10 #include "libbb.h" 10 11 11 #ifdef L_bb_getgrgid 12 /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more 13 * flexible : 14 * 15 * if bufsize is > 0 char *group cannot be set to NULL. 16 * On success groupname is written on static allocated buffer 17 * group (and a pointer to it is returned). 18 * On failure gid as string is written to static allocated 19 * buffer group and NULL is returned. 20 * if bufsize is = 0 char *group can be set to NULL. 21 * On success groupname is returned. 22 * On failure NULL is returned. 23 * if bufsize is < 0 char *group can be set to NULL. 24 * On success groupname is returned. 25 * On failure an error message is printed and 26 * the program exits. 27 */ 12 #define assert(x) ((void)0) 28 13 29 #include "libbb.h" 30 #include "grp_.h" 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 } 31 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* 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 } 32 56 /* gets a groupname given a gid */ 33 char * bb_getgrgid(char *group, long gid, int bufsize)57 char* bb_getgrgid(char *group, int bufsize, long gid) 34 58 { 35 59 struct group *mygroup = getgrgid(gid); 36 60 37 return bb_getug(group, (mygroup) ? 38 mygroup->gr_name : (char *)mygroup, gid, bufsize, 'g'); 61 return bb_getug(group, bufsize, 62 (mygroup ? mygroup->gr_name : (char*)mygroup), 63 gid, 'g'); 39 64 } 40 #endif /* L_bb_getgrgid */41 42 #ifdef L_bb_xgetgrnam43 #include <stdio.h>44 #include <string.h>45 #include "libbb.h"46 #include "pwd_.h"47 #include "grp_.h"48 49 65 50 66 /* returns a gid given a group name */ 51 long bb_xgetgrnam(const char *name)67 long xgroup2gid(const char *name) 52 68 { 53 69 struct group *mygroup; 54 70 55 mygroup 56 if (mygroup ==NULL)71 mygroup = getgrnam(name); 72 if (mygroup == NULL) 57 73 bb_error_msg_and_die("unknown group name: %s", name); 58 74 59 return (mygroup->gr_gid);75 return mygroup->gr_gid; 60 76 } 61 #endif /* L_bb_xgetgrnam */62 63 #ifdef L_bb_xgetpwnam64 #include <stdio.h>65 #include <string.h>66 #include "libbb.h"67 #include "pwd_.h"68 #include "grp_.h"69 70 77 71 78 /* returns a uid given a username */ 72 long bb_xgetpwnam(const char *name)79 long xuname2uid(const char *name) 73 80 { 74 81 struct passwd *myuser; 75 82 76 myuser 77 if (myuser ==NULL)83 myuser = getpwnam(name); 84 if (myuser == NULL) 78 85 bb_error_msg_and_die("unknown user name: %s", name); 79 86 80 87 return myuser->pw_uid; 81 88 } 82 #endif /* L_bb_xgetpwnam */83 84 #ifdef L_bb_getpwuid85 /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more86 * flexible :87 *88 * if bufsize is > 0 char *name can not be set to NULL.89 * On success username is written on the static allocated90 * buffer name (and a pointer to it is returned).91 * On failure uid as string is written to the static92 * allocated buffer name and NULL is returned.93 * if bufsize is = 0 char *name can be set to NULL.94 * On success username is returned.95 * On failure NULL is returned.96 * if bufsize is < 0 char *name can be set to NULL97 * On success username is returned.98 * On failure an error message is printed and99 * the program exits.100 */101 102 #include "libbb.h"103 #include "pwd_.h"104 105 /* gets a username given a uid */106 char * bb_getpwuid(char *name, long uid, int bufsize)107 {108 struct passwd *myuser = getpwuid(uid);109 110 return bb_getug(name, (myuser) ?111 myuser->pw_name : (char *)myuser , uid, bufsize, 'u');112 }113 #endif /* L_bb_getpwuid */114 115 #ifdef L_bb_getug116 /*117 * if bufsize is > 0 char *buffer can not be set to NULL.118 * If idname is not NULL it is written on the static119 * allocated buffer (and a pointer to it is returned).120 * if idname is NULL, id as string is written to the static121 * allocated buffer and NULL is returned.122 * if bufsize is = 0 char *buffer can be set to NULL.123 * If idname exists a pointer to it is returned,124 * else NULL is returned.125 * if bufsize is < 0 char *buffer can be set to NULL.126 * If idname exists a pointer to it is returned,127 * else an error message is printed and the program exits.128 */129 130 #include <stdio.h>131 #include <assert.h>132 #include "libbb.h"133 134 135 /* internal function for bb_getpwuid and bb_getgrgid */136 char * bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix)137 {138 if(bufsize > 0 ) {139 assert(buffer!=NULL);140 if(idname) {141 return safe_strncpy(buffer, idname, bufsize);142 }143 snprintf(buffer, bufsize, "%ld", id);144 } else if(bufsize < 0 && !idname) {145 bb_error_msg_and_die("unknown %cid %ld", prefix, id);146 }147 return idname;148 }149 #endif /* L_bb_getug */150 151 152 #ifdef L_get_ug_id153 /* indirect dispatcher for pwd helpers. */154 #include <stdlib.h>155 #include "libbb.h"156 89 157 90 unsigned long get_ug_id(const char *s, 158 long (* __bb_getxxnam)(const char *))91 long (*xname2id)(const char *)) 159 92 { 160 93 unsigned long r; 161 char *p;162 94 163 r = strtoul(s, &p, 10); 164 if (*p || (s == p)) { 165 r = __bb_getxxnam(s); 166 } 167 95 r = bb_strtoul(s, NULL, 10); 96 if (errno) 97 return xname2id(s); 168 98 return r; 169 99 } 170 #endif /* L_get_ug_id */
Note:
See TracChangeset
for help on using the changeset viewer.