Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2006 Tresys Technology, LLC
      3  *
      4  *  This library is free software; you can redistribute it and/or
      5  *  modify it under the terms of the GNU Lesser General Public
      6  *  License as published by the Free Software Foundation; either
      7  *  version 2.1 of the License, or (at your option) any later version.
      8  *
      9  *  This library is distributed in the hope that it will be useful,
     10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12  *  Lesser General Public License for more details.
     13  *
     14  *  You should have received a copy of the GNU Lesser General Public
     15  *  License along with this library; if not, write to the Free Software
     16  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     17  */
     18 
     19 /* Copyright (C) 2005 Red Hat, Inc. */
     20 
     21 #ifndef _SEMANAGE_DATABASE_POLICYDB_INTERNAL_H_
     22 #define _SEMANAGE_DATABASE_POLICYDB_INTERNAL_H_
     23 
     24 #include <sepol/handle.h>
     25 #include <sepol/policydb.h>
     26 #include "database.h"
     27 #include "handle.h"
     28 
     29 struct dbase_policydb;
     30 typedef struct dbase_policydb dbase_policydb_t;
     31 
     32 typedef int (*record_policydb_table_add_t) (sepol_handle_t * h,
     33 					    sepol_policydb_t * p,
     34 					    const record_key_t * rkey,
     35 					    const record_t * record);
     36 
     37 typedef int (*record_policydb_table_modify_t) (sepol_handle_t * h,
     38 					       sepol_policydb_t * p,
     39 					       const record_key_t * rkey,
     40 					       const record_t * record);
     41 
     42 typedef int (*record_policydb_table_set_t) (sepol_handle_t * h,
     43 					    sepol_policydb_t * p,
     44 					    const record_key_t * rkey,
     45 					    const record_t * record);
     46 
     47 typedef int (*record_policydb_table_query_t) (sepol_handle_t * h,
     48 					      const sepol_policydb_t * p,
     49 					      const record_key_t * rkey,
     50 					      record_t ** response);
     51 
     52 typedef int (*record_policydb_table_count_t) (sepol_handle_t * h,
     53 					      const sepol_policydb_t * p,
     54 					      unsigned int *response);
     55 
     56 typedef int (*record_policydb_table_exists_t) (sepol_handle_t * h,
     57 					       const sepol_policydb_t * p,
     58 					       const record_key_t * rkey,
     59 					       int *response);
     60 
     61 typedef int (*record_policydb_table_iterate_t) (sepol_handle_t * h,
     62 						const sepol_policydb_t * p,
     63 						int (*fn) (const record_t * r,
     64 							   void *fn_arg),
     65 						void *arg);
     66 
     67 /* POLICYDB extension to RECORD interface - method table */
     68 typedef struct record_policydb_table {
     69 	/* Add policy record */
     70 	record_policydb_table_add_t add;
     71 	/* Modify policy record, or add if
     72 	 * the key isn't found */
     73 	record_policydb_table_modify_t modify;
     74 	/* Set policy record */
     75 	record_policydb_table_set_t set;
     76 	/* Query policy record  - return the record
     77 	 * or NULL if it isn't found */
     78 	record_policydb_table_query_t query;
     79 	/* Count records */
     80 	record_policydb_table_count_t count;
     81 	/* Check if a record exists */
     82 	record_policydb_table_exists_t exists;
     83 	/* Iterate over records */
     84 	record_policydb_table_iterate_t iterate;
     85 } record_policydb_table_t;
     86 
     87 /* Initialize database */
     88 extern int dbase_policydb_init(semanage_handle_t * handle,
     89 			       const char *path_ro,
     90 			       const char *path_rw,
     91 			       record_table_t * rtable,
     92 			       record_policydb_table_t * rptable,
     93 			       dbase_policydb_t ** dbase);
     94 
     95 /* Attach to a shared policydb.
     96  * This implies drop_cache().
     97  * and prevents flush() and drop_cache()
     98  * until detached. */
     99 extern void dbase_policydb_attach(dbase_policydb_t * dbase,
    100 				  sepol_policydb_t * policydb);
    101 
    102 /* Detach from a shared policdb.
    103  * This implies drop_cache. */
    104 extern void dbase_policydb_detach(dbase_policydb_t * dbase);
    105 
    106 /* Release allocated resources */
    107 extern void dbase_policydb_release(dbase_policydb_t * dbase);
    108 
    109 /* POLICYDB database - method table implementation */
    110 extern dbase_table_t SEMANAGE_POLICYDB_DTABLE;
    111 
    112 #endif
    113