adf_main.h

Go to the documentation of this file.
00001 /************************************ */
00002 /* Rule Set Based Access Control      */
00003 /* Author and (c) 1999-2005:          */
00004 /*   Amon Ott <ao@rsbac.org>          */
00005 /* Data Structs etc. for Access       */
00006 /* Control Decision Facility          */
00007 /* Last modified: 30/Mar/2005         */
00008 /************************************ */
00009 
00010 #ifndef __RSBAC_ADF_MAIN_H
00011 #define __RSBAC_ADF_MAIN_H
00012 
00013 #include <linux/sched.h>
00014 #include <rsbac/types.h>
00015 
00016 #if defined(CONFIG_RSBAC_REG) || defined(CONFIG_RSBAC_REG_MAINT)
00017 #include <rsbac/reg.h>
00018 #endif
00019 
00020 #ifdef CONFIG_RSBAC_SECDEL
00021 #include <linux/dcache.h>
00022 #endif
00023 
00024 /***************************************************/
00025 /*              Global Variables                   */
00026 /***************************************************/
00027 
00028 extern u_long rsbac_adf_request_count[T_NONE+1];
00029 extern u_long rsbac_adf_set_attr_count[T_NONE+1];
00030 #ifdef CONFIG_RSBAC_XSTATS
00031 extern u_long rsbac_adf_request_xcount[T_NONE+1][R_NONE];
00032 extern u_long rsbac_adf_set_attr_xcount[T_NONE+1][R_NONE];
00033 #endif
00034 
00035 /***************************************************/
00036 /*              General Prototypes                 */
00037 /***************************************************/
00038 
00039 /* We call this function in kernel/sched.c         */
00040 extern struct task_struct * find_process_by_pid(pid_t);
00041 
00042 #ifdef CONFIG_RSBAC_DEBUG
00043 extern  enum rsbac_adf_req_ret_t
00044    rsbac_adf_request_check (enum  rsbac_adf_request_t     request,
00045                                   rsbac_pid_t             caller_pid,
00046                             enum  rsbac_target_t          target,
00047                             union rsbac_target_id_t     * tid_p,
00048                             enum  rsbac_attribute_t       attr,
00049                             union rsbac_attribute_value_t * attr_val_p,
00050                                   rsbac_uid_t             owner);
00051 
00052 extern int rsbac_adf_set_attr_check( enum  rsbac_adf_request_t,
00053                                            rsbac_pid_t,
00054                                      enum  rsbac_target_t,
00055                                      union rsbac_target_id_t,
00056                                      enum  rsbac_target_t,
00057                                      union rsbac_target_id_t,
00058                                      enum  rsbac_attribute_t,
00059                                      union rsbac_attribute_value_t,
00060                                            rsbac_uid_t); /* process owner */
00061 #endif
00062 
00063 extern enum rsbac_adf_req_ret_t
00064     adf_and_plus(enum rsbac_adf_req_ret_t res1,
00065                  enum rsbac_adf_req_ret_t res2);
00066 
00067 /***************************************************/
00068 /*              Module Prototypes                  */
00069 /***************************************************/
00070 
00071 #if !defined(CONFIG_RSBAC_MAINT)
00072 
00073 /******* MAC ********/
00074 
00075 #ifdef CONFIG_RSBAC_MAC
00076 #ifdef CONFIG_RSBAC_SWITCH_MAC
00077 extern  rsbac_boolean_t rsbac_switch_mac;
00078 #endif
00079 
00080 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_mac(
00081                                      enum  rsbac_adf_request_t,
00082                                            rsbac_pid_t,
00083                                      enum  rsbac_target_t,
00084                                      union rsbac_target_id_t,
00085                                      enum  rsbac_attribute_t,
00086                                      union rsbac_attribute_value_t,
00087                                            rsbac_uid_t); /* process owner */
00088 
00089 extern  int  rsbac_adf_set_attr_mac( enum  rsbac_adf_request_t,
00090                                            rsbac_pid_t,
00091                                      enum  rsbac_target_t,
00092                                      union rsbac_target_id_t,
00093                                      enum  rsbac_target_t,
00094                                      union rsbac_target_id_t,
00095                                      enum  rsbac_attribute_t,
00096                                      union rsbac_attribute_value_t,
00097                                            rsbac_uid_t); /* process owner */
00098 
00099 #endif  /* MAC */
00100 
00101 
00102 /******* PM ********/
00103 
00104 #ifdef CONFIG_RSBAC_PM
00105 #ifdef CONFIG_RSBAC_SWITCH_PM
00106 extern  rsbac_boolean_t rsbac_switch_pm;
00107 #endif
00108 
00109 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_pm(
00110                                      enum  rsbac_adf_request_t,
00111                                            rsbac_pid_t,
00112                                      enum  rsbac_target_t,
00113                                      union rsbac_target_id_t,
00114                                      enum  rsbac_attribute_t,
00115                                      union rsbac_attribute_value_t,
00116                                            rsbac_uid_t); /* process owner */
00117 
00118 extern  int  rsbac_adf_set_attr_pm ( enum  rsbac_adf_request_t,
00119                                            rsbac_pid_t,
00120                                      enum  rsbac_target_t,
00121                                      union rsbac_target_id_t,
00122                                      enum  rsbac_target_t,
00123                                      union rsbac_target_id_t,
00124                                      enum  rsbac_attribute_t,
00125                                      union rsbac_attribute_value_t,
00126                                            rsbac_uid_t); /* process owner */
00127 
00128 #ifdef CONFIG_RSBAC_SECDEL
00129 extern rsbac_boolean_t rsbac_need_overwrite_pm(struct dentry * dentry_p);
00130 #endif
00131 
00132 #endif  /* PM */
00133 
00134 /******* DAZ ********/
00135 
00136 #ifdef CONFIG_RSBAC_DAZ
00137 #ifdef CONFIG_RSBAC_SWITCH_DAZ
00138 extern  rsbac_boolean_t rsbac_switch_daz;
00139 #endif
00140 
00141 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_daz(
00142                                      enum  rsbac_adf_request_t,
00143                                            rsbac_pid_t,
00144                                      enum  rsbac_target_t,
00145                                      union rsbac_target_id_t,
00146                                      enum  rsbac_attribute_t,
00147                                      union rsbac_attribute_value_t,
00148                                            rsbac_uid_t); /* process owner */
00149 
00150 extern  int  rsbac_adf_set_attr_daz (enum  rsbac_adf_request_t,
00151                                            rsbac_pid_t,
00152                                      enum  rsbac_target_t,
00153                                      union rsbac_target_id_t,
00154                                      enum  rsbac_target_t,
00155                                      union rsbac_target_id_t,
00156                                      enum  rsbac_attribute_t,
00157                                      union rsbac_attribute_value_t,
00158                                            rsbac_uid_t); /* process owner */
00159 
00160 #endif  /* DAZ */
00161  
00162 /******* FF ********/
00163 
00164 #ifdef CONFIG_RSBAC_FF
00165 #ifdef CONFIG_RSBAC_SWITCH_FF
00166 extern  rsbac_boolean_t rsbac_switch_ff;
00167 #endif
00168 
00169 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_ff(
00170                                      enum  rsbac_adf_request_t,
00171                                            rsbac_pid_t,
00172                                      enum  rsbac_target_t,
00173                                      union rsbac_target_id_t,
00174                                      enum  rsbac_attribute_t,
00175                                      union rsbac_attribute_value_t,
00176                                            rsbac_uid_t); /* process owner */
00177 
00178 extern  int  rsbac_adf_set_attr_ff ( enum  rsbac_adf_request_t,
00179                                            rsbac_pid_t,
00180                                      enum  rsbac_target_t,
00181                                      union rsbac_target_id_t,
00182                                      enum  rsbac_target_t,
00183                                      union rsbac_target_id_t,
00184                                      enum  rsbac_attribute_t,
00185                                      union rsbac_attribute_value_t,
00186                                            rsbac_uid_t); /* process owner */
00187 
00188 #ifdef CONFIG_RSBAC_SECDEL
00189 extern rsbac_boolean_t rsbac_need_overwrite_ff(struct dentry * dentry_p);
00190 #endif
00191 
00192 #endif  /* FF */
00193  
00194 /******* RC ********/
00195 
00196 #ifdef CONFIG_RSBAC_RC
00197 #ifdef CONFIG_RSBAC_SWITCH_RC
00198 extern  rsbac_boolean_t rsbac_switch_rc;
00199 #endif
00200 
00201 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_rc(
00202                                      enum  rsbac_adf_request_t,
00203                                            rsbac_pid_t,
00204                                      enum  rsbac_target_t,
00205                                      union rsbac_target_id_t,
00206                                      enum  rsbac_attribute_t,
00207                                      union rsbac_attribute_value_t,
00208                                            rsbac_uid_t); /* process owner */
00209 
00210 extern  int  rsbac_adf_set_attr_rc ( enum  rsbac_adf_request_t,
00211                                            rsbac_pid_t,
00212                                      enum  rsbac_target_t,
00213                                      union rsbac_target_id_t,
00214                                      enum  rsbac_target_t,
00215                                      union rsbac_target_id_t,
00216                                      enum  rsbac_attribute_t,
00217                                      union rsbac_attribute_value_t,
00218                                            rsbac_uid_t); /* process owner */
00219 
00220 /* Secure delete/truncate for this module */
00221 #ifdef CONFIG_RSBAC_SECDEL
00222 extern rsbac_boolean_t rsbac_need_overwrite_rc(struct dentry * dentry_p);
00223 #endif
00224 #endif  /* RC */
00225 
00226 /****** AUTH *******/
00227 
00228 #ifdef CONFIG_RSBAC_AUTH
00229 #ifdef CONFIG_RSBAC_SWITCH_AUTH
00230 extern  rsbac_boolean_t rsbac_switch_auth;
00231 #endif
00232 
00233 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_auth(
00234                                      enum  rsbac_adf_request_t,
00235                                            rsbac_pid_t,
00236                                      enum  rsbac_target_t,
00237                                      union rsbac_target_id_t,
00238                                      enum  rsbac_attribute_t,
00239                                      union rsbac_attribute_value_t,
00240                                            rsbac_uid_t); /* process owner */
00241 
00242 extern  int  rsbac_adf_set_attr_auth(enum  rsbac_adf_request_t,
00243                                            rsbac_pid_t,
00244                                      enum  rsbac_target_t,
00245                                      union rsbac_target_id_t,
00246                                      enum  rsbac_target_t,
00247                                      union rsbac_target_id_t,
00248                                      enum  rsbac_attribute_t,
00249                                      union rsbac_attribute_value_t,
00250                                            rsbac_uid_t); /* process owner */
00251 
00252 #endif /* AUTH */
00253 
00254 /****** ACL *******/
00255 
00256 #ifdef CONFIG_RSBAC_ACL
00257 #ifdef CONFIG_RSBAC_SWITCH_ACL
00258 extern  rsbac_boolean_t rsbac_switch_acl;
00259 #endif
00260 
00261 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_acl(
00262                                      enum  rsbac_adf_request_t,
00263                                            rsbac_pid_t,
00264                                      enum  rsbac_target_t,
00265                                      union rsbac_target_id_t,
00266                                      enum  rsbac_attribute_t,
00267                                      union rsbac_attribute_value_t,
00268                                            rsbac_uid_t); /* process owner */
00269 
00270 extern  int  rsbac_adf_set_attr_acl (enum  rsbac_adf_request_t,
00271                                            rsbac_pid_t,
00272                                      enum  rsbac_target_t,
00273                                      union rsbac_target_id_t,
00274                                      enum  rsbac_target_t,
00275                                      union rsbac_target_id_t,
00276                                      enum  rsbac_attribute_t,
00277                                      union rsbac_attribute_value_t,
00278                                            rsbac_uid_t); /* process owner */
00279 
00280 #endif /* ACL */
00281 
00282 /****** CAP *******/
00283 
00284 #ifdef CONFIG_RSBAC_CAP
00285 #ifdef CONFIG_RSBAC_SWITCH_CAP
00286 extern  rsbac_boolean_t rsbac_switch_cap;
00287 #endif
00288 
00289 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_cap(
00290                                      enum  rsbac_adf_request_t,
00291                                            rsbac_pid_t,
00292                                      enum  rsbac_target_t,
00293                                      union rsbac_target_id_t,
00294                                      enum  rsbac_attribute_t,
00295                                      union rsbac_attribute_value_t,
00296                                            rsbac_uid_t); /* process owner */
00297 
00298 extern  int  rsbac_adf_set_attr_cap (enum  rsbac_adf_request_t,
00299                                            rsbac_pid_t,
00300                                      enum  rsbac_target_t,
00301                                      union rsbac_target_id_t,
00302                                      enum  rsbac_target_t,
00303                                      union rsbac_target_id_t,
00304                                      enum  rsbac_attribute_t,
00305                                      union rsbac_attribute_value_t,
00306                                            rsbac_uid_t); /* process owner */
00307 
00308 #endif /* CAP */
00309 
00310 /****** JAIL *******/
00311 
00312 #ifdef CONFIG_RSBAC_JAIL
00313 #ifdef CONFIG_RSBAC_SWITCH_JAIL
00314 extern  rsbac_boolean_t rsbac_switch_jail;
00315 #endif
00316 
00317 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_jail(
00318                                      enum  rsbac_adf_request_t,
00319                                            rsbac_pid_t,
00320                                      enum  rsbac_target_t,
00321                                      union rsbac_target_id_t,
00322                                      enum  rsbac_attribute_t,
00323                                      union rsbac_attribute_value_t,
00324                                            rsbac_uid_t); /* process owner */
00325 
00326 extern  int  rsbac_adf_set_attr_jail(enum  rsbac_adf_request_t,
00327                                            rsbac_pid_t,
00328                                      enum  rsbac_target_t,
00329                                      union rsbac_target_id_t,
00330                                      enum  rsbac_target_t,
00331                                      union rsbac_target_id_t,
00332                                      enum  rsbac_attribute_t,
00333                                      union rsbac_attribute_value_t,
00334                                            rsbac_uid_t); /* process owner */
00335 
00336 #endif /* JAIL */
00337 
00338 /******* PAX ********/
00339 
00340 #ifdef CONFIG_RSBAC_PAX
00341 #ifdef CONFIG_RSBAC_SWITCH_PAX
00342 extern  rsbac_boolean_t rsbac_switch_pax;
00343 #endif
00344 
00345 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_pax(
00346                                      enum  rsbac_adf_request_t,
00347                                            rsbac_pid_t,
00348                                      enum  rsbac_target_t,
00349                                      union rsbac_target_id_t,
00350                                      enum  rsbac_attribute_t,
00351                                      union rsbac_attribute_value_t,
00352                                            rsbac_uid_t); /* process owner */
00353 
00354 extern  int  rsbac_adf_set_attr_pax( enum  rsbac_adf_request_t,
00355                                            rsbac_pid_t,
00356                                      enum  rsbac_target_t,
00357                                      union rsbac_target_id_t,
00358                                      enum  rsbac_target_t,
00359                                      union rsbac_target_id_t,
00360                                      enum  rsbac_attribute_t,
00361                                      union rsbac_attribute_value_t,
00362                                            rsbac_uid_t); /* process owner */
00363 
00364 #endif  /* PAX */
00365 
00366 
00367 /****** RES *******/
00368 
00369 #ifdef CONFIG_RSBAC_RES
00370 #ifdef CONFIG_RSBAC_SWITCH_RES
00371 extern  rsbac_boolean_t rsbac_switch_res;
00372 #endif
00373 
00374 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_res(
00375                                      enum  rsbac_adf_request_t,
00376                                            rsbac_pid_t,
00377                                      enum  rsbac_target_t,
00378                                      union rsbac_target_id_t,
00379                                      enum  rsbac_attribute_t,
00380                                      union rsbac_attribute_value_t,
00381                                            rsbac_uid_t); /* process owner */
00382 
00383 extern  int  rsbac_adf_set_attr_res (enum  rsbac_adf_request_t,
00384                                            rsbac_pid_t,
00385                                      enum  rsbac_target_t,
00386                                      union rsbac_target_id_t,
00387                                      enum  rsbac_target_t,
00388                                      union rsbac_target_id_t,
00389                                      enum  rsbac_attribute_t,
00390                                      union rsbac_attribute_value_t,
00391                                            rsbac_uid_t); /* process owner */
00392 
00393 #ifdef CONFIG_RSBAC_SECDEL
00394 extern inline rsbac_boolean_t rsbac_need_overwrite_res(struct dentry * dentry_p)
00395   {
00396     return FALSE;
00397   }
00398 #endif
00399 #endif /* RES */
00400 
00401 /****** REG *******/
00402 
00403 #if defined(CONFIG_RSBAC_REG)
00404 extern  enum rsbac_adf_req_ret_t  rsbac_adf_request_reg(
00405                                      enum  rsbac_adf_request_t,
00406                                            rsbac_pid_t,
00407                                      enum  rsbac_target_t,
00408                                      union rsbac_target_id_t,
00409                                      enum  rsbac_attribute_t,
00410                                      union rsbac_attribute_value_t,
00411                                            rsbac_uid_t); /* process owner */
00412 
00413 extern  int  rsbac_adf_set_attr_reg (enum  rsbac_adf_request_t,
00414                                            rsbac_pid_t,
00415                                      enum  rsbac_target_t,
00416                                      union rsbac_target_id_t,
00417                                      enum  rsbac_target_t,
00418                                      union rsbac_target_id_t,
00419                                      enum  rsbac_attribute_t,
00420                                      union rsbac_attribute_value_t,
00421                                            rsbac_uid_t); /* process owner */
00422 
00423 #ifdef CONFIG_RSBAC_SECDEL
00424 extern inline rsbac_boolean_t rsbac_need_overwrite_reg(struct dentry * dentry_p)
00425   {
00426     return FALSE;
00427   }
00428 #endif
00429 #endif /* REG */
00430 
00431 #endif /* !MAINT */
00432 
00433 #if defined(CONFIG_RSBAC_REG) || defined(CONFIG_RSBAC_REG_MAINT)
00434 /* Init */
00435 #ifdef CONFIG_RSBAC_INIT_DELAY
00436 void rsbac_reg_init(void);
00437 #else
00438 void rsbac_reg_init(void) __init;
00439 #endif
00440 
00441 /* mounting and umounting */
00442 extern int rsbac_mount_reg(kdev_t kdev);
00443 extern int rsbac_umount_reg(kdev_t kdev);
00444 
00445 /* RSBAC attribute saving to disk can be triggered from outside
00446  * param: call lock_kernel() before writing?
00447  */
00448 #if defined(CONFIG_RSBAC_AUTO_WRITE)
00449 extern int rsbac_write_reg(rsbac_boolean_t);
00450 #endif /* CONFIG_RSBAC_AUTO_WRITE */
00451 
00452 /* Status checking */
00453 extern int rsbac_check_reg(int correct, int check_inode);
00454 
00455 #endif /* REG */
00456 
00457 #endif /* End of adf_main.h */

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