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()
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
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 ) :
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.)
"""
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 ) :
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 + """
"""
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 ,