aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libbb.h1
-rw-r--r--libbb/bb_pwd.c14
-rw-r--r--loginutils/addgroup.c4
3 files changed, 11 insertions, 8 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 80311db2b..16e8f48db 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -703,6 +703,7 @@ void xget_uidgid(struct bb_uidgid_t*, const char*) FAST_FUNC;
703/* chown-like handling of "user[:[group]" */ 703/* chown-like handling of "user[:[group]" */
704void parse_chown_usergroup_or_die(struct bb_uidgid_t *u, char *user_group) FAST_FUNC; 704void parse_chown_usergroup_or_die(struct bb_uidgid_t *u, char *user_group) FAST_FUNC;
705struct passwd* xgetpwnam(const char *name) FAST_FUNC; 705struct passwd* xgetpwnam(const char *name) FAST_FUNC;
706struct group* xgetgrnam(const char *name) FAST_FUNC;
706struct passwd* xgetpwuid(uid_t uid) FAST_FUNC; 707struct passwd* xgetpwuid(uid_t uid) FAST_FUNC;
707struct group* xgetgrgid(gid_t gid) FAST_FUNC; 708struct group* xgetgrgid(gid_t gid) FAST_FUNC;
708char* xuid2uname(uid_t uid) FAST_FUNC; 709char* xuid2uname(uid_t uid) FAST_FUNC;
diff --git a/libbb/bb_pwd.c b/libbb/bb_pwd.c
index 5dbc58d9f..d72857771 100644
--- a/libbb/bb_pwd.c
+++ b/libbb/bb_pwd.c
@@ -23,7 +23,14 @@ struct passwd* FAST_FUNC xgetpwnam(const char *name)
23 return pw; 23 return pw;
24} 24}
25 25
26/* xgetgrnam too? */ 26struct group* FAST_FUNC xgetgrnam(const char *name)
27{
28 struct group *gr = getgrnam(name);
29 if (!gr)
30 bb_error_msg_and_die("unknown group %s", name);
31 return gr;
32}
33
27 34
28struct passwd* FAST_FUNC xgetpwuid(uid_t uid) 35struct passwd* FAST_FUNC xgetpwuid(uid_t uid)
29{ 36{
@@ -89,10 +96,7 @@ long FAST_FUNC xgroup2gid(const char *name)
89{ 96{
90 struct group *mygroup; 97 struct group *mygroup;
91 98
92 mygroup = getgrnam(name); 99 mygroup = xgetgrnam(name);
93 if (mygroup == NULL)
94 bb_error_msg_and_die("unknown group %s", name);
95
96 return mygroup->gr_gid; 100 return mygroup->gr_gid;
97} 101}
98 102
diff --git a/loginutils/addgroup.c b/loginutils/addgroup.c
index 2a840d7c0..5032d7b99 100644
--- a/loginutils/addgroup.c
+++ b/loginutils/addgroup.c
@@ -158,10 +158,8 @@ int addgroup_main(int argc UNUSED_PARAM, char **argv)
158 158
159 /* check if group and user exist */ 159 /* check if group and user exist */
160 xuname2uid(argv[0]); /* unknown user: exit */ 160 xuname2uid(argv[0]); /* unknown user: exit */
161 xgroup2gid(argv[1]); /* unknown group: exit */ 161 gr = xgetgrnam(argv[1]); /* unknown group: exit */
162// race here!
163 /* check if user is already in this group */ 162 /* check if user is already in this group */
164 gr = getgrnam(argv[1]);
165 for (; *(gr->gr_mem) != NULL; (gr->gr_mem)++) { 163 for (; *(gr->gr_mem) != NULL; (gr->gr_mem)++) {
166 if (!strcmp(argv[0], *(gr->gr_mem))) { 164 if (!strcmp(argv[0], *(gr->gr_mem))) {
167 /* user is already in group: do nothing */ 165 /* user is already in group: do nothing */