libbb: add xgetgrnam too. ~0 code size change
authorDenis Vlasenko <vda.linux@googlemail.com>
Fri, 5 Dec 2008 16:23:06 +0000 (16:23 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Fri, 5 Dec 2008 16:23:06 +0000 (16:23 -0000)
include/libbb.h
libbb/bb_pwd.c
loginutils/addgroup.c

index 80311db2b2dbb671791bf18caa7a14834f1b6f12..16e8f48dba501653511ac2ed373a2e692e42f775 100644 (file)
@@ -703,6 +703,7 @@ void xget_uidgid(struct bb_uidgid_t*, const char*) FAST_FUNC;
 /* chown-like handling of "user[:[group]" */
 void parse_chown_usergroup_or_die(struct bb_uidgid_t *u, char *user_group) FAST_FUNC;
 struct passwd* xgetpwnam(const char *name) FAST_FUNC;
+struct group* xgetgrnam(const char *name) FAST_FUNC;
 struct passwd* xgetpwuid(uid_t uid) FAST_FUNC;
 struct group* xgetgrgid(gid_t gid) FAST_FUNC;
 char* xuid2uname(uid_t uid) FAST_FUNC;
index 5dbc58d9fd33d52349d11f6c9917bf5c4ce12ce7..d728577714f0017cc20386b5601763f5f0219582 100644 (file)
@@ -23,7 +23,14 @@ struct passwd* FAST_FUNC xgetpwnam(const char *name)
        return pw;
 }
 
-/* xgetgrnam too? */
+struct group* FAST_FUNC xgetgrnam(const char *name)
+{
+       struct group *gr = getgrnam(name);
+       if (!gr)
+               bb_error_msg_and_die("unknown group %s", name);
+       return gr;
+}
+
 
 struct passwd* FAST_FUNC xgetpwuid(uid_t uid)
 {
@@ -89,10 +96,7 @@ long FAST_FUNC xgroup2gid(const char *name)
 {
        struct group *mygroup;
 
-       mygroup = getgrnam(name);
-       if (mygroup == NULL)
-               bb_error_msg_and_die("unknown group %s", name);
-
+       mygroup = xgetgrnam(name);
        return mygroup->gr_gid;
 }
 
index 2a840d7c03903b3f1e2e043ee2948d8c7f592d1c..5032d7b99422883a7680acc27fce843c7508df69 100644 (file)
@@ -158,10 +158,8 @@ int addgroup_main(int argc UNUSED_PARAM, char **argv)
 
                /* check if group and user exist */
                xuname2uid(argv[0]); /* unknown user: exit */
-               xgroup2gid(argv[1]); /* unknown group: exit */
-// race here!
+               gr = xgetgrnam(argv[1]); /* unknown group: exit */
                /* check if user is already in this group */
-               gr = getgrnam(argv[1]);
                for (; *(gr->gr_mem) != NULL; (gr->gr_mem)++) {
                        if (!strcmp(argv[0], *(gr->gr_mem))) {
                                /* user is already in group: do nothing */