This patch fixes a couple of bugs which prevented xgroupset, xuserset to
skip entries which already existed in the pool.

xp_nodeerror_print() deletes an error from the errorpool after printing
it.

Index: utils/xgroupset.c
===================================================================
--- utils/xgroupset.c   (revision 720)
+++ utils/xgroupset.c   (working copy)
@@ -141,10 +141,8 @@
                if (!strcmp("delete", cmd)) {
                        if (groupfile) {
                                setgrent();
-                               while ((gr = getgrent()) != NULL) {
-                                       if (xp_group_del(nds, adminkey,
gr->gr_name) < 0)
-                                               goto error;
-                               }
+                               while ((gr = getgrent()) != NULL)
+                                       xp_group_del(nds, adminkey,
gr->gr_name);
                                endgrent();
                        } else {
                                groupname = argv[optind++];
@@ -154,10 +152,8 @@
                } else { /* group add */
                        if (groupfile) {
                                setgrent();
-                               while ((gr = getgrent()) != NULL) {
-                                       if (xp_group_add(nds, adminkey,
gr->gr_name, gr->gr_gid) < 0)
-                                               goto error;
-                               }
+                               while ((gr = getgrent()) != NULL)
+                                       xp_group_add(nds, adminkey,
gr->gr_name, gr->gr_gid);
                                endgrent();
                        } else {
                                groupname = argv[optind++];
Index: utils/xuserset.c
===================================================================
--- utils/xuserset.c    (revision 720)
+++ utils/xuserset.c    (working copy)
@@ -179,10 +179,8 @@
                if (!strcmp("delete", cmd)) {
                        if (passwdfile) {
                                setpwent();
-                               while ((pw = getpwent()) != NULL) {
-                                       if (xp_user_del(nds, adminkey,
pw->pw_name) < 0)
-                                               goto error;
-                               }
+                               while ((pw = getpwent()) != NULL)
+                                       xp_user_del(nds, adminkey,
pw->pw_name);
                                endpwent();
                        } else {
                                username = argv[optind++];
@@ -204,9 +202,8 @@
                                                continue;
                                        }
 
-                                       if (xp_user_add(nds, adminkey,
pw->pw_name, pw->pw_uid,
-                                                       gr->gr_name,
userkey) < 0)
-                                               goto error;
+                                       xp_user_add(nds, adminkey,
pw->pw_name, pw->pw_uid,
+                                                   gr->gr_name,
userkey);
                                }
                                endpwent();
                        } else {
Index: libxcpu/node.c
===================================================================
--- libxcpu/node.c      (revision 720)
+++ libxcpu/node.c      (working copy)
@@ -167,6 +167,9 @@
        for(pe = NULL, ne = errorpool; ne != NULL; pe = ne, ne =
ne->next) {
                fprintf(stderr, "%s: %s: Error %d: %s\n",
                        prog, ne->node->name, ne->ecode, ne->ename);
+
+               errorpool = ne->next;
+               free(ne);
                
                if(pe != NULL)
                        free(pe);

-- 
Signed-off-by: Abhishek Kulkarni <[EMAIL PROTECTED]>

Reply via email to