Added _utils.{ttlToTuple,tupleToTtl}. Fixed TTL uses in the rc module.
authorFrédéric Jolliton <git@frederic.jolliton.com>
Sat, 28 Oct 2006 23:33:11 +0000 (23:33 +0000)
committerFrédéric Jolliton <git@frederic.jolliton.com>
Sat, 28 Oct 2006 23:33:11 +0000 (23:33 +0000)
rsbac/_utils.py
rsbac/rc.py

index ad4f497..952ebba 100644 (file)
@@ -211,6 +211,23 @@ def intToTtl( n ) :
         assert n >= 1
         return int( n )
 
+def ttlToTuple( ttl ) :
+    if ttl is False or ttl < 1 :
+        return False , 0
+    elif ttl is True :
+        return True , 0
+    else :
+        return True , ttl
+
+def tupleToTtl( t ) :
+    flag , ttl = t
+    if not flag :
+        return False
+    elif ttl == 0 :
+        return True
+    else :
+        return int( ttl )
+
 #-----------------------------------------------------------------------------
 
 # FIXME: endianess?
index a709296..f7cf9e2 100644 (file)
@@ -43,6 +43,7 @@ from ctypes import byref, c_uint32
 from rsbac import headers, lib, transaction
 from rsbac.errors import Error, raiseIfError
 from rsbac._utils import aptr, slowButCorrectStringAssignation, fetch
+from rsbac._utils import intToTtl, ttlToInt, tupleToTtl, ttlToTuple, unlimitedTtl
 
 # Singletons. Obviously bad for MT. But good for performance..
 g_rcItemValue = headers.rsbac_rc_item_value_t()
@@ -440,7 +441,7 @@ def getRoleTypeCompatibility( role , type ) :
     type -- RC type as either a tuple (target,type) or an Object class
     or instance.
 
-    Return a tuple (RequestVector,ttl).
+    Return a tuple (RequestVector,TTL).
 
     """
     g_rcTargetValue.role = role
@@ -451,7 +452,7 @@ def getRoleTypeCompatibility( role , type ) :
                                          g_rcTargetValueRef , g_rcTargetValue2Ref ,
                                          item , g_rcItemValueRef ,
                                          g_ttlRef ) )
-    return RequestVector( g_rcItemValue.rights ) , g_ttl.value
+    return RequestVector( g_rcItemValue.rights ) , intToTtl( g_ttl.value )
 
 @export
 def setRoleTypeCompatibility( role , type , value ) :
@@ -459,7 +460,7 @@ def setRoleTypeCompatibility( role , type , value ) :
 
     role -- RC role as integer
     type -- RC type
-    value -- A tuple (RequestVector,ttl) or a RequestVector (implying
+    value -- A tuple (RequestVector,TTL) or a RequestVector (implying
     unlimited TTL.)
 
     """
@@ -468,13 +469,13 @@ def setRoleTypeCompatibility( role , type , value ) :
     g_rcTargetValue2.type = type
     item = g_rcCompatibilityTargetToItem[ target ]
     if not isinstance( value , ( tuple , list ) ) :
-        value = ( value , 0 )
+        value = ( value , True )
     rights , ttl = value
     g_rcItemValue.rights = int( rights )
     raiseIfError( lib.rsbac_rc_set_item( transaction._t , headers.RT_ROLE ,
                                          g_rcTargetValueRef , g_rcTargetValue2Ref ,
                                          item , g_rcItemValueRef ,
-                                         ttl ) )
+                                         ttlToInt( ttl ) ) )
 
 @export
 def getRoleDefaultIndividualFdCreateType( role , type ) :
@@ -630,12 +631,12 @@ def makeGetSetRoles( name , item , docGet = None , docSet = None ) :
     import sys
     RT_ROLE = headers.RT_ROLE
     def get( roleA , roleB ) :
-        g_rcTargetValue.role = roleA
-        g_rcTargetValue2.role = roleB
+        g_rcTargetValue.role = int( roleA )
+        g_rcTargetValue2.role = int( roleB )
         raiseIfError( lib.rsbac_rc_get_item( transaction._t , RT_ROLE ,
                                              g_rcTargetValueRef , g_rcTargetValue2Ref ,
                                              item , g_rcItemValueRef , g_ttlRef ) )
-        return int( g_ttl.value ) or bool( g_rcItemValue.comp )
+        return tupleToTtl( ( g_rcItemValue.comp , g_ttl.value ) )
     if docGet is not None :
         get.__doc__ = docGet + """
 
@@ -644,14 +645,9 @@ def makeGetSetRoles( name , item , docGet = None , docSet = None ) :
 
         """
     def set( roleA , roleB , value ) :
-        g_rcTargetValue.role = roleA
-        g_rcTargetValue2.role = roleB
-        if value is True :
-            flag , ttl = True , 0
-        elif not value or value < 1 :
-            flag , ttl = False , 0
-        else :
-            flag , ttl = True , value
+        g_rcTargetValue.role = int( roleA )
+        g_rcTargetValue2.role = int( roleB )
+        flag , ttl = ttlToTuple( value )
         g_rcItemValue.comp = flag
         raiseIfError( lib.rsbac_rc_set_item( transaction._t , RT_ROLE ,
                                              g_rcTargetValueRef , g_rcTargetValue2Ref ,