Changeset 3621 in MondoRescue for branches/3.3/mindi-busybox/libpwdgrp/uidgid_get.c
- Timestamp:
- Dec 20, 2016, 4:07:32 PM (7 years ago)
- Location:
- branches/3.3
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/3.3/mindi-busybox/libpwdgrp/uidgid_get.c
r3232 r3621 29 29 30 30 /* Always sets uid and gid */ 31 int FAST_FUNC get_uidgid(struct bb_uidgid_t *u, const char *ug , int numeric_ok)31 int FAST_FUNC get_uidgid(struct bb_uidgid_t *u, const char *ug) 32 32 { 33 33 struct passwd *pwd; … … 44 44 safe_strncpy(user, ug, sz); 45 45 } 46 if (numeric_ok) { 47 n = bb_strtou(user, NULL, 10); 48 if (!errno) { 49 u->uid = n; 50 pwd = getpwuid(n); 51 /* If we have e.g. "500" string without user */ 52 /* with uid 500 in /etc/passwd, we set gid == uid */ 53 u->gid = pwd ? pwd->pw_gid : n; 54 goto skip; 55 } 46 n = bb_strtou(user, NULL, 10); 47 if (!errno) { 48 u->uid = n; 49 pwd = getpwuid(n); 50 /* If we have e.g. "500" string without user */ 51 /* with uid 500 in /etc/passwd, we set gid == uid */ 52 u->gid = pwd ? pwd->pw_gid : n; 53 goto skip; 56 54 } 57 /* Either it is not numeric, or caller disallows numeric username*/55 /* it is not numeric */ 58 56 pwd = getpwnam(user); 59 57 if (!pwd) … … 64 62 skip: 65 63 if (group) { 66 if (numeric_ok) { 67 n = bb_strtou(group, NULL, 10); 68 if (!errno) { 69 u->gid = n; 70 return 1; 71 } 64 n = bb_strtou(group, NULL, 10); 65 if (!errno) { 66 u->gid = n; 67 return 1; 72 68 } 73 69 gr = getgrnam(group); … … 80 76 void FAST_FUNC xget_uidgid(struct bb_uidgid_t *u, const char *ug) 81 77 { 82 if (!get_uidgid(u, ug , 1))78 if (!get_uidgid(u, ug)) 83 79 bb_error_msg_and_die("unknown user/group %s", ug); 84 80 } … … 94 90 { 95 91 char *group; 92 93 u->uid = u->gid = (gid_t)-1L; 96 94 97 95 /* Check if there is a group name */ … … 120 118 unsigned u; 121 119 struct bb_uidgid_t ug; 122 u = get_uidgid(&ug, "apache" , 0);120 u = get_uidgid(&ug, "apache"); 123 121 printf("%u = %u:%u\n", u, ug.uid, ug.gid); 124 122 ug.uid = ug.gid = 1111; 125 u = get_uidgid(&ug, "apache" , 0);123 u = get_uidgid(&ug, "apache"); 126 124 printf("%u = %u:%u\n", u, ug.uid, ug.gid); 127 125 ug.uid = ug.gid = 1111; 128 u = get_uidgid(&ug, "apache:users" , 0);126 u = get_uidgid(&ug, "apache:users"); 129 127 printf("%u = %u:%u\n", u, ug.uid, ug.gid); 130 128 ug.uid = ug.gid = 1111; 131 u = get_uidgid(&ug, "apache:users" , 0);129 u = get_uidgid(&ug, "apache:users"); 132 130 printf("%u = %u:%u\n", u, ug.uid, ug.gid); 133 131 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.