1 file changed, 22 insertions(+), 15 deletions(-)
utils/xgroupset.c |   37 ++++++++++++++++++++++---------------


# HG changeset patch
# User Abhishek Kulkarni <[EMAIL PROTECTED]>
# Date 1226339709 25200
# Node ID 93bad2e749f5322b566e208727c185a457aebff9
# Parent  91ef166ebdf0137351e6db411d3264ea1beb57ac
this patch changes xgroupset such that it now does better input arguments validation.
changed the usage message since we don't support multiple gname gids in a single command.
added -p switch for specifying a different port to connect to.
this patch also changes the way in which the admin key is passed complying to the underlying
changes in the libxcpu group handling functions.

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

diff --git a/utils/xgroupset.c b/utils/xgroupset.c
--- a/utils/xgroupset.c
+++ b/utils/xgroupset.c
@@ -46,13 +46,12 @@
 #include "xcpu.h"
 
 extern int spc_chatty;
-static Xkey *adminkey;
 
 void
 usage(char *name)
 {
-	fprintf(stderr, "usage: %s [-h] add [-A adminkey] {-a | nodeset} {-u | gname gid [gname gid ...]}\n", name);
-	fprintf(stderr, "       %s [-h] delete [-A adminkey] {-a | nodeset} {-u | gname [gname ...]}\n", name);
+	fprintf(stderr, "usage: %s [-h] add [-A adminkey] {-a | nodeset} {-u | gname gid}\n", name);
+	fprintf(stderr, "       %s [-h] delete [-A adminkey] {-a | nodeset} {-u | gname}\n", name);
 	fprintf(stderr, "       %s [-h] flush [-A adminkey] {-a | nodeset}\n", name);
 	exit(1);
 }
@@ -60,22 +59,22 @@
 int
 main(int argc, char **argv)
 {
-	int c, ecode;
+	int c, ecode, port = STAT_PORT;
 	char cmd[7];
 	u32 gid;
 	char *nodeset, *ename, *groupname;
-	char *adminkeyfile = "/etc/xcpu/admin_key";
+	char *adminkey = NULL, *end;
 	Xpnodeset *nds, *nds2;
 	int allflag = 0, groupfile = 0;
 	struct group *gr;
 
-	while((c = getopt(argc, argv, "aA:dhu")) != -1) {
+	while((c = getopt(argc, argv, "aA:dhup")) != -1) {
 		switch(c) {
 		case 'd':
 			spc_chatty = 1;
 			break;
 		case 'A':
-			adminkeyfile = strdup(optarg);
+			adminkey = strdup(optarg);
 			break;
 		case 'a':
 			allflag++;
@@ -83,6 +82,11 @@
 		case 'u':
 			groupfile++;
 			break;
+		case 'p':
+			port = strtol(optarg, &end, 10);
+			if (*end != '\0')
+				usage(argv[0]);
+			break;		       
 		case 'h':
 		default:
 			usage(argv[0]);
@@ -104,12 +108,15 @@
 	else
 		usage(argv[0]);
  
-	if (!allflag && ((nodeset = getenv("NODES")) == NULL))
+	if (!allflag && ((nodeset = getenv("NODES")) == NULL)) {
+		if ((argc - optind) < 1 && !groupfile)
+			usage(argv[0]);
 		nodeset = argv[optind++];
+	}
 
 	if (allflag) {
 		char statserver[32];
-		sprintf(statserver, "localhost!%d", STAT_PORT);
+		sprintf(statserver, "localhost!%d", port);
 		nds = xp_nodeset_list(NULL);
 		if (nds == NULL)
 			nds = xp_nodeset_list(statserver);
@@ -130,10 +137,6 @@
 	if (!nds)
 		goto error;
 
-	adminkey = xauth_privkey_create(adminkeyfile);
-	if (!adminkey)
-		goto error;
-
 	if (!strcmp("flush", cmd)) {
 		if (xp_group_flush(nds, adminkey) < 0)
 			goto error;
@@ -144,9 +147,11 @@
 				xp_group_del(nds, adminkey, gr->gr_name);
 			endgrent();
 		} else {
+			if ((argc - optind) < 1)
+				usage(argv[0]);
 			groupname = argv[optind++];
 			if (xp_group_del(nds, adminkey, groupname) < 0)
-				goto error;
+				return -1;
 		}
 	} else { /* group add */
 		if (groupfile) {
@@ -155,10 +160,12 @@
 				xp_group_add(nds, adminkey, gr->gr_name, gr->gr_gid);
 			endgrent();
 		} else {
+			if ((argc - optind) < 2)
+				usage(argv[0]);
 			groupname = argv[optind++];
 			gid = strtol(argv[optind++], NULL, 10);
 			if (xp_group_add(nds, adminkey, groupname, gid) < 0)
-				goto error;
+				return -1;
 		}
 	}
 	return 0;

Reply via email to