Added acl.grant and acl.revoke functions.
[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 = False
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 # helpers.c
137
138 declare( 'rsbac_lib_version' , c_int )  # >=1.3.1pre1
139
140 # getname.c
141
142 declare( 'get_request_name' ,
143          c_char_p ,
144          [ c_char_p ,
145            rsbac_adf_request_t ] )
146
147 declare( 'get_request_nr' ,
148          rsbac_adf_request_t ,
149          [ c_char_p ] )
150
151 declare( 'get_result_name' ,
152          c_char_p ,
153          [ c_char_p ,
154            rsbac_adf_req_ret_t ] )
155
156 declare( 'get_result_nr' ,
157          rsbac_adf_req_ret_t ,
158          [ c_char_p ] )
159
160 declare( 'get_attr_module' ,
161          rsbac_switch_target_t ,
162          [ rsbac_attribute_t ] )
163
164 declare( 'get_attribute_name' ,
165          c_char_p ,
166          [ c_char_p ,
167            rsbac_attribute_t ] )
168
169 declare( 'get_attribute_nr' ,
170          rsbac_attribute_t ,
171          [ c_char_p ] )
172
173 declare( 'get_attribute_value_name' ,
174          c_char_p ,
175          [ c_char_p ,
176            rsbac_attribute_t ,
177            POINTER( rsbac_attribute_value_t ) ] )
178
179 declare( 'get_scd_type_name' ,
180          c_char_p ,
181          [ c_char_p ,
182            rsbac_scd_type_t ] )
183
184 declare( 'get_scd_type_nr' ,
185          rsbac_scd_type_t ,
186          [ c_char_p ] )
187
188 declare( 'get_target_name' ,
189          c_char_p ,
190          [ c_char_p ,
191            rsbac_target_t ,
192            c_char_p ,
193            rsbac_target_id_t ] )
194
195 declare( 'get_target_name_only' ,
196          c_char_p ,
197          [ c_char_p ,
198            rsbac_target_t ] )
199
200 declare( 'get_target_nr' ,
201          rsbac_target_t ,
202          [ c_char_p ] )
203
204 declare( 'get_ipc_target_name' ,
205          c_char_p ,
206          [ c_char_p ,
207            rsbac_ipc_type_t ] )
208
209 declare( 'get_ipc_target_nr' ,
210          rsbac_ipc_type_t ,
211          [ c_char_p ] )
212
213 declare( 'get_switch_target_name' ,
214          c_char_p ,
215          [ c_char_p ,
216            rsbac_switch_target_t ] )
217
218 declare( 'get_switch_target_nr' ,
219          rsbac_switch_target_t ,
220          [ c_char_p ] )
221
222 declare( 'get_error_name' ,
223          c_char_p ,
224          [ c_char_p , c_int ] )
225
226 declare( 'get_attribute_param' ,
227          c_char_p ,
228          [ c_char_p ,
229            rsbac_attribute_t ] )
230
231 declare( 'get_log_level_name' ,
232          c_char_p ,
233          [ c_char_p ,
234            rsbac_log_level_t ] )
235
236 declare( 'get_log_level_nr' ,
237          rsbac_log_level_t ,
238          [ c_char_p ] )
239
240 declare( 'get_cap_name' ,
241          c_char_p ,
242          [ c_char_p , c_uint ] )
243
244 declare( 'get_cap_nr' ,
245          c_int ,
246          [ c_char_p ] )
247
248 # rc_getname.c
249
250 declare( 'get_rc_target_name' ,
251          c_char_p ,
252          [ c_char_p ,
253            rsbac_rc_target_t ] )
254
255 declare( 'get_rc_target_nr' ,
256          rsbac_rc_target_t ,
257          [ c_char_p ] )
258
259 declare( 'get_rc_admin_name' ,
260          c_char_p ,
261          [ c_char_p ,
262            rsbac_rc_admin_type_t ] )
263
264 declare( 'get_rc_admin_nr' ,
265          rsbac_rc_admin_type_t ,
266          [ c_char_p ] )
267
268 declare( 'get_rc_scd_type_name' ,
269          c_char_p ,
270          [ c_char_p ,
271            rsbac_rc_scd_type_t ] )
272
273 declare( 'get_rc_scd_type_nr' ,
274          rsbac_rc_scd_type_t ,
275          [ c_char_p ] )
276
277 declare( 'get_rc_item_name' ,
278          c_char_p ,
279          [ c_char_p ,
280            rsbac_rc_item_t ] )
281
282 declare( 'get_rc_item_nr' ,
283          rsbac_rc_item_t ,
284          [ c_char_p ] )
285
286 declare( 'get_rc_item_param' ,
287          c_char_p ,
288          [ c_char_p ,
289            rsbac_rc_item_t ] )
290
291 declare( 'get_rc_special_right_name' ,
292          c_char_p ,
293          [ c_char_p ,
294            rsbac_rc_special_rights_t ] )
295
296 declare( 'get_rc_special_right_nr' ,
297          rsbac_rc_special_rights_t ,
298          [ c_char_p ] )
299
300 # res_getname.c
301
302 declare( 'get_res_name' ,
303          c_char_p ,
304          [ c_char_p , c_uint ] )
305
306 declare( 'get_res_nr' ,
307          c_int ,
308          [ c_char_p ] )
309
310 # syscall_wrapper.c
311
312 declare( 'rsbac_version' , c_int )
313
314 declare( 'rsbac_stats' , c_int )
315
316 declare( 'rsbac_check' , c_int , [ c_int , c_int ] )
317
318 declare( 'rsbac_write' , c_int )
319
320 declareFast( 'rsbac_get_attr_n' ,
321              c_int ,
322              [ rsbac_list_ta_number_t ,
323                rsbac_switch_target_t ,
324                rsbac_target_t ,
325                c_char_p ,
326                rsbac_attribute_t ,
327                POINTER( rsbac_attribute_value_t ) ,
328                c_int ] )
329
330 declareFast( 'rsbac_get_attr' , 
331              c_int ,
332              [ rsbac_list_ta_number_t ,
333                rsbac_switch_target_t ,
334                rsbac_target_t ,
335                POINTER( rsbac_target_id_t ) ,
336                rsbac_attribute_t ,
337                POINTER( rsbac_attribute_value_t ) ,
338                c_int ] )
339
340 declareFast( 'rsbac_set_attr_n' ,
341              c_int ,
342              [ rsbac_list_ta_number_t ,
343                rsbac_switch_target_t ,
344                rsbac_target_t ,
345                c_char_p ,
346                rsbac_attribute_t ,
347                POINTER( rsbac_attribute_value_t ) ,
348                c_int ] )
349
350 declareFast( 'rsbac_set_attr' ,
351              c_int ,
352              [ rsbac_list_ta_number_t ,
353                rsbac_switch_target_t ,
354                rsbac_target_t ,
355                POINTER( rsbac_target_id_t ) ,
356                rsbac_attribute_t ,
357                POINTER( rsbac_attribute_value_t ) ,
358                c_int ] )
359
360 declareFast( 'rsbac_remove_target' ,
361              c_int ,
362              [ rsbac_list_ta_number_t ,
363                rsbac_target_t ,
364                POINTER( rsbac_target_id_t ) ] )
365
366 declareFast( 'rsbac_remove_target_n' ,
367              c_int ,
368              [ rsbac_list_ta_number_t ,
369                rsbac_target_t ,
370                c_char_p ] )
371
372 declare( 'rsbac_net_list_all_netdev' ,
373          c_int ,
374          [ rsbac_list_ta_number_t ,
375            POINTER( rsbac_netdev_id_t ) ,
376            c_ulong ] )
377
378 declare( 'rsbac_net_template' ,
379          c_int ,
380          [ rsbac_list_ta_number_t ,
381            rsbac_net_temp_syscall_t ,
382            rsbac_net_temp_id_t ,
383            POINTER( rsbac_net_temp_syscall_data_t ) ] )
384
385 declare( 'rsbac_net_list_all_template' ,
386          c_int ,
387          [ rsbac_list_ta_number_t ,
388            POINTER( rsbac_net_temp_id_t ) ,
389            c_ulong ] )
390
391 declare( 'rsbac_switch' ,
392          c_int ,
393          [ rsbac_switch_target_t , c_int ] )
394
395 declare( 'rsbac_get_switch' ,
396          c_int ,
397          [ rsbac_switch_target_t ,
398            POINTER( c_int ) ,
399            POINTER( c_int ) ] )
400
401 # MAC
402
403 # PM
404
405 # DAZ
406
407 declare( 'rsbac_daz_flush_cache' , c_int )
408
409 # RC
410
411 declare( 'rsbac_rc_copy_role' ,
412          c_int ,
413          [ rsbac_list_ta_number_t ,
414            rsbac_rc_role_id_t ,
415            rsbac_rc_role_id_t ] )
416
417 declare( 'rsbac_rc_copy_type' ,
418          c_int ,
419          [ rsbac_list_ta_number_t ,
420            rsbac_target_t ,
421            rsbac_rc_type_id_t ,
422            rsbac_rc_type_id_t ] )
423
424 declare( 'rsbac_rc_get_item' ,
425          c_int ,
426          [ rsbac_list_ta_number_t ,
427            rsbac_rc_target_t ,
428            POINTER( rsbac_rc_target_id_t ) ,
429            POINTER( rsbac_rc_target_id_t ) ,
430            rsbac_rc_item_t ,
431            POINTER( rsbac_rc_item_value_t ) ,
432            POINTER( rsbac_time_t ) ] )
433
434 declare( 'rsbac_rc_set_item' ,
435          c_int ,
436          [ rsbac_list_ta_number_t ,
437            rsbac_rc_target_t ,
438            POINTER( rsbac_rc_target_id_t ) ,
439            POINTER( rsbac_rc_target_id_t ) ,
440            rsbac_rc_item_t ,
441            POINTER( rsbac_rc_item_value_t ) ,
442            rsbac_time_t ] )
443
444 declare( 'rsbac_rc_get_list' ,
445          c_int ,
446          [ rsbac_list_ta_number_t ,
447            rsbac_rc_target_t ,
448            POINTER( rsbac_rc_target_id_t ) ,
449            rsbac_rc_item_t ,
450            c_uint ,
451            POINTER( c_uint32 ) ,
452            POINTER( rsbac_time_t ) ] )
453
454 declare( 'rsbac_rc_change_role' ,
455          c_int ,
456          [ rsbac_rc_role_id_t ,
457            c_char_p ] )
458
459 declare( 'rsbac_rc_get_eff_rights_n' ,
460          c_int ,
461          [ rsbac_list_ta_number_t ,
462            rsbac_target_t ,
463            c_char_p ,
464            POINTER( rsbac_rc_request_vector_t ) ,
465            POINTER( rsbac_time_t ) ] )
466
467 declare( 'rsbac_rc_get_current_role' ,
468          c_int ,
469          [ POINTER( rsbac_rc_role_id_t ) ] )
470
471 declare( 'rsbac_rc_select_fd_create_type' ,
472          c_int ,
473          [ rsbac_rc_type_id_t ] )
474
475 # AUTH
476
477 declare( 'rsbac_auth_add_p_cap' ,
478          c_int ,
479          [ rsbac_list_ta_number_t ,
480            rsbac_pid_t ,
481            rsbac_auth_cap_type_t ,
482            rsbac_auth_cap_range_t ,
483            rsbac_time_t ] )
484
485 declare( 'rsbac_auth_remove_p_cap' ,
486          c_int ,
487          [ rsbac_list_ta_number_t ,
488            rsbac_pid_t ,
489            rsbac_auth_cap_type_t ,
490            rsbac_auth_cap_range_t ] )
491
492 declare( 'rsbac_auth_add_f_cap' ,
493          c_int ,
494          [ rsbac_list_ta_number_t ,
495            c_char_p ,
496            rsbac_auth_cap_type_t ,
497            rsbac_auth_cap_range_t ,
498            rsbac_time_t ] )
499
500 declare( 'rsbac_auth_remove_f_cap' ,
501          c_int ,
502          [ rsbac_list_ta_number_t ,
503            c_char_p ,
504            rsbac_auth_cap_type_t ,
505            rsbac_auth_cap_range_t ] )
506
507 declare( 'rsbac_auth_get_f_caplist' ,
508          c_int ,
509          [ rsbac_list_ta_number_t ,
510            c_char_p ,
511            rsbac_auth_cap_type_t ,
512            POINTER( rsbac_auth_cap_range_t ) ,
513            POINTER( rsbac_time_t ) ,
514            c_uint ] )
515
516 declare( 'rsbac_auth_get_p_caplist' ,
517          c_int ,
518          [ rsbac_list_ta_number_t ,
519            rsbac_pid_t ,
520            rsbac_auth_cap_type_t ,
521            POINTER( rsbac_auth_cap_range_t ) ,
522            POINTER( rsbac_time_t ) ,
523            c_uint ] )
524
525 # REG
526
527 declare( 'rsbac_reg' ,
528          c_int ,
529          [ rsbac_reg_handle_t , c_void_p ] )
530
531 # ACL
532
533 declare( 'rsbac_acl' ,
534          c_int ,
535          [ rsbac_list_ta_number_t ,
536            rsbac_acl_syscall_type_t ,
537            POINTER( rsbac_acl_syscall_arg_t ) ] )
538
539 declare( 'rsbac_acl_n' ,
540          c_int ,
541          [ rsbac_list_ta_number_t ,
542            rsbac_acl_syscall_type_t ,
543            POINTER( rsbac_acl_syscall_n_arg_t ) ] )
544
545 declare( 'rsbac_acl_get_rights' ,
546          c_int ,
547          [ rsbac_list_ta_number_t ,
548            POINTER( rsbac_acl_syscall_arg_t ) ,
549            POINTER( rsbac_acl_rights_vector_t ) ,
550            c_uint ] )
551
552 declare( 'rsbac_acl_get_rights_n' ,
553          c_int ,
554          [ rsbac_list_ta_number_t ,
555            POINTER( rsbac_acl_syscall_n_arg_t ) ,
556            POINTER( rsbac_acl_rights_vector_t ) ,
557            c_uint ] )
558
559 declare( 'rsbac_acl_get_tlist' ,
560          c_int ,
561          [ rsbac_list_ta_number_t ,
562            rsbac_target_t ,
563            POINTER( rsbac_target_id_t ) ,
564            POINTER( rsbac_acl_entry_t ) ,
565            POINTER( rsbac_time_t ) ,
566            c_int ] )
567
568 declare( 'rsbac_acl_get_tlist_n' ,
569          c_int ,
570          [ rsbac_list_ta_number_t ,
571            rsbac_target_t ,
572            c_char_p ,
573            POINTER( rsbac_acl_entry_t ) ,
574            POINTER( rsbac_time_t ) ,
575            c_int ] )
576
577 declare( 'rsbac_acl_get_mask' ,
578          c_int ,
579          [ rsbac_ta_number_t ,
580            rsbac_target_t ,
581            POINTER( rsbac_target_id_t ) ,
582            POINTER( rsbac_acl_rights_vector_t ) ] )
583
584 declare( 'rsbac_acl_get_mask_n' ,
585          c_int ,
586          [ rsbac_ta_number_t ,
587            rsbac_target_t ,
588            c_char_p ,
589            POINTER( rsbac_acl_rights_vector_t ) ] )
590
591 declare( 'rsbac_acl_group' ,
592          c_int ,
593          [ rsbac_ta_number_t ,
594            rsbac_acl_group_syscall_type_t ,
595            POINTER( rsbac_acl_group_syscall_arg_t ) ] )
596
597 # JAIL
598
599 declare( 'rsbac_jail' ,
600          c_int ,
601          [ rsbac_version_t ,
602            c_char_p ,
603            rsbac_jail_ip_t ,
604            rsbac_jail_flags_t ,
605            rsbac_cap_vector_t ,
606            rsbac_jail_scd_vector_t ,
607            rsbac_jail_scd_vector_t ] )
608
609 # UM
610
611 declare( 'rsbac_um_auth_name' ,
612          c_int ,
613          [ c_char_p , c_char_p ] )
614
615 declare( 'rsbac_um_auth_uid' ,
616          c_int ,
617          [ rsbac_uid_t , c_char_p ] )
618
619 declare( 'rsbac_um_add_user' ,
620          c_int ,
621          [ rsbac_list_ta_number_t ,
622            rsbac_uid_t ,
623            POINTER( rsbac_um_user_entry_t ) ,
624            c_char_p ,
625            rsbac_time_t ] )
626
627 declare( 'rsbac_um_add_group' ,
628          c_int ,
629          [ rsbac_list_ta_number_t ,
630            rsbac_gid_t ,
631            POINTER( rsbac_um_group_entry_t ) ,
632            c_char_p ,
633            rsbac_time_t ] )
634
635 declare( 'rsbac_um_add_gm' ,
636          c_int ,
637          [ rsbac_list_ta_number_t ,
638            rsbac_uid_t ,
639            rsbac_gid_t ,
640            rsbac_time_t ] )
641
642 declare( 'rsbac_um_mod_user' ,
643          c_int ,
644          [ rsbac_list_ta_number_t ,
645            rsbac_uid_t ,
646            rsbac_um_mod_t ,
647            POINTER( rsbac_um_mod_data_t ) ] )
648
649 declare( 'rsbac_um_mod_group' ,
650          c_int ,
651          [ rsbac_list_ta_number_t ,
652            rsbac_gid_t ,
653            rsbac_um_mod_t ,
654            POINTER( rsbac_um_mod_data_t ) ] )
655
656 declare( 'rsbac_um_get_user_item' ,
657          c_int ,
658          [ rsbac_list_ta_number_t ,
659            rsbac_uid_t ,
660            rsbac_um_mod_t ,
661            POINTER( rsbac_um_mod_data_t ) ] )
662
663 declare( 'rsbac_um_get_group_item' ,
664          c_int ,
665          [ rsbac_list_ta_number_t ,
666            rsbac_gid_t ,
667            rsbac_um_mod_t ,
668            POINTER( rsbac_um_mod_data_t ) ] )
669
670 declare( 'rsbac_um_remove_user' ,
671          c_int ,
672          [ rsbac_list_ta_number_t ,
673            rsbac_uid_t ] )
674
675 declare( 'rsbac_um_remove_group' ,
676          c_int ,
677          [ rsbac_list_ta_number_t ,
678            rsbac_gid_t ] )
679
680 declare( 'rsbac_um_remove_gm' ,
681          c_int ,
682          [ rsbac_uid_t , rsbac_gid_t ] )
683
684 declare( 'rsbac_um_user_exists' ,
685          c_int ,
686          [ rsbac_list_ta_number_t ,
687            rsbac_uid_t ] )
688
689 declare( 'rsbac_um_group_exists' ,
690          c_int ,
691          [ rsbac_list_ta_number_t ,
692            rsbac_gid_t ] )
693
694 declare( 'rsbac_um_get_next_user' ,
695          c_int ,
696          [ rsbac_list_ta_number_t ,
697            rsbac_uid_t ,
698            POINTER( rsbac_uid_t ) ] )
699
700 declare( 'rsbac_um_get_user_list' ,
701          c_int ,
702          [ rsbac_list_ta_number_t ,
703            POINTER( rsbac_uid_t ) ,
704            c_uint ] )
705
706 declare( 'rsbac_um_get_gm_list' ,
707          c_int ,
708          [ rsbac_list_ta_number_t ,
709            rsbac_uid_t ,
710            POINTER( rsbac_gid_t ) ,
711            c_uint ] )
712
713 declare( 'rsbac_um_get_gm_user_list' ,
714          c_int ,
715          [ rsbac_list_ta_number_t ,
716            rsbac_gid_t ,
717            POINTER( rsbac_uid_t ) ,
718            c_uint ] )
719
720 declare( 'rsbac_um_get_group_list' ,
721          c_int ,
722          [ rsbac_list_ta_number_t ,
723            POINTER( rsbac_gid_t ) ,
724            c_uint ] )
725
726 declare( 'rsbac_um_get_uid' ,
727          c_int ,
728          [ rsbac_list_ta_number_t ,
729            c_char_p ,
730            POINTER( rsbac_uid_t ) ] )
731
732 declare( 'rsbac_um_get_gid' ,
733          c_int ,
734          [ rsbac_list_ta_number_t ,
735            c_char_p ,
736            POINTER( rsbac_gid_t ) ] )
737
738 declare( 'rsbac_um_set_pass' ,
739          c_int ,
740          [ rsbac_uid_t ,
741            c_char_p ,
742            c_char_p ] )
743
744 declare( 'rsbac_um_set_pass_name' ,
745          c_int ,
746          [ c_char_p ,
747            c_char_p ,
748            c_char_p ] )
749
750 declare( 'rsbac_um_set_group_pass' ,
751          c_int ,
752          [ rsbac_gid_t ,
753            c_char_p ] )
754
755 declare( 'rsbac_um_check_account' ,
756          c_int ,
757          [ rsbac_uid_t ] )
758
759 declare( 'rsbac_um_check_account_name' ,
760          c_int ,
761          [ c_char_p ] )
762
763 # Transaction
764
765 declare( 'rsbac_list_ta_begin' ,
766          c_int ,
767          [ rsbac_time_t ,
768            POINTER( rsbac_list_ta_number_t ) ,
769            rsbac_uid_t ,
770            c_char_p ] )
771
772 declare( 'rsbac_list_ta_refresh' ,
773          c_int ,
774          [ rsbac_time_t ,
775            rsbac_list_ta_number_t ,
776            c_char_p ] )
777
778 declare( 'rsbac_list_ta_commit' ,
779          c_int ,
780          [ rsbac_list_ta_number_t ,
781            c_char_p ] )
782
783 declare( 'rsbac_list_ta_forget' ,
784          c_int ,
785          [ rsbac_list_ta_number_t ,
786            c_char_p ] )
787
788 # Misc
789
790 declare( 'rsbac_list_all_dev' ,
791          c_int ,
792          [ rsbac_list_ta_number_t ,
793            POINTER( rsbac_dev_desc_t ) ,
794            c_ulong ] )
795
796 # rsbac_acl_list_all_dev
797
798 declare( 'rsbac_list_all_user' ,
799          c_int ,
800          [ rsbac_list_ta_number_t ,
801            POINTER( rsbac_uid_t ) ,
802            c_ulong ] )
803
804 # rsbac_acl_list_all_user
805
806 declare( 'rsbac_list_all_group' ,
807          c_int ,
808          [ rsbac_list_ta_number_t ,
809            POINTER( rsbac_gid_t ) ,
810            c_ulong ] )
811
812 # rsbac_acl_list_all_group
813
814 # rsbac_list_all_ipc
815
816 # DEBUG/LOG
817
818 declare( 'rsbac_adf_log_switch' ,
819          c_int ,
820          [ rsbac_adf_request_t ,
821            rsbac_target_t ,
822            c_uint ] )
823
824 declare( 'rsbac_get_adf_log' ,
825          c_int ,
826          [ rsbac_adf_request_t ,
827            rsbac_target_t ,
828            POINTER( c_uint ) ] )
829
830 declare( 'rsbac_log' ,
831          c_int ,
832          [ c_int ,
833            c_char_p ,
834            c_int ] )
835
836 declare( 'rsbac_init' ,
837          c_int ,
838          [ c_char_p ] )
839
840 # Local Variables:
841 # indent-tabs-mode: nil
842 # python-indent: 4
843 # End: