reg.h File Reference

#include <rsbac/types.h>
#include <rsbac/debug.h>

Go to the source code of this file.

Defines

#define RSBAC_REG_VERSION   1
#define RSBAC_REG_NAME_LEN   30

Typedefs

typedef int rsbac_reg_request_func_t (enum rsbac_adf_request_t, rsbac_pid_t, enum rsbac_target_t, union rsbac_target_id_t, enum rsbac_attribute_t, union rsbac_attribute_value_t, rsbac_uid_t)
typedef int rsbac_reg_set_attr_func_t (enum rsbac_adf_request_t, rsbac_pid_t, enum rsbac_target_t, union rsbac_target_id_t, enum rsbac_target_t, union rsbac_target_id_t, enum rsbac_attribute_t, union rsbac_attribute_value_t, rsbac_uid_t)
typedef rsbac_boolean_t rsbac_reg_need_overwrite_func_t (struct dentry *dentry_p)
typedef int rsbac_reg_write_func_t (rsbac_boolean_t need_lock)
typedef int rsbac_reg_mount_func_t (kdev_t kdev)
typedef int rsbac_reg_umount_func_t (kdev_t kdev)
typedef int rsbac_reg_syscall_func_t (void *data)
typedef int rsbac_reg_check_func_t (int correct, int check_inode)

Functions

rsbac_reg_handle_t rsbac_reg_register (rsbac_version_t version, struct rsbac_reg_entry_t entry)
int rsbac_reg_switch (rsbac_reg_handle_t handle, rsbac_boolean_t value)
int rsbac_reg_unregister (rsbac_reg_handle_t handle)
rsbac_reg_handle_t rsbac_reg_register_syscall (rsbac_version_t version, struct rsbac_reg_syscall_entry_t entry)
int rsbac_reg_unregister_syscall (rsbac_reg_handle_t handle)


Define Documentation

#define RSBAC_REG_NAME_LEN   30
 

Definition at line 21 of file reg.h.

Referenced by add_item(), add_sc_item(), init_module(), rsbac_reg_register(), and rsbac_reg_register_syscall().

#define RSBAC_REG_VERSION   1
 

Definition at line 15 of file reg.h.

Referenced by init_module(), rsbac_reg_register(), and rsbac_reg_register_syscall().


Typedef Documentation

typedef int rsbac_reg_check_func_t(int correct, int check_inode)
 

Definition at line 73 of file reg.h.

typedef int rsbac_reg_mount_func_t(kdev_t kdev)
 

Definition at line 61 of file reg.h.

typedef rsbac_boolean_t rsbac_reg_need_overwrite_func_t(struct dentry *dentry_p)
 

Definition at line 46 of file reg.h.

typedef int rsbac_reg_request_func_t(enum rsbac_adf_request_t, rsbac_pid_t, enum rsbac_target_t, union rsbac_target_id_t, enum rsbac_attribute_t, union rsbac_attribute_value_t, rsbac_uid_t)
 

Definition at line 25 of file reg.h.

typedef int rsbac_reg_set_attr_func_t(enum rsbac_adf_request_t, rsbac_pid_t, enum rsbac_target_t, union rsbac_target_id_t, enum rsbac_target_t, union rsbac_target_id_t, enum rsbac_attribute_t, union rsbac_attribute_value_t, rsbac_uid_t)
 

Definition at line 35 of file reg.h.

typedef int rsbac_reg_syscall_func_t(void *data)
 

Definition at line 68 of file reg.h.

typedef int rsbac_reg_umount_func_t(kdev_t kdev)
 

Definition at line 64 of file reg.h.

typedef int rsbac_reg_write_func_t(rsbac_boolean_t need_lock)
 

Definition at line 58 of file reg.h.


Function Documentation

rsbac_reg_handle_t rsbac_reg_register rsbac_version_t  version,
struct rsbac_reg_entry_t  entry
 

Definition at line 747 of file reg_main.c.

References add_item(), rsbac_reg_entry_t::handle, lookup_item(), rsbac_reg_entry_t::mount_func, rsbac_reg_entry_t::name, rsbac_reg_entry_t::need_overwrite_func, reg_write_lock(), reg_write_unlock(), rsbac_reg_entry_t::request_func, RSBAC_ECOULDNOTADDITEM, RSBAC_EEXISTS, RSBAC_EINVALIDVALUE, RSBAC_EINVALIDVERSION, rsbac_printk(), RSBAC_REG_NAME_LEN, RSBAC_REG_VERSION, rsbac_reg_entry_t::set_attr_func, rsbac_reg_entry_t::umount_func, and rsbac_reg_entry_t::write_func.

