Added functions to ease creation of new network templates.
authorFrédéric Jolliton <git@frederic.jolliton.com>
Sun, 22 Oct 2006 20:21:54 +0000 (20:21 +0000)
committerFrédéric Jolliton <git@frederic.jolliton.com>
Sun, 22 Oct 2006 20:21:54 +0000 (20:21 +0000)
- Renamed newNetworkTemplate to createNetworkTemplate
- Added findUndefinedNetworkTemplate
- Added findUndefinedNetworkTemplates
- Added newNetworkTemplate

rsbac/objects.py

index aa17395..b2e8729 100644 (file)
@@ -761,18 +761,56 @@ def ipv4AndPrefixToInt( s ) :
     return ip , prefix
 
 # Not exported. Included in NetworkTemplate class.
-def newNetworkTemplate( id , name ) :
+def createNetworkTemplate( id , name ) :
     data = headers.rsbac_net_temp_syscall_data_t()
-    data.name = name
+    slowButCorrectStringAssignation( data , 'name' , name )
     raiseIfError( lib.rsbac_net_template( transaction._t ,
                                           headers.NTS_new_template ,
                                           id , byref( data ) ) )
-    nt = NetworkTemplate( id )
-    if nt.name != name :
-        raise RuntimeError , \
-            'error while constructing network template with name %r (got back %r instead)' \
-            % ( name , nt.name )
-    return nt
+    return NetworkTemplate( id )
+
+def findUndefinedNetworkTemplate( start = 1 ) :
+    """Find an undefined network template.
+
+    start -- Minimal Network Template ID to use, as integer.
+
+    Return an integer.
+
+    """
+    data = byref( headers.rsbac_net_temp_syscall_data_t() )
+    fun = lib.rsbac_net_template
+    call = headers.NTS_check_id
+    i = start
+    while fun( transaction._t , call , i , data ) >= 0 :
+        i += 1
+    return i
+
+def findUndefinedNetworkTemplates( n = 1 , start = 1 ) :
+    """Find a set of undefined network template.
+
+    n -- Number of unnnamed types to find.
+    start -- Minimal RC type id to use, as integer.
+
+    Return a list of integers.
+
+    """
+    r = []
+    i = start
+    for j in range( n ) :
+        nt = findUndefinedNetworkTemplate( i )
+        r.append( nt )
+        i = nt + 1
+    return r
+
+def newNetworkTemplate( name , start = 1 ) :
+    """Create a new network template.
+
+    name -- Name for the new network template.
+
+    Return a NetworkTemplate.
+
+    """
+    return createNetworkTemplate( findUndefinedNetworkTemplate( start ) , name )
 
 # Not exported. Included in NetworkTemplate class.
 def copyNetworkTemplate( source , dest ) :
@@ -951,12 +989,12 @@ class NetworkTemplateBase( ObjectWithAttributes ) :
         except Error , e :
             if e[ 0 ] != headers.RSBAC_ENOTFOUND :
                 raise
-            newNetworkTemplate( self.nt , value )
+            self.create( self.nt , value )
     name = property( getName , setName )
     #
     # misc
     #
-    create = staticmethod( newNetworkTemplate )
+    create = staticmethod( createNetworkTemplate )
     def checkId( self ) :
         data = headers.rsbac_net_temp_syscall_data_t()
         return self.__syscall( headers.NTS_check_id , data ).id