Shouldn't xgetent authenticate with "xcpu-admin" a la xgroupset and
xuserset?
I am a little confused but I didn't find it right that you cannot view
the users/groups in the pool after you flush them.
Signed-off-by: Abhishek Kulkarni <[EMAIL PROTECTED]>
Index: utils/xgetent.c
===================================================================
--- utils/xgetent.c (revision 715)
+++ utils/xgetent.c (working copy)
@@ -37,6 +37,7 @@
#include <signal.h>
#include <regex.h>
#include <math.h>
+#include <pwd.h>
#include "spfs.h"
#include "spclient.h"
@@ -46,29 +47,14 @@
#include "xcpu.h"
extern int spc_chatty;
-static Spuser *user;
-static Xkey *ukey;
+static Xkey *adminkey;
+static Spuser adminuser = {
+ .uname = "xcpu-admin",
+ .uid = 65530,
+};
-static int
-init_user(void)
-{
- char *homepath, keypath[128];
-
- user = sp_unix_users->uid2user(sp_unix_users, geteuid());
- if (!user)
- return -1;
-
- homepath = getenv("HOME");
- snprintf(keypath, sizeof(keypath), "%s/.ssh/id_rsa",
homepath);
- ukey = xauth_privkey_create(keypath);
- if (!ukey)
- return -1;
-
- return 0;
-}
-
-void usage() {
- fprintf(stderr, "usage: xgetent [-dap] <passwd|group>
host,...\n");
+void usage(char *name) {
+ fprintf(stderr, "usage: %s [-h] [-A admin_keyfile] [-d] [-p
port] <passwd|group> {-a | nodeset} \n", name);
exit(1);
}
@@ -79,11 +65,11 @@
int n, off, ret, bufsize = 8192;
ret = 0;
- buf = malloc(sizeof(*buf) * bufsize);
- fs = xp_node_mount(node, user, ukey);
+ fs = xp_node_mount(node, &adminuser, adminkey);
if (!fs)
return -1;
+ buf = malloc(sizeof(*buf) * bufsize);
fid = spc_open(fs, "pwent", Oread);
if (!fid) {
free(buf);
@@ -100,7 +86,7 @@
if (n < 0)
ret = -1;
-
+
spc_close(fid);
spc_umount(fs);
free(buf);
@@ -113,11 +99,11 @@
int n, off, ret, bufsize = 8192;
ret = 0;
- buf = malloc(sizeof(*buf) * bufsize);
- fs = xp_node_mount(node, user, ukey);
+ fs = xp_node_mount(node, &adminuser, adminkey);
if (!fs)
return -1;
+ buf = malloc(sizeof(*buf) * bufsize);
fid = spc_open(fs, "grent", Oread);
if (!fid) {
free(buf);
@@ -134,7 +120,7 @@
if (n < 0)
ret = -1;
-
+
spc_close(fid);
spc_umount(fs);
free(buf);
@@ -146,17 +132,22 @@
{
int c, ecode;
int allflag = 0;
- char *ename, db[7];
+ char *ename, db[7], *end;
Xpnodeset *nds, *nds2;
- int port = STAT_PORT;
- char *end;
+ int port = STAT_PORT;
+ struct passwd *pw;
+ char *adminkeyfile = "/etc/xcpu/admin_key";
- while ((c = getopt(argc, argv, "+dap:")) != -1) {
+ while ((c = getopt(argc, argv, "+dA:ap:h")) != -1) {
switch (c) {
case 'd':
spc_chatty = 1;
break;
+ case 'A':
+ adminkeyfile = strdup(optarg);
+ break;
+
case 'a':
allflag++;
break;
@@ -164,21 +155,34 @@
case 'p':
port = strtol(optarg, &end, 10);
if (*end != '\0')
- usage();
+ usage(argv[0]);
break;
+ case 'h':
default:
- usage();
+ usage(argv[0]);
}
}
if ((!allflag && argc - optind != 2 ) || (allflag && argc - optind !=
1))
- usage();
+ usage(argv[0]);
-
snprintf(db, 7, "%s", argv[optind++]);
if (strcmp("passwd", db) && strcmp("group", db))
- usage();
+ usage(argv[0]);
+ adminkey = xauth_privkey_create(adminkeyfile);
+ if (!adminkey)
+ goto lerror;
+
+ setpwent();
+ while ((pw = getpwent()) != NULL) {
+ if(!strcmp(pw->pw_name, adminuser.uname)) {
+ adminuser.uid = pw->pw_uid;
+ break;
+ }
+ }
+ endpwent();
+
if (allflag) {
char statserver[32];
sprintf(statserver, "localhost!%d", port);
@@ -203,9 +207,6 @@
if (!nds)
goto lerror;
- if (init_user() < 0)
- goto lerror;
-
if (!strcmp("passwd", db)) {
if (xp_nodeset_iterate(nds, read_pwent, NULL) > 0)
goto rerror;