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);