Referenced by init_module().

00749   {
00750     if(version != RSBAC_REG_VERSION)
00751       return(-RSBAC_EINVALIDVERSION);
00752 
00753     /* check entry */
00754     if(   (   !entry.request_func
00755            && !entry.set_attr_func
00756            && !entry.need_overwrite_func
00757            && !entry.write_func
00758            && !entry.mount_func
00759            && !entry.umount_func
00760           )
00761        || (entry.handle <= 0)
00762       )
00763       return -RSBAC_EINVALIDVALUE;
00764 
00765     reg_write_lock();
00766     if(lookup_item(entry.handle))
00767       {
00768         rsbac_printk(KERN_INFO "rsbac_reg_register: Handle in use, registering failed: %s.\n",
00769                entry.name);
00770         entry.handle = -RSBAC_EEXISTS;
00771       }
00772     else
00773       {
00774         if(!add_item(entry))
00775           {
00776             entry.name[RSBAC_REG_NAME_LEN] = 0;
00777             rsbac_printk(KERN_INFO "rsbac_reg_register: registering failed for %s.\n",
00778                    entry.name);
00779             entry.handle = -RSBAC_ECOULDNOTADDITEM;
00780           }
00781 #ifdef CONFIG_RSBAC_DEBUG
00782         else
00783           if(rsbac_debug_reg)
00784             {
00785               rsbac_printk(KERN_DEBUG "rsbac_reg_register: module %s registered.\n",
00786                      entry.name);
00787             }
00788 #endif
00789       }
00790     reg_write_unlock();
00791     return entry.handle;
00792   }

rsbac_reg_handle_t rsbac_reg_register_syscall rsbac_version_t  version,
struct rsbac_reg_syscall_entry_t  entry
 

Definition at line 880 of file reg_main.c.

References add_sc_item(), rsbac_reg_syscall_entry_t::dispatcher_handle, lookup_sc_item_dis(), lookup_sc_item_reg(), rsbac_reg_syscall_entry_t::name, reg_sc_write_lock(), reg_sc_write_unlock(), rsbac_reg_syscall_entry_t::registration_handle, RSBAC_ECOULDNOTADDITEM, RSBAC_EEXISTS, RSBAC_EINVALIDVALUE, RSBAC_EINVALIDVERSION, rsbac_printk(), RSBAC_REG_NAME_LEN, RSBAC_REG_VERSION, and rsbac_reg_syscall_entry_t::syscall_func.

Referenced by init_module().

00882   {
00883     if(version != RSBAC_REG_VERSION)
00884       return(-RSBAC_EINVALIDVERSION);
00885 
00886     /* check entry */
00887     if(   !entry.syscall_func
00888        || (entry.registration_handle <= 0)
00889        || (entry.dispatcher_handle <= 0)
00890       )
00891       return -RSBAC_EINVALIDVALUE;
00892 
00893     reg_sc_write_lock();
00894     if(lookup_sc_item_reg(entry.registration_handle))
00895       {
00896         rsbac_printk(KERN_INFO "rsbac_reg_register_syscall: Registration handle in use, registering failed: %s.\n",
00897                entry.name);
00898         entry.registration_handle = -RSBAC_EEXISTS;
00899       }
00900     else
00901     if(lookup_sc_item_dis(entry.dispatcher_handle))
00902       {
00903         rsbac_printk(KERN_INFO "rsbac_reg_register_syscall: Dispatcher handle in use, registering failed: %s.\n",
00904                entry.name);
00905         entry.registration_handle = -RSBAC_EEXISTS;
00906       }
00907     else
00908       {
00909         entry.name[RSBAC_REG_NAME_LEN] = 0;
00910         if(!add_sc_item(entry))
00911           {
00912             rsbac_printk(KERN_INFO "rsbac_reg_register_syscall: registering failed for %s.\n",
00913                    entry.name);
00914             entry.registration_handle = -RSBAC_ECOULDNOTADDITEM;
00915           }
00916 #ifdef CONFIG_RSBAC_DEBUG
00917         else
00918           if(rsbac_debug_reg)
00919             {
00920               rsbac_printk(KERN_DEBUG "rsbac_reg_register_syscall: syscall %s registered.\n",
00921                      entry.name);
00922             }
00923 #endif
00924       }
00925     reg_sc_write_unlock();
00926     return entry.registration_handle;
00927   }

