after a few off-the-list exchanges with Daniel, i caught two bugs with
xuserset.
1) the supplied arguments were not parsed properly when trying to add a
single user with xuserset.
2) to add all the users from /etc/passwd, xuserset made a looping call
over getpwent() but xp_user_add did a getpwnam() to find the uid for
xcpu-admin which reset the passwd database causing it to go in an
infinite loop.
few more structural changes in xuserset & xgroupset.
--
Signed-off-by: Abhishek Kulkarni <[EMAIL PROTECTED]>
Index: utils/xgroupset.c
===================================================================
--- utils/xgroupset.c (revision 722)
+++ utils/xgroupset.c (working copy)
@@ -137,31 +137,29 @@
if (!strcmp("flush", cmd)) {
if (xp_group_flush(nds, adminkey) < 0)
goto error;
- } else {
- if (!strcmp("delete", cmd)) {
- if (groupfile) {
- setgrent();
- while ((gr = getgrent()) != NULL)
- xp_group_del(nds, adminkey, gr->gr_name);
- endgrent();
- } else {
- groupname = argv[optind++];
- if (xp_group_del(nds, adminkey, groupname) < 0)
- goto error;
- }
- } else { /* group add */
- if (groupfile) {
- setgrent();
- while ((gr = getgrent()) != NULL)
- xp_group_add(nds, adminkey, gr->gr_name, gr->gr_gid);
- endgrent();
- } else {
- groupname = argv[optind++];
- gid = strtol(argv[optind++], NULL, 10);
- if (xp_group_add(nds, adminkey, groupname, gid) < 0)
- goto error;
- }
+ } else if (!strcmp("delete", cmd)) {
+ if (groupfile) {
+ setgrent();
+ while ((gr = getgrent()) != NULL)
+ xp_group_del(nds, adminkey, gr->gr_name);
+ endgrent();
+ } else {
+ groupname = argv[optind++];
+ if (xp_group_del(nds, adminkey, groupname) < 0)
+ goto error;
}
+ } else { /* group add */
+ if (groupfile) {
+ setgrent();
+ while ((gr = getgrent()) != NULL)
+ xp_group_add(nds, adminkey, gr->gr_name, gr->gr_gid);
+ endgrent();
+ } else {
+ groupname = argv[optind++];
+ gid = strtol(argv[optind++], NULL, 10);
+ if (xp_group_add(nds, adminkey, groupname, gid) < 0)
+ goto error;
+ }
}
return 0;
error:
Index: utils/xuserset.c
===================================================================
--- utils/xuserset.c (revision 722)
+++ utils/xuserset.c (working copy)
@@ -175,55 +175,54 @@
if (!strcmp("flush", cmd)) {
if (xp_user_flush(nds, adminkey) < 0)
goto error;
- } else {
- if (!strcmp("delete", cmd)) {
- if (passwdfile) {
- setpwent();
- while ((pw = getpwent()) != NULL)
- xp_user_del(nds, adminkey, pw->pw_name);
- endpwent();
- } else {
- username = argv[optind++];
- if (xp_user_del(nds, adminkey, username) < 0)
- goto error;
- }
- } else { /* user add */
- if (passwdfile) {
- setpwent();
- while ((pw = getpwent()) != NULL) {
- snprintf(ukeypath, sizeof(ukeypath), "%s/.ssh/id_rsa.pub", pw->pw_dir);
- if (get_user_key(ukeypath, userkey, sizeof(userkey)) < 0) {
- sp_suerror("get_user_key", errno);
- continue;
- }
-
- if ((gr = getgrgid(pw->pw_gid)) == NULL) {
- sp_suerror("get_user_key", errno);
- continue;
- }
-
- xp_user_add(nds, adminkey, pw->pw_name, pw->pw_uid,
- gr->gr_name, userkey);
+ } else if (!strcmp("delete", cmd)) {
+ if (passwdfile) {
+ setpwent();
+ while ((pw = getpwent()) != NULL)
+ xp_user_del(nds, adminkey, pw->pw_name);
+ endpwent();
+ } else {
+ username = argv[optind++];
+ if (xp_user_del(nds, adminkey, username) < 0)
+ goto error;
+ }
+ } else { /* user add */
+ if (passwdfile) {
+ setpwent();
+ while ((pw = getpwent()) != NULL) {
+ snprintf(ukeypath, sizeof(ukeypath), "%s/.ssh/id_rsa.pub", pw->pw_dir);
+ if (get_user_key(ukeypath, userkey, sizeof(userkey)) < 0) {
+ sp_suerror("get_user_key", errno);
+ continue;
}
- endpwent();
- } else {
- userid = strtol(argv[optind++], NULL, 10);
- groupname = argv[optind++];
-
- if (get_user_key(argv[optind++], userkey, sizeof(userkey)) < 0) {
+
+ if ((gr = getgrgid(pw->pw_gid)) == NULL) {
sp_suerror("get_user_key", errno);
- goto error;
+ continue;
}
-
- if (xp_user_add(nds, adminkey, username, userid,
- groupname, userkey) < 0)
- goto error;
+
+ xp_user_add(nds, adminkey, pw->pw_name, pw->pw_uid,
+ gr->gr_name, userkey);
}
+ endpwent();
+ } else {
+ username = argv[optind++];
+ userid = strtol(argv[optind++], NULL, 10);
+ groupname = argv[optind++];
+
+ if (get_user_key(argv[optind], userkey, sizeof(userkey)) < 0) {
+ sp_suerror("get_user_key", errno);
+ goto error;
+ }
+
+ if (xp_user_add(nds, adminkey, username, userid,
+ groupname, userkey) < 0)
+ goto error;
}
}
return 0;
error:
sp_rerror(&ename, &ecode);
fprintf(stderr, "Error: %s\n", ename);
- return 1;
+ return -1;
}
Index: libxcpu/user.c
===================================================================
--- libxcpu/user.c (revision 722)
+++ libxcpu/user.c (working copy)
@@ -143,7 +143,6 @@
static inline Ubuf *
ubuf_init(char *buf, int size, char *uname, u32 uid, char *gname, Xkey *adminkey)
{
- struct passwd *xcpu_admin;
Ubuf *upbuf = sp_malloc(sizeof(*upbuf));
if (!upbuf)
return NULL;
@@ -158,10 +157,6 @@
upbuf->adminuser = sp_malloc(sizeof(*upbuf->adminuser));
upbuf->adminuser->uname = strdup("xcpu-admin");
upbuf->adminuser->uid = 65530;
- xcpu_admin = getpwnam(upbuf->adminuser->uname);
- if (xcpu_admin)
- upbuf->adminuser->uid = xcpu_admin->pw_uid;
-
return upbuf;
}
Index: libxcpu/node.c
===================================================================
--- libxcpu/node.c (revision 722)
+++ libxcpu/node.c (working copy)
@@ -50,15 +50,8 @@
#include "libxcpu.h"
#include "xcpuimpl.h"
-/*
-static Spuser adminuser = {
- .uname = "admin",
- .uid = 0.
-};
-*/
+static Xpnodeerror *errorpool = NULL;
-static Xpnodeerror *errorpool;
-
Xpnode *
xp_node_create(char *name, char *addr, char *arch, char *status, int numjobs)
{
@@ -162,18 +155,17 @@
void
xp_nodeerror_print(char *prog)
{
- Xpnodeerror *ne, *pe;
-
+ Xpnodeerror *ne = NULL, *pe = NULL;
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)
+ if (pe)
free(pe);
}
+ if (pe)
+ free(pe);
}
/*