Acked-by: Latchesar Ionkov <[EMAIL PROTECTED]>

On Nov 10, 2008, at 11:10 AM, Abhishek Kulkarni wrote:

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