Fixed acl.clear() for objects.defaultProcess. Fixed acl.Group._id name.
authorFrédéric Jolliton <git@frederic.jolliton.com>
Sat, 21 Oct 2006 13:43:35 +0000 (13:43 +0000)
committerFrédéric Jolliton <git@frederic.jolliton.com>
Sat, 21 Oct 2006 13:43:35 +0000 (13:43 +0000)
rsbac/acl.py

index 83a6b61..16da26b 100644 (file)
@@ -388,8 +388,14 @@ class AclById( AclBase ) :
         setAclEntryById( self.target , subject , rights , ttl )
     def __delitem__( self , subject ) :
         removeAclEntryById( self.target , subject )
+    # def update( self ) : pass
     def clear( self ) :
-        removeAclById( self.target )
+        # FIXME: temporary solution. Should sys_rsbac_remove_acl
+        # handle T_PROCESS instead?
+        if isinstance( self.target , Process ) :
+            map( self.__delitem__ , self )
+        else :
+            removeAclById( self.target )
 
 class AclByName( AclBase ) :
     def _list( self ) :
@@ -660,11 +666,11 @@ class AclGroupMembersTtlDictProxy( object ) :
 # normally)
 class Group( object ) :
     def __init__( self , id ) :
-        self.id = id
+        self._id = id
         self.members = AclGroupMembersTtlDictProxy( id )
     def __repr__( self ) :
         try :
-            entry = getGroupEntry( self.id )
+            entry = getGroupEntry( self._id )
             assert entry[ 2 ] in ( headers.ACLG_GLOBAL , headers.ACLG_PRIVATE )
             desc = '%r %s' % \
                 ( entry[ 3 ] ,
@@ -673,7 +679,7 @@ class Group( object ) :
             if e[ 0 ] != headers.RSBAC_ENOTFOUND :
                 raise
             desc = 'undefined'
-        return '<ACL Group [%d] %s>' % ( self.id , desc )
+        return '<ACL Group [%d] %s>' % ( self._id , desc )
     #
     # members
     #
@@ -682,35 +688,35 @@ class Group( object ) :
     # owner
     #
     def getOwner( self ) :
-        return User( getGroupEntry( self.id )[ 1 ] )
+        return User( getGroupEntry( self._id )[ 1 ] )
     def setOwner( self , value ) :
-        entry = getGroupEntry( self.id )
-        changeGroup( self.id , int( value ) , entry[ 2 ] , entry[ 3 ] )
+        entry = getGroupEntry( self._id )
+        changeGroup( self._id , int( value ) , entry[ 2 ] , entry[ 3 ] )
     owner = property( getOwner , setOwner )
     #
     # private (not really a boolean, but let's say it is)
     #
     def getPrivate( self ) :
-        entry = getGroupEntry( self.id )
+        entry = getGroupEntry( self._id )
         type = entry[ 2 ]
         assert type in ( headers.ACLG_GLOBAL , headers.ACLG_PRIVATE )
         return type == headers.ACLG_PRIVATE
     def setPrivate( self , value ) :
-        entry = getGroupEntry( self.id )
+        entry = getGroupEntry( self._id )
         if value :
             value = headers.ACLG_PRIVATE
         else :
             value = headers.ACLG_GLOBAL
-        changeGroup( self.id , entry[ 1 ] , value , entry[ 3 ] )
+        changeGroup( self._id , entry[ 1 ] , value , entry[ 3 ] )
     private = property( getPrivate , setPrivate )
     #
     # name
     #
     def getName( self ) :
-        return getGroupEntry( self.id )[ 3 ]
+        return getGroupEntry( self._id )[ 3 ]
     def setName( self , value ) :
-        entry = getGroupEntry( self.id )
-        changeGroup( self.id , entry[ 1 ] , entry[ 2 ] , value )
+        entry = getGroupEntry( self._id )
+        changeGroup( self._id , entry[ 1 ] , entry[ 2 ] , value )
     name = property( getName , setName )
 
 class GroupDict( object ) :
@@ -732,7 +738,7 @@ class GroupDict( object ) :
 groups = GroupDict()
 
 from rsbac.rc import Role
-from rsbac.objects import User
+from rsbac.objects import User, Process
 
 # Local Variables:
 # indent-tabs-mode: nil