int rsbac_reg_switch rsbac_reg_handle_t  handle,
rsbac_boolean_t  value
 

Definition at line 801 of file reg_main.c.

References FALSE, lookup_item(), reg_read_lock(), reg_read_unlock(), RSBAC_EINVALIDTARGET, RSBAC_EINVALIDVALUE, rsbac_printk(), and TRUE.

00802   {
00803 #ifdef CONFIG_RSBAC_SWITCH_REG
00804     struct rsbac_reg_list_item_t    * item_p;
00805            int err=0;
00806 
00807     if((value != FALSE) && (value != TRUE))
00808       return -RSBAC_EINVALIDVALUE;
00809     reg_read_lock();
00810     item_p = lookup_item(handle);
00811     if(item_p)
00812       {
00813         item_p->entry.switch_on = value;
00814 #ifdef CONFIG_RSBAC_DEBUG
00815         if(rsbac_debug_reg)
00816           {
00817             rsbac_printk(KERN_DEBUG "rsbac_reg_switch: module %s switched to %i.\n",
00818                    item_p->entry.name,
00819                    value);
00820           }
00821 #endif
00822       }
00823     else
00824       err = -RSBAC_EINVALIDTARGET;
00825     reg_read_unlock();
00826     return err;
00827 #else
00828     return(-RSBAC_EINVALIDTARGET);
00829 #endif
00830   };

int rsbac_reg_unregister rsbac_reg_handle_t  handle  ) 
 

Definition at line 840 of file reg_main.c.

References lookup_item(), reg_write_lock(), reg_write_unlock(), remove_item(), RSBAC_EINVALIDTARGET, RSBAC_EINVALIDVALUE, and rsbac_printk().

Referenced by cleanup_module(), and init_module().

00841   {
00842     int    err=0;
00843 
00844     if(handle <= 0)
00845       return -RSBAC_EINVALIDVALUE;
00846 
00847     reg_write_lock();
00848     if(lookup_item(handle))
00849       {
00850         remove_item(handle);
00851 #ifdef CONFIG_RSBAC_DEBUG
00852         if(rsbac_debug_reg)
00853           {
00854             rsbac_printk(KERN_DEBUG "rsbac_reg_unregister: module unregistered.\n");
00855           }
00856 #endif
00857       }
00858     else
00859       {
00860         err = -RSBAC_EINVALIDTARGET;
00861 #ifdef CONFIG_RSBAC_DEBUG
00862         if(rsbac_debug_reg)
00863           {
00864             rsbac_printk(KERN_DEBUG "rsbac_reg_unregister: module unregistering failed.\n");
00865           }
00866 #endif
00867       }
00868     reg_write_unlock();
00869     return err;
00870   }

int rsbac_reg_unregister_syscall rsbac_reg_handle_t  handle  ) 
 

Definition at line 937 of file reg_main.c.

References lookup_sc_item_reg(), reg_sc_write_lock(), reg_sc_write_unlock(), remove_sc_item(), RSBAC_EINVALIDTARGET, RSBAC_EINVALIDVALUE, and rsbac_printk().

Referenced by cleanup_module(), and init_module().

00938   {
00939     int    err=0;
00940 
00941     if(handle <= 0)
00942       return -RSBAC_EINVALIDVALUE;
00943 
00944     reg_sc_write_lock();
00945     if(lookup_sc_item_reg(handle))
00946       {
00947         remove_sc_item(handle);
00948 #ifdef CONFIG_RSBAC_DEBUG
00949         if(rsbac_debug_reg)
00950           {
00951             rsbac_printk(KERN_DEBUG "rsbac_reg_unregister_syscall: syscall unregistered.\n");
00952           }
00953 #endif
00954       }
00955     else
00956       {
00957         err = -RSBAC_EINVALIDTARGET;
00958         rsbac_printk(KERN_INFO "rsbac_reg_unregister_syscall: syscall unregistering failed for invalid handle!\n");
00959       }
00960     reg_sc_write_unlock();
00961     return err;
00962   }


Generated on Sun May 21 14:30:59 2006 for RSBAC by  doxygen 1.4.2