Added lib.g_withDebugCall to turn off call debug at runtime.
[py-rsbac] / rsbac / lib.py
1 # -*- coding:utf-8 -*-
2
3 # py-rsbac - RSBAC Python bindings
4 # Copyright (C) 2006  Frederic Jolliton <pyrsbac@tuxee.net>
5
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20 # declareFast allows to skip declarations of arguments or result
21 # types. However, the program expect no error checking defined here.
22 g_withArgTypes       = False
23 g_withResType        = False
24 g_withErrorChecking  = False
25
26 # For debugging purpose. Note that ctypes doesn't check if extra
27 # arguments are passed when calling a function. Thus, we need
28 # argumentChecker wrapper around C functions to ensure we don't pass
29 # more arguments than expected.
30 g_checkArgumentCount = True
31
32 # For debugging purpose. When a function is called, print its name and
33 # all its arguments. Be careful, because it can coredump when printing
34 # non initialized strings. See also g_withDebugCall.
35 g_debug = True
36
37 # This variable can be updated at runtime. If True (and if module was
38 # loaded while g_debug was True) then print information as described
39 # in the comment on the variable g_debug.
40 g_withDebugCall = True
41
42 import sys
43
44 from ctypes import *
45 from rsbac.headers import *
46
47 g_rsbac = CDLL( 'librsbac.so' )
48 # slower, but perhaps more correct:
49 #from ctypes.util import find_library
50 #g_rsbac = CDLL( find_library( 'rsbac' ) )
51
52 def debugVar( var ) :
53     if isinstance( var , ( Structure , Union ) ) :
54         return '%s(%s)' \
55             % ( var.__class__.__name__ ,
56                 ', '.join( [ '%s=%s' % ( name , debugVar( getattr( var , name ) ) )
57                              for name,desc in var._fields_ ] ) )
58     elif "'CArgObject'" in str( type( var ) ) : # ICK! FIXME
59         return '&' + debugVar( var._obj )
60     else :
61         return repr( var )
62
63 def debugCall( f ) :
64     def fun( *args ) :
65         if g_withDebugCall :
66             print '[**] %s(%s) =>' % ( f.__name__ , ', '.join( map( debugVar , args ) ) ) ,
67             sys.stdout.flush()
68         r = f( *args )
69         if g_withDebugCall :
70             print debugVar( r )
71         return r
72     fun.__name__ = '[dbg]' + f.__name__
73     return fun
74
75 def argumentChecker( f , count ) :
76     """Wrapper to check argument count.
77
78     This wrapper checks that the function 'f' is called with exactly
79     'count' arguments.
80
81     f -- function (or any callable)
82     count -- argument count as integer
83
84     Returns the wrapped function.
85
86     """
87     def fun( *args ) :
88         if len( args ) != count :
89             raise TypeError , \
90                 '%s() takes exactly %d argument%s (%d given)' \
91                 % ( f.__name__ , count , ( '' , 's' )[ count != 1 ] , len( args ) )
92         return f( *args )
93     fun.__name__ = '[wrapped]' + f.__name__
94     fun.__doc__ = f.__doc__
95     return fun
96
97 def declareFast( name , res , args = None , errcheck = None ) :
98     if args is None :
99         args = []
100     fun = getattr( g_rsbac , name )
101     if g_withResType :
102         setattr( fun , 'restype' , res )
103     if g_withArgTypes :        
104         setattr( fun , 'argtypes' , args )
105     if g_withErrorChecking and errcheck is not None :
106         setattr( fun , 'errcheck' , errcheck )
107     if g_debug :
108         fun = debugCall( fun )
109     if g_checkArgumentCount and g_withArgTypes :
110         fun = argumentChecker( fun , len( args ) )
111     thisModule = sys.modules[ __name__ ]
112     setattr( thisModule , name , fun )
113
114 def declare( name , res , args = None , errcheck = None ) :
115     if args is None :
116         args = []
117     try :
118         fun = getattr( g_rsbac , name )
119     except AttributeError :
120         # If the function doesn't exist, just store None. It's up to
121         # the user to check for None if he want to know if the
122         # function exist or not before calling it.
123         fun = None
124     else :
125         fun.restype = res
126         fun.argtypes = args
127         if errcheck is not None :
128             fun.errcheck = errcheck
129     if g_debug :
130         fun = debugCall( fun )
131     if g_checkArgumentCount and fun is not None :
132         fun = argumentChecker( fun , len( args ) )
133     thisModule = sys.modules[ __name__ ]
134     setattr( thisModule , name , fun )
135
136 # getname.c
137
138 declare( 'get_request_name' ,
139          c_char_p ,
140          [ c_char_p ,
141            rsbac_adf_request_t ] )
142
143 declare( 'get_request_nr' ,
144          rsbac_adf_request_t ,
145          [ c_char_p ] )
146
147 declare( 'get_result_name' ,
148          c_char_p ,
149          [ c_char_p ,
150            rsbac_adf_req_ret_t ] )
151
152 declare( 'get_result_nr' ,
153          rsbac_adf_req_ret_t ,
154          [ c_char_p ] )
155
156 declare( 'get_attr_module' ,
157          rsbac_switch_target_t ,
158          [ rsbac_attribute_t ] )
159
160 declare( 'get_attribute_name' ,
161          c_char_p ,
162          [ c_char_p ,
163            rsbac_attribute_t ] )
164
165 declare( 'get_attribute_nr' ,
166          rsbac_attribute_t ,
167          [ c_char_p ] )
168
169 declare( 'get_attribute_value_name' ,
170          c_char_p ,
171          [ c_char_p ,
172            rsbac_attribute_t ,
173            POINTER( rsbac_attribute_value_t ) ] )
174
175 declare( 'get_scd_type_name' ,
176          c_char_p ,
177          [ c_char_p ,
178            rsbac_scd_type_t ] )
179
180 declare( 'get_scd_type_nr' ,
181          rsbac_scd_type_t ,
182          [ c_char_p ] )
183
184 declare( 'get_target_name' ,
185          c_char_p ,
186          [ c_char_p ,
187            rsbac_target_t ,
188            c_char_p ,
189            rsbac_target_id_t ] )
190
191 declare( 'get_target_name_only' ,
192          c_char_p ,
193          [ c_char_p ,
194            rsbac_target_t ] )
195
196 declare( 'get_target_nr' ,
197          rsbac_target_t ,
198          [ c_char_p ] )
199
200 declare( 'get_ipc_target_name' ,
201          c_char_p ,
202          [ c_char_p ,
203            rsbac_ipc_type_t ] )
204
205 declare( 'get_ipc_target_nr' ,
206          rsbac_ipc_type_t ,
207          [ c_char_p ] )
208
209 declare( 'get_switch_target_name' ,
210          c_char_p ,
211          [ c_char_p ,
212            rsbac_switch_target_t ] )
213
214 declare( 'get_switch_target_nr' ,
215          rsbac_switch_target_t ,
216          [ c_char_p ] )
217
218 declare( 'get_error_name' ,
219          c_char_p ,
220          [ c_char_p , c_int ] )
221
222 declare( 'get_attribute_param' ,
223          c_char_p ,
224          [ c_char_p ,
225            rsbac_attribute_t ] )
226
227 declare( 'get_log_level_name' ,
228          c_char_p ,
229          [ c_char_p ,
230            rsbac_log_level_t ] )
231
232 declare( 'get_log_level_nr' ,
233          rsbac_log_level_t ,
234          [ c_char_p ] )
235
236 declare( 'get_cap_name' ,
237          c_char_p ,
238          [ c_char_p , c_uint ] )
239
240 declare( 'get_cap_nr' ,
241          c_int ,
242          [ c_char_p ] )
243
244 # rc_getname.c
245
246 declare( 'get_rc_target_name' ,
247          c_char_p ,
248          [ c_char_p ,
249            rsbac_rc_target_t ] )
250
251 declare( 'get_rc_target_nr' ,
252          rsbac_rc_target_t ,
253          [ c_char_p ] )
254
255 declare( 'get_rc_admin_name' ,
256          c_char_p ,
257          [ c_char_p ,
258            rsbac_rc_admin_type_t ] )
259
260 declare( 'get_rc_admin_nr' ,
261          rsbac_rc_admin_type_t ,
262          [ c_char_p ] )
263
264 declare( 'get_rc_scd_type_name' ,
265          c_char_p ,
266          [ c_char_p ,
267            rsbac_rc_scd_type_t ] )
268
269 declare( 'get_rc_scd_type_nr' ,
270          rsbac_rc_scd_type_t ,
271          [ c_char_p ] )
272
273 declare( 'get_rc_item_name' ,
274          c_char_p ,
275          [ c_char_p ,
276            rsbac_rc_item_t ] )
277
278 declare( 'get_rc_item_nr' ,
279          rsbac_rc_item_t ,
280          [ c_char_p ] )
281
282 declare( 'get_rc_item_param' ,
283          c_char_p ,
284          [ c_char_p ,
285            rsbac_rc_item_t ] )
286
287 declare( 'get_rc_special_right_name' ,
288          c_char_p ,
289          [ c_char_p ,
290            rsbac_rc_special_rights_t ] )
291
292 declare( 'get_rc_special_right_nr' ,
293          rsbac_rc_special_rights_t ,
294          [ c_char_p ] )
295
296 # res_getname.c
297
298 declare( 'get_res_name' ,
299          c_char_p ,
300          [ c_char_p , c_uint ] )
301
302 declare( 'get_res_nr' ,
303          c_int ,
304          [ c_char_p ] )
305
306 # syscall_wrapper.c
307
308 declare( 'rsbac_version' , c_int )
309
310 declare( 'rsbac_stats' , c_int )
311
312 declare( 'rsbac_check' , c_int , [ c_int , c_int ] )
313
314 declare( 'rsbac_write' , c_int )
315
316 declareFast( 'rsbac_get_attr_n' ,
317              c_int ,
318              [ rsbac_list_ta_number_t ,
319                rsbac_switch_target_t ,
320                rsbac_target_t ,
321                c_char_p ,
322                rsbac_attribute_t ,
323                POINTER( rsbac_attribute_value_t ) ,
324                c_int ] )
325
326 declareFast( 'rsbac_get_attr' , 
327              c_int ,
328              [ rsbac_list_ta_number_t ,
329                rsbac_switch_target_t ,
330                rsbac_target_t ,
331                POINTER( rsbac_target_id_t ) ,
332                rsbac_attribute_t ,
333                POINTER( rsbac_attribute_value_t ) ,
334                c_int ] )
335
336 declareFast( 'rsbac_set_attr_n' ,
337              c_int ,
338              [ rsbac_list_ta_number_t ,
339                rsbac_switch_target_t ,
340                rsbac_target_t ,
341                c_char_p ,
342                rsbac_attribute_t ,
343                POINTER( rsbac_attribute_value_t ) ,
344                c_int ] )
345
346 declareFast( 'rsbac_set_attr' ,
347              c_int ,
348              [ rsbac_list_ta_number_t ,
349                rsbac_switch_target_t ,
350                rsbac_target_t ,
351                POINTER( rsbac_target_id_t ) ,
352                rsbac_attribute_t ,
353                POINTER( rsbac_attribute_value_t ) ,
354                c_int ] )
355
356 declareFast( 'rsbac_remove_target' ,
357              c_int ,
358              [ rsbac_list_ta_number_t ,
359                rsbac_target_t ,
360                POINTER( rsbac_target_id_t ) ] )
361
362 declareFast( 'rsbac_remove_target_n' ,
363              c_int ,
364              [ rsbac_list_ta_number_t ,
365                rsbac_target_t ,
366                c_char_p ] )
367
368 declare( 'rsbac_net_list_all_netdev' ,
369          c_int ,
370          [ rsbac_list_ta_number_t ,
371            POINTER( rsbac_netdev_id_t ) ,
372            c_ulong ] )
373
374 declare( 'rsbac_net_template' ,
375          c_int ,
376          [ rsbac_list_ta_number_t ,
377            rsbac_net_temp_syscall_t ,
378            rsbac_net_temp_id_t ,
379            POINTER( rsbac_net_temp_syscall_data_t ) ] )
380
381 declare( 'rsbac_net_list_all_template' ,
382          c_int ,
383          [ rsbac_list_ta_number_t ,
384            POINTER( rsbac_net_temp_id_t ) ,
385            c_ulong ] )
386
387 declare( 'rsbac_switch' ,
388          c_int ,
389          [ rsbac_switch_target_t , c_int ] )
390
391 declare( 'rsbac_get_switch' ,
392          c_int ,
393          [ rsbac_switch_target_t ,
394            POINTER( c_int ) ,
395            POINTER( c_int ) ] )
396
397 # MAC
398
399 # PM
400
401 # DAZ
402
403 declare( 'rsbac_daz_flush_cache' , c_int )
404
405 # RC
406
407 declare( 'rsbac_rc_copy_role' ,
408          c_int ,
409          [ rsbac_list_ta_number_t ,
410            rsbac_rc_role_id_t ,
411            rsbac_rc_role_id_t ] )
412
413 declare( 'rsbac_rc_copy_type' ,
414          c_int ,
415          [ rsbac_list_ta_number_t ,
416            rsbac_target_t ,
417            rsbac_rc_type_id_t ,
418            rsbac_rc_type_id_t ] )
419
420 declare( 'rsbac_rc_get_item' ,
421          c_int ,
422          [ rsbac_list_ta_number_t ,
423            rsbac_rc_target_t ,
424            POINTER( rsbac_rc_target_id_t ) ,
425            POINTER( rsbac_rc_target_id_t ) ,
426            rsbac_rc_item_t ,
427            POINTER( rsbac_rc_item_value_t ) ,
428            POINTER( rsbac_time_t ) ] )
429
430 declare( 'rsbac_rc_set_item' ,
431          c_int ,
432          [ rsbac_list_ta_number_t ,
433            rsbac_rc_target_t ,
434            POINTER( rsbac_rc_target_id_t ) ,
435            POINTER( rsbac_rc_target_id_t ) ,
436            rsbac_rc_item_t ,
437            POINTER( rsbac_rc_item_value_t ) ,
438            rsbac_time_t ] )
439
440 declare( 'rsbac_rc_get_list' ,
441          c_int ,
442          [ rsbac_list_ta_number_t ,
443            rsbac_rc_target_t ,
444            POINTER( rsbac_rc_target_id_t ) ,
445            rsbac_rc_item_t ,
446            c_uint ,
447            POINTER( c_uint32 ) ,
448            POINTER( rsbac_time_t ) ] )
449
450 declare( 'rsbac_rc_change_role' ,
451          c_int ,
452          [ rsbac_rc_role_id_t ,
453            c_char_p ] )
454
455 declare( 'rsbac_rc_get_eff_rights_n' ,
456          c_int ,
457          [ rsbac_list_ta_number_t ,
458            rsbac_target_t ,
459            c_char_p ,
460            POINTER( rsbac_rc_request_vector_t ) ,
461            POINTER( rsbac_time_t ) ] )
462
463 declare( 'rsbac_rc_get_current_role' ,
464          c_int ,
465          [ POINTER( rsbac_rc_role_id_t ) ] )
466
467 declare( 'rsbac_rc_select_fd_create_type' ,
468          c_int ,
469          [ rsbac_rc_type_id_t ] )
470
471 # AUTH
472
473 declare( 'rsbac_auth_add_p_cap' ,
474          c_int ,
475          [ rsbac_list_ta_number_t ,
476            rsbac_pid_t ,
477            rsbac_auth_cap_type_t ,
478            rsbac_auth_cap_range_t ,
479            rsbac_time_t ] )
480
481 declare( 'rsbac_auth_remove_p_cap' ,
482          c_int ,
483          [ rsbac_list_ta_number_t ,
484            rsbac_pid_t ,
485            rsbac_auth_cap_type_t ,
486            rsbac_auth_cap_range_t ] )
487
488 declare( 'rsbac_auth_add_f_cap' ,
489          c_int ,
490          [ rsbac_list_ta_number_t ,
491            c_char_p ,
492            rsbac_auth_cap_type_t ,
493            rsbac_auth_cap_range_t ,
494            rsbac_time_t ] )
495
496 declare( 'rsbac_auth_remove_f_cap' ,
497          c_int ,
498          [ rsbac_list_ta_number_t ,
499            c_char_p ,
500            rsbac_auth_cap_type_t ,
501            rsbac_auth_cap_range_t ] )
502
503 declare( 'rsbac_auth_get_f_caplist' ,
504          c_int ,
505          [ rsbac_list_ta_number_t ,
506            c_char_p ,
507            rsbac_auth_cap_type_t ,
508            POINTER( rsbac_auth_cap_range_t ) ,
509            POINTER( rsbac_time_t ) ,
510            c_uint ] )
511
512 declare( 'rsbac_auth_get_p_caplist' ,
513          c_int ,
514          [ rsbac_list_ta_number_t ,
515            rsbac_pid_t ,
516            rsbac_auth_cap_type_t ,
517            POINTER( rsbac_auth_cap_range_t ) ,
518            POINTER( rsbac_time_t ) ,
519            c_uint ] )
520
521 # REG
522
523 declare( 'rsbac_reg' ,
524          c_int ,
525          [ rsbac_reg_handle_t , c_void_p ] )
526
527 # ACL
528
529 declare( 'rsbac_acl' ,
530          c_int ,
531          [ rsbac_list_ta_number_t ,
532            rsbac_acl_syscall_type_t ,
533            POINTER( rsbac_acl_syscall_arg_t ) ] )
534
535 declare( 'rsbac_acl_n' ,
536          c_int ,
537          [ rsbac_list_ta_number_t ,
538            rsbac_acl_syscall_type_t ,
539            POINTER( rsbac_acl_syscall_n_arg_t ) ] )
540
541 declare( 'rsbac_acl_get_rights' ,
542          c_int ,
543          [ rsbac_list_ta_number_t ,
544            POINTER( rsbac_acl_syscall_arg_t ) ,
545            POINTER( rsbac_acl_rights_vector_t ) ,
546            c_uint ] )
547
548 declare( 'rsbac_acl_get_rights_n' ,
549          c_int ,
550          [ rsbac_list_ta_number_t ,
551            POINTER( rsbac_acl_syscall_n_arg_t ) ,
552            POINTER( rsbac_acl_rights_vector_t ) ,
553            c_uint ] )
554
555 declare( 'rsbac_acl_get_tlist' ,
556          c_int ,
557          [ rsbac_list_ta_number_t ,
558            rsbac_target_t ,
559            POINTER( rsbac_target_id_t ) ,
560            POINTER( rsbac_acl_entry_t ) ,
561            POINTER( rsbac_time_t ) ,
562            c_int ] )
563
564 declare( 'rsbac_acl_get_tlist_n' ,
565          c_int ,
566          [ rsbac_list_ta_number_t ,
567            rsbac_target_t ,
568            c_char_p ,
569            POINTER( rsbac_acl_entry_t ) ,
570            POINTER( rsbac_time_t ) ,
571            c_int ] )
572
573 declare( 'rsbac_acl_get_mask' ,
574          c_int ,
575          [ rsbac_ta_number_t ,
576            rsbac_target_t ,
577            POINTER( rsbac_target_id_t ) ,
578            POINTER( rsbac_acl_rights_vector_t ) ] )
579
580 declare( 'rsbac_acl_get_mask_n' ,
581          c_int ,
582          [ rsbac_ta_number_t ,
583            rsbac_target_t ,
584            c_char_p ,
585            POINTER( rsbac_acl_rights_vector_t ) ] )
586
587 declare( 'rsbac_acl_group' ,
588          c_int ,
589          [ rsbac_ta_number_t ,
590            rsbac_acl_group_syscall_type_t ,
591            POINTER( rsbac_acl_group_syscall_arg_t ) ] )
592
593 # JAIL
594
595 declare( 'rsbac_jail' ,
596          c_int ,
597          [ rsbac_version_t ,
598            c_char_p ,
599            rsbac_jail_ip_t ,
600            rsbac_jail_flags_t ,
601            rsbac_cap_vector_t ,
602            rsbac_jail_scd_vector_t ,
603            rsbac_jail_scd_vector_t ] )
604
605 # UM
606
607 declare( 'rsbac_um_auth_name' ,
608          c_int ,
609          [ c_char_p , c_char_p ] )
610
611 declare( 'rsbac_um_auth_uid' ,
612          c_int ,
613          [ rsbac_uid_t , c_char_p ] )
614
615 declare( 'rsbac_um_add_user' ,
616          c_int ,
617          [ rsbac_list_ta_number_t ,
618            rsbac_uid_t ,
619            POINTER( rsbac_um_user_entry_t ) ,
620            c_char_p ,
621            rsbac_time_t ] )
622
623 declare( 'rsbac_um_add_group' ,
624          c_int ,
625          [ rsbac_list_ta_number_t ,
626            rsbac_gid_t ,
627            POINTER( rsbac_um_group_entry_t ) ,
628            c_char_p ,
629            rsbac_time_t ] )
630
631 declare( 'rsbac_um_add_gm' ,
632          c_int ,
633          [ rsbac_list_ta_number_t ,
634            rsbac_uid_t ,
635            rsbac_gid_t ,
636            rsbac_time_t ] )
637
638 declare( 'rsbac_um_mod_user' ,
639          c_int ,
640          [ rsbac_list_ta_number_t ,
641            rsbac_uid_t ,
642            rsbac_um_mod_t ,
643            POINTER( rsbac_um_mod_data_t ) ] )
644
645 declare( 'rsbac_um_mod_group' ,
646          c_int ,
647          [ rsbac_list_ta_number_t ,
648            rsbac_gid_t ,
649            rsbac_um_mod_t ,
650            POINTER( rsbac_um_mod_data_t ) ] )
651
652 declare( 'rsbac_um_get_user_item' ,
653          c_int ,
654          [ rsbac_list_ta_number_t ,
655            rsbac_uid_t ,
656            rsbac_um_mod_t ,
657            POINTER( rsbac_um_mod_data_t ) ] )
658
659 declare( 'rsbac_um_get_group_item' ,
660          c_int ,
661          [ rsbac_list_ta_number_t ,
662            rsbac_gid_t ,
663            rsbac_um_mod_t ,
664            POINTER( rsbac_um_mod_data_t ) ] )
665
666 declare( 'rsbac_um_remove_user' ,
667          c_int ,
668          [ rsbac_list_ta_number_t ,
669            rsbac_uid_t ] )
670
671 declare( 'rsbac_um_remove_group' ,
672          c_int ,
673          [ rsbac_list_ta_number_t ,
674            rsbac_gid_t ] )
675
676 declare( 'rsbac_um_remove_gm' ,
677          c_int ,
678          [ rsbac_uid_t , rsbac_gid_t ] )
679
680 declare( 'rsbac_um_user_exists' ,
681          c_int ,
682          [ rsbac_list_ta_number_t ,
683            rsbac_uid_t ] )
684
685 declare( 'rsbac_um_group_exists' ,
686          c_int ,
687          [ rsbac_list_ta_number_t ,
688            rsbac_gid_t ] )
689
690 declare( 'rsbac_um_get_next_user' ,
691          c_int ,
692          [ rsbac_list_ta_number_t ,
693            rsbac_uid_t ,
694            POINTER( rsbac_uid_t ) ] )
695
696 declare( 'rsbac_um_get_user_list' ,
697          c_int ,
698          [ rsbac_list_ta_number_t ,
699            POINTER( rsbac_uid_t ) ,
700            c_uint ] )
701
702 declare( 'rsbac_um_get_gm_list' ,
703          c_int ,
704          [ rsbac_list_ta_number_t ,
705            rsbac_uid_t ,
706            POINTER( rsbac_gid_t ) ,
707            c_uint ] )
708
709 declare( 'rsbac_um_get_gm_user_list' ,
710          c_int ,
711          [ rsbac_list_ta_number_t ,
712            rsbac_gid_t ,
713            POINTER( rsbac_uid_t ) ,
714            c_uint ] )
715
716 declare( 'rsbac_um_get_group_list' ,
717          c_int ,
718          [ rsbac_list_ta_number_t ,
719            POINTER( rsbac_gid_t ) ,
720            c_uint ] )
721
722 declare( 'rsbac_um_get_uid' ,
723          c_int ,
724          [ rsbac_list_ta_number_t ,
725            c_char_p ,
726            POINTER( rsbac_uid_t ) ] )
727
728 declare( 'rsbac_um_get_gid' ,
729          c_int ,
730          [ rsbac_list_ta_number_t ,
731            c_char_p ,
732            POINTER( rsbac_gid_t ) ] )
733
734 declare( 'rsbac_um_set_pass' ,
735          c_int ,
736          [ rsbac_uid_t ,
737            c_char_p ,
738            c_char_p ] )
739
740 declare( 'rsbac_um_set_pass_name' ,
741          c_int ,
742          [ c_char_p ,
743            c_char_p ,
744            c_char_p ] )
745
746 declare( 'rsbac_um_set_group_pass' ,
747          c_int ,
748          [ rsbac_gid_t ,
749            c_char_p ] )
750
751 declare( 'rsbac_um_check_account' ,
752          c_int ,
753          [ rsbac_uid_t ] )
754
755 declare( 'rsbac_um_check_account_name' ,
756          c_int ,
757          [ c_char_p ] )
758
759 # Transaction
760
761 declare( 'rsbac_list_ta_begin' ,
762          c_int ,
763          [ rsbac_time_t ,
764            POINTER( rsbac_list_ta_number_t ) ,
765            rsbac_uid_t ,
766            c_char_p ] )
767
768 declare( 'rsbac_list_ta_refresh' ,
769          c_int ,
770          [ rsbac_time_t ,
771            rsbac_list_ta_number_t ,
772            c_char_p ] )
773
774 declare( 'rsbac_list_ta_commit' ,
775          c_int ,
776          [ rsbac_list_ta_number_t ,
777            c_char_p ] )
778
779 declare( 'rsbac_list_ta_forget' ,
780          c_int ,
781          [ rsbac_list_ta_number_t ,
782            c_char_p ] )
783
784 # Misc
785
786 declare( 'rsbac_list_all_dev' ,
787          c_int ,
788          [ rsbac_list_ta_number_t ,
789            POINTER( rsbac_dev_desc_t ) ,
790            c_ulong ] )
791
792 # rsbac_acl_list_all_dev
793
794 declare( 'rsbac_list_all_user' ,
795          c_int ,
796          [ rsbac_list_ta_number_t ,
797            POINTER( rsbac_uid_t ) ,
798            c_ulong ] )
799
800 # rsbac_acl_list_all_user
801
802 declare( 'rsbac_list_all_group' ,
803          c_int ,
804          [ rsbac_list_ta_number_t ,
805            POINTER( rsbac_gid_t ) ,
806            c_ulong ] )
807
808 # rsbac_acl_list_all_group
809
810 # rsbac_list_all_ipc
811
812 # DEBUG/LOG
813
814 declare( 'rsbac_adf_log_switch' ,
815          c_int ,
816          [ rsbac_adf_request_t ,
817            rsbac_target_t ,
818            c_uint ] )
819
820 declare( 'rsbac_get_adf_log' ,
821          c_int ,
822          [ rsbac_adf_request_t ,
823            rsbac_target_t ,
824            POINTER( c_uint ) ] )
825
826 declare( 'rsbac_log' ,
827          c_int ,
828          [ c_int ,
829            c_char_p ,
830            c_int ] )
831
832 declare( 'rsbac_init' ,
833          c_int ,
834          [ c_char_p ] )
835
836 # Local Variables:
837 # indent-tabs-mode: nil
838 # python-indent: 4
839 # End: