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 29struct dbase_policydb; 30typedef struct dbase_policydb dbase_policydb_t; 31 32typedef 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 37typedef 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 42typedef 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 47typedef 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 52typedef int (*record_policydb_table_count_t) (sepol_handle_t * h, 53 const sepol_policydb_t * p, 54 unsigned int *response); 55 56typedef 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 61typedef 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 */ 68typedef 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 */ 88extern 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. */ 99extern 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. */ 104extern void dbase_policydb_detach(dbase_policydb_t * dbase); 105 106/* Release allocated resources */ 107extern void dbase_policydb_release(dbase_policydb_t * dbase); 108 109/* POLICYDB database - method table implementation */ 110extern dbase_table_t SEMANAGE_POLICYDB_DTABLE; 111 112#endif 113