2 files changed, 48 insertions(+)
xcpufs/xauth.c  |   46 ++++++++++++++++++++++++++++++++++++++++++++++
xcpufs/xcpufs.h |    2 ++


# HG changeset patch
# User Abhishek Kulkarni <[EMAIL PROTECTED]>
# Date 1226339580 25200
# Node ID 91ef166ebdf0137351e6db411d3264ea1beb57ac
# Parent  d6b08e79957d265e08d9d75a2ddc8b1d66444745
added ukey_add_group and ukey_del_group functions to add or delete groups to users.
users can now be assigned to the xcpu-admin group so that they can write to the 'ctl' file
to perform user/group operations.

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

diff --git a/xcpufs/xauth.c b/xcpufs/xauth.c
--- a/xcpufs/xauth.c
+++ b/xcpufs/xauth.c
@@ -126,6 +126,52 @@
 		}
 	}
 	return 0;
+}
+
+int
+ukey_add_group(Spuserpool *up, char *uname, char *gname)
+{
+	Spuser *user;
+	Spgroup *group;
+
+	user = up->uname2user(up, uname);
+	if (!user) {
+		sp_werror("%s: no such user in userpool", EIO, uname);
+		return -1;
+	}
+
+	group = up->gname2group(up, gname);
+	if (!group) {
+		sp_werror("%s: no such group in userpool", EIO, gname);
+		return -1;
+	}
+	return sp_priv_group_adduser(group, user);
+}
+
+int
+ukey_del_group(Spuserpool *up, char *uname, char *gname)
+{
+	Spuser *user;
+	Spgroup *group;
+
+	user = up->uname2user(up, uname);
+	if (!user) {
+		sp_werror("%s: no such user in userpool", EIO, uname);
+		return -1;
+	}
+
+	group = up->gname2group(up, gname);
+	if (!group) {
+		sp_werror("%s: no such group in userpool", EIO, gname);
+		return -1;
+	}
+
+	if (!user->upool->ismember(user->upool, user, group)) {
+		sp_werror("user %s not a member of group %s", EIO,
+			  uname, gname);
+		return -1;
+	}		
+	return sp_priv_group_deluser(group, user);
 }
 
 int
diff --git a/xcpufs/xcpufs.h b/xcpufs/xcpufs.h
--- a/xcpufs/xcpufs.h
+++ b/xcpufs/xcpufs.h
@@ -212,6 +212,8 @@
 	char *key, int keylen);
 int ukey_del(Spuserpool *up, char *uname);
 int ukey_flush(Spuserpool *up);
+int ukey_add_group(Spuserpool *up, char *uname, char *gname);
+int ukey_del_group(Spuserpool *up, char *uname, char *gname);
 int pkey_gen(Spuser *user, char *buf, int buflen);
 int group_add(Spuserpool *up, char *groupname, u32 gid);
 int group_del(Spuserpool *up, char *groupname);

Reply via email to