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

On Nov 4, 2008, at 5:43 PM, Abhishek Kulkarni wrote:


addendum to the patch:

fix ukey_del to delete the users from their respective groups.

Index: xcpufs/xauth.c
===================================================================
--- xcpufs/xauth.c      (revision 723)
+++ xcpufs/xauth.c      (working copy)
@@ -79,6 +79,7 @@
                       return -1;
               }

+               sp_priv_group_adduser(dgrp, user);
               sp_priv_user_setdfltgroup(user, dgrp);
       }

@@ -89,9 +90,13 @@
ukey_del(Spuserpool *up, char *uname)
{
       Spuser *user;
+       int i;

       user = up->uname2user(up, uname);
       if (user) {
+               for(i=0; i < user->ngroups; i++)
+                       sp_priv_group_deluser(user->groups[i], user);
+
               sp_priv_user_del(user);
               sp_user_decref(user);
               return 0;




On Tue, 2008-11-04 at 17:32 -0700, Abhishek Kulkarni wrote:
i noticed ukey_add is not actually adding the user to the group.
it just sets the group name as the default group for the user.
this went unnoticed for a while.

sp_priv_group_del should iterate through all the users and check if any
user belongs to the group being deleted.

Index: xcpufs/xauth.c
===================================================================
--- xcpufs/xauth.c      (revision 723)
+++ xcpufs/xauth.c      (working copy)
@@ -79,6 +79,7 @@
                       return -1;
               }

+               sp_priv_group_adduser(dgrp, user);
               sp_priv_user_setdfltgroup(user, dgrp);
       }

Index: libspfs/pvusers.c
===================================================================
--- libspfs/pvusers.c   (revision 723)
+++ libspfs/pvusers.c   (working copy)
@@ -197,6 +197,7 @@
void
sp_priv_group_del(Spgroup *g)
{
+       int i;
       Spgroup *tg, *pg;
       Spuser *tu;
       Upool *upp;
@@ -213,8 +214,13 @@
       for(tu = upp->users; tu != NULL; tu = tu->next) {
               if(!strcmp("xcpu-admin", tu->uname))
                       continue;
-               sp_werror("%s:%s", EIO, g->gname, Egroupbusy);
-               return;
+
+               for(i = 0; i < tu->ngroups; i++) {
+                       if (tu->groups[i] == g) {
+                               sp_werror("%s:%s", EIO, g->gname,
Egroupbusy);
+                               return;
+                       }
+               }
       }

       if (!pg)

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


Reply via email to