00001 /**************************************/ 00002 /* Rule Set Based Access Control */ 00003 /* Author and (c) 1999-2005: Amon Ott */ 00004 /* Data structures / PM */ 00005 /* Last modified: 09/Feb/2005 */ 00006 /**************************************/ 00007 00008 #ifndef __RSBAC_PM_DATA_STRUC_H 00009 #define __RSBAC_PM_DATA_STRUC_H 00010 00011 #include <linux/types.h> 00012 #include <rsbac/aci.h> 00013 #include <rsbac/types.h> 00014 #include <rsbac/pm_types.h> 00015 00016 #define RSBAC_PM_TASK_SET_LIST_NAME "pm_ta_s" 00017 #define RSBAC_PM_TASK_SET_LIST_PROC_NAME "task_set" 00018 00019 #define RSBAC_PM_TP_SET_LIST_NAME "pm_tp_s" 00020 #define RSBAC_PM_TP_SET_LIST_PROC_NAME "tp_set" 00021 00022 #define RSBAC_PM_RU_SET_LIST_NAME "pm_ru_s" 00023 #define RSBAC_PM_RU_SET_LIST_PROC_NAME "responsible_user_set" 00024 00025 #define RSBAC_PM_PP_SET_LIST_NAME "pm_pp_s" 00026 #define RSBAC_PM_PP_SET_LIST_PROC_NAME "purpose_set" 00027 00028 #define RSBAC_PM_IN_PP_SET_LIST_NAME "input_pp_set" 00029 #define RSBAC_PM_IN_PP_SET_LIST_PROC_NAME "input_purpose_set" 00030 00031 #define RSBAC_PM_OUT_PP_SET_LIST_NAME "output_pp_set" 00032 #define RSBAC_PM_OUT_PP_SET_LIST_PROC_NAME "output_purpose_set" 00033 00034 00035 #define RSBAC_PM_TASK_LIST_NAME "pm_task" 00036 #define RSBAC_PM_TASK_LIST_PROC_NAME "task" 00037 00038 #define RSBAC_PM_CLASS_LIST_NAME "pm_clas" 00039 #define RSBAC_PM_CLASS_LIST_PROC_NAME "object_class" 00040 00041 #define RSBAC_PM_NA_LIST_NAME "pm_na" 00042 #define RSBAC_PM_NA_LIST_PROC_NAME "necessary_accesses" 00043 00044 #define RSBAC_PM_CS_LIST_NAME "pm_cs" 00045 #define RSBAC_PM_CS_LIST_PROC_NAME "consent" 00046 00047 #define RSBAC_PM_TP_LIST_NAME "pm_tp" 00048 #define RSBAC_PM_TP_LIST_PROC_NAME "tp" 00049 00050 #define RSBAC_PM_PP_LIST_NAME "pm_pp" 00051 #define RSBAC_PM_PP_LIST_PROC_NAME "purpose" 00052 00053 #define RSBAC_PM_TKT_LIST_NAME "pm_tkt" 00054 #define RSBAC_PM_TKT_LIST_PROC_NAME "ticket" 00055 00056 00057 #define RSBAC_PM_NO_VERSION 1 00058 00059 #define RSBAC_PM_TASK_SET_LIST_VERSION 1 00060 #define RSBAC_PM_TP_SET_LIST_VERSION 1 00061 #define RSBAC_PM_RU_SET_LIST_VERSION 2 00062 #define RSBAC_PM_PP_SET_LIST_VERSION 1 00063 00064 #define RSBAC_PM_TASK_LIST_VERSION 1 00065 #define RSBAC_PM_CLASS_LIST_VERSION 1 00066 #define RSBAC_PM_NA_LIST_VERSION 1 00067 #define RSBAC_PM_CS_LIST_VERSION 1 00068 #define RSBAC_PM_TP_LIST_VERSION 1 00069 #define RSBAC_PM_PP_LIST_VERSION 1 00070 #define RSBAC_PM_TKT_LIST_VERSION 2 00071 00072 #define RSBAC_PM_LIST_KEY 19990820 00073 00074 #define RSBAC_PM_PROC_STATS_NAME "stats_pm" 00075 #define RSBAC_PM_PROC_DIR_NAME "pm" 00076 00077 /**********************************************/ 00078 /* Helper lists */ 00079 /**********************************************/ 00080 00081 /* This list represents sets of task-ids, using a set-id and a sublist each */ 00082 00083 struct rsbac_pm_task_set_sublist_item_t { 00084 rsbac_pm_task_id_t id; 00085 struct rsbac_pm_task_set_sublist_item_t *prev; 00086 struct rsbac_pm_task_set_sublist_item_t *next; 00087 }; 00088 00089 struct rsbac_pm_task_set_list_item_t { 00090 rsbac_pm_task_set_id_t id; 00091 int sublist_length; 00092 struct rsbac_pm_task_set_sublist_item_t *sublist_head; 00093 struct rsbac_pm_task_set_sublist_item_t *sublist_tail; 00094 struct rsbac_pm_task_set_list_item_t *prev; 00095 struct rsbac_pm_task_set_list_item_t *next; 00096 }; 00097 00098 struct rsbac_pm_task_set_list_head_t { 00099 struct rsbac_pm_task_set_list_item_t *head; 00100 struct rsbac_pm_task_set_list_item_t *tail; 00101 struct rsbac_pm_task_set_list_item_t *curr; 00102 rwlock_t lock; 00103 rsbac_boolean_t dirty; 00104 u_long count; 00105 rsbac_boolean_t no_write; 00106 }; 00107 00108 00109 /* This list represents sets of TP-ids, using a set-id and a sublist each */ 00110 00111 struct rsbac_pm_tp_set_sublist_item_t { 00112 rsbac_pm_tp_id_t id; 00113 struct rsbac_pm_tp_set_sublist_item_t *prev; 00114 struct rsbac_pm_tp_set_sublist_item_t *next; 00115 }; 00116 00117 struct rsbac_pm_tp_set_list_item_t { 00118 rsbac_pm_tp_set_id_t id; 00119 int sublist_length; 00120 struct rsbac_pm_tp_set_sublist_item_t *sublist_head; 00121 struct rsbac_pm_tp_set_sublist_item_t *sublist_tail; 00122 struct rsbac_pm_tp_set_list_item_t *prev; 00123 struct rsbac_pm_tp_set_list_item_t *next; 00124 }; 00125 00126 struct rsbac_pm_tp_set_list_head_t { 00127 struct rsbac_pm_tp_set_list_item_t *head; 00128 struct rsbac_pm_tp_set_list_item_t *tail; 00129 struct rsbac_pm_tp_set_list_item_t *curr; 00130 rwlock_t lock; 00131 rsbac_boolean_t dirty; 00132 u_int count; 00133 rsbac_boolean_t no_write; 00134 }; 00135 00136 00137 /* This list represents sets of Responsible-User-ids, using a set-id and a */ 00138 /* sublist each */ 00139 00140 struct rsbac_pm_ru_set_sublist_item_t { 00141 rsbac_uid_t id; 00142 struct rsbac_pm_ru_set_sublist_item_t *prev; 00143 struct rsbac_pm_ru_set_sublist_item_t *next; 00144 }; 00145 00146 struct rsbac_pm_ru_set_list_item_t { 00147 rsbac_pm_ru_set_id_t id; 00148 int sublist_length; 00149 struct rsbac_pm_ru_set_sublist_item_t *sublist_head; 00150 struct rsbac_pm_ru_set_sublist_item_t *sublist_tail; 00151 struct rsbac_pm_ru_set_list_item_t *prev; 00152 struct rsbac_pm_ru_set_list_item_t *next; 00153 }; 00154 00155 struct rsbac_pm_ru_set_list_head_t { 00156 struct rsbac_pm_ru_set_list_item_t *head; 00157 struct rsbac_pm_ru_set_list_item_t *tail; 00158 struct rsbac_pm_ru_set_list_item_t *curr; 00159 rwlock_t lock; 00160 rsbac_boolean_t dirty; 00161 u_int count; 00162 rsbac_boolean_t no_write; 00163 }; 00164 00165 /* This list represents sets of purpose-ids, using a set-id and a */ 00166 /* sublist each */ 00167 00168 struct rsbac_pm_pp_set_sublist_item_t { 00169 rsbac_pm_purpose_id_t id; 00170 struct rsbac_pm_pp_set_sublist_item_t *prev; 00171 struct rsbac_pm_pp_set_sublist_item_t *next; 00172 }; 00173 00174 struct rsbac_pm_pp_set_list_item_t { 00175 rsbac_pm_pp_set_id_t id; 00176 int sublist_length; 00177 struct rsbac_pm_pp_set_sublist_item_t *sublist_head; 00178 struct rsbac_pm_pp_set_sublist_item_t *sublist_tail; 00179 struct rsbac_pm_pp_set_list_item_t *prev; 00180 struct rsbac_pm_pp_set_list_item_t *next; 00181 }; 00182 00183 struct rsbac_pm_pp_set_list_head_t { 00184 struct rsbac_pm_pp_set_list_item_t *head; 00185 struct rsbac_pm_pp_set_list_item_t *tail; 00186 struct rsbac_pm_pp_set_list_item_t *curr; 00187 rwlock_t lock; 00188 rsbac_boolean_t dirty; 00189 u_long count; 00190 rsbac_boolean_t no_write; 00191 }; 00192 00193 /* This list also represents sets of purpose-ids, using a set-id and a */ 00194 /* sublist each */ 00195 00196 struct rsbac_pm_in_pp_set_sublist_item_t { 00197 rsbac_pm_purpose_id_t id; 00198 struct rsbac_pm_in_pp_set_sublist_item_t *prev; 00199 struct rsbac_pm_in_pp_set_sublist_item_t *next; 00200 }; 00201 00202 struct rsbac_pm_in_pp_set_list_item_t { 00203 rsbac_pm_in_pp_set_id_t id; 00204 int sublist_length; 00205 struct rsbac_pm_in_pp_set_sublist_item_t *sublist_head; 00206 struct rsbac_pm_in_pp_set_sublist_item_t *sublist_tail; 00207 struct rsbac_pm_in_pp_set_list_item_t *prev; 00208 struct rsbac_pm_in_pp_set_list_item_t *next; 00209 }; 00210 00211 struct rsbac_pm_in_pp_set_list_head_t { 00212 struct rsbac_pm_in_pp_set_list_item_t *head; 00213 struct rsbac_pm_in_pp_set_list_item_t *tail; 00214 struct rsbac_pm_in_pp_set_list_item_t *curr; 00215 rwlock_t lock; 00216 rsbac_boolean_t dirty; 00217 u_int count; 00218 }; 00219 00220 /* This list also represents sets of purpose-ids, using a set-id and a */ 00221 /* sublist each */ 00222 00223 struct rsbac_pm_out_pp_set_sublist_item_t { 00224 rsbac_pm_purpose_id_t id; 00225 struct rsbac_pm_out_pp_set_sublist_item_t *prev; 00226 struct rsbac_pm_out_pp_set_sublist_item_t *next; 00227 }; 00228 00229 struct rsbac_pm_out_pp_set_list_item_t { 00230 rsbac_pm_out_pp_set_id_t id; 00231 int sublist_length; 00232 struct rsbac_pm_out_pp_set_sublist_item_t *sublist_head; 00233 struct rsbac_pm_out_pp_set_sublist_item_t *sublist_tail; 00234 struct rsbac_pm_out_pp_set_list_item_t *prev; 00235 struct rsbac_pm_out_pp_set_list_item_t *next; 00236 }; 00237 00238 struct rsbac_pm_out_pp_set_list_head_t { 00239 struct rsbac_pm_out_pp_set_list_item_t *head; 00240 struct rsbac_pm_out_pp_set_list_item_t *tail; 00241 struct rsbac_pm_out_pp_set_list_item_t *curr; 00242 rwlock_t lock; 00243 rsbac_boolean_t dirty; 00244 u_int count; 00245 }; 00246 00247 00248 /**********************************************/ 00249 /* Main lists */ 00250 /**********************************************/ 00251 00252 /* List of defined tasks */ 00253 /* rsbac_pm_task_data_t is defined in pm_types.h! */ 00254 00255 struct rsbac_pm_task_list_item_t { 00256 struct rsbac_pm_task_data_t data; 00257 struct rsbac_pm_task_list_item_t *prev; 00258 struct rsbac_pm_task_list_item_t *next; 00259 }; 00260 00261 struct rsbac_pm_task_list_head_t { 00262 struct rsbac_pm_task_list_item_t *head; 00263 struct rsbac_pm_task_list_item_t *tail; 00264 struct rsbac_pm_task_list_item_t *curr; 00265 rwlock_t lock; 00266 rsbac_boolean_t dirty; 00267 u_int count; 00268 rsbac_boolean_t no_write; 00269 }; 00270 00271 /* List of defined classes */ 00272 /* rsbac_pm_class_data_t is defined in pm_types.h! */ 00273 00274 00275 struct rsbac_pm_class_list_item_t { 00276 struct rsbac_pm_class_data_t data; 00277 struct rsbac_pm_class_list_item_t *prev; 00278 struct rsbac_pm_class_list_item_t *next; 00279 }; 00280 00281 struct rsbac_pm_class_list_head_t { 00282 struct rsbac_pm_class_list_item_t *head; 00283 struct rsbac_pm_class_list_item_t *tail; 00284 struct rsbac_pm_class_list_item_t *curr; 00285 rwlock_t lock; 00286 rsbac_boolean_t dirty; 00287 u_int count; 00288 rsbac_boolean_t no_write; 00289 }; 00290 00291 /* List of defined necessary accesses */ 00292 /* rsbac_pm_na_data_t is defined in pm_types.h! */ 00293 00294 struct rsbac_pm_na_list_item_t { 00295 struct rsbac_pm_na_data_t data; 00296 struct rsbac_pm_na_list_item_t *prev; 00297 struct rsbac_pm_na_list_item_t *next; 00298 }; 00299 00300 struct rsbac_pm_na_list_head_t { 00301 struct rsbac_pm_na_list_item_t *head; 00302 struct rsbac_pm_na_list_item_t *tail; 00303 struct rsbac_pm_na_list_item_t *curr; 00304 rwlock_t lock; 00305 rsbac_boolean_t dirty; 00306 u_int count; 00307 rsbac_boolean_t no_write; 00308 }; 00309 00310 00311 /* List of consents */ 00312 /* rsbac_pm_cs_data_t is defined in pm_types.h! */ 00313 00314 struct rsbac_pm_cs_list_item_t { 00315 struct rsbac_pm_cs_data_t data; 00316 struct rsbac_pm_cs_list_item_t *prev; 00317 struct rsbac_pm_cs_list_item_t *next; 00318 }; 00319 00320 struct rsbac_pm_cs_list_head_t { 00321 struct rsbac_pm_cs_list_item_t *head; 00322 struct rsbac_pm_cs_list_item_t *tail; 00323 struct rsbac_pm_cs_list_item_t *curr; 00324 rwlock_t lock; 00325 rsbac_boolean_t dirty; 00326 u_int count; 00327 rsbac_boolean_t no_write; 00328 }; 00329 00330 00331 /* List of defined transformation procedures */ 00332 00333 struct rsbac_pm_tp_list_item_t { 00334 struct rsbac_pm_tp_data_t data; 00335 struct rsbac_pm_tp_list_item_t *prev; 00336 struct rsbac_pm_tp_list_item_t *next; 00337 }; 00338 00339 struct rsbac_pm_tp_list_head_t { 00340 struct rsbac_pm_tp_list_item_t *head; 00341 struct rsbac_pm_tp_list_item_t *tail; 00342 struct rsbac_pm_tp_list_item_t *curr; 00343 rwlock_t lock; 00344 rsbac_boolean_t dirty; 00345 u_int count; 00346 rsbac_boolean_t no_write; 00347 }; 00348 00349 00350 /* List of defined purposes */ 00351 00352 struct rsbac_pm_pp_list_item_t { 00353 struct rsbac_pm_pp_data_t data; 00354 struct rsbac_pm_pp_list_item_t *prev; 00355 struct rsbac_pm_pp_list_item_t *next; 00356 }; 00357 00358 struct rsbac_pm_pp_list_head_t { 00359 struct rsbac_pm_pp_list_item_t *head; 00360 struct rsbac_pm_pp_list_item_t *tail; 00361 struct rsbac_pm_pp_list_item_t *curr; 00362 rwlock_t lock; 00363 rsbac_boolean_t dirty; 00364 u_int count; 00365 rsbac_boolean_t no_write; 00366 }; 00367 00368 00369 /* List of valid tickets for PM administration calls */ 00370 /* rsbac_pm_tkt_data_t is defined in pm_types.h! */ 00371 00372 struct rsbac_pm_tkt_list_item_t { 00373 struct rsbac_pm_tkt_data_t data; 00374 struct rsbac_pm_tkt_list_item_t *prev; 00375 struct rsbac_pm_tkt_list_item_t *next; 00376 }; 00377 00378 struct rsbac_pm_tkt_list_head_t { 00379 struct rsbac_pm_tkt_list_item_t *head; 00380 struct rsbac_pm_tkt_list_item_t *tail; 00381 struct rsbac_pm_tkt_list_item_t *curr; 00382 rwlock_t lock; 00383 rsbac_boolean_t dirty; 00384 u_int count; 00385 rsbac_boolean_t no_write; 00386 }; 00387 00388 #endif