/* * Copyright (C) 2006 Tresys Technology, LLC * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Copyright (C) 2005 Red Hat, Inc. */ #ifndef _SEMANAGE_DATABASE_POLICYDB_INTERNAL_H_ #define _SEMANAGE_DATABASE_POLICYDB_INTERNAL_H_ #include <sepol/handle.h> #include <sepol/policydb.h> #include "database.h" #include "handle.h" struct dbase_policydb; typedef struct dbase_policydb dbase_policydb_t; typedef int (*record_policydb_table_add_t) (sepol_handle_t * h, sepol_policydb_t * p, const record_key_t * rkey, const record_t * record); typedef int (*record_policydb_table_modify_t) (sepol_handle_t * h, sepol_policydb_t * p, const record_key_t * rkey, const record_t * record); typedef int (*record_policydb_table_set_t) (sepol_handle_t * h, sepol_policydb_t * p, const record_key_t * rkey, const record_t * record); typedef int (*record_policydb_table_query_t) (sepol_handle_t * h, const sepol_policydb_t * p, const record_key_t * rkey, record_t ** response); typedef int (*record_policydb_table_count_t) (sepol_handle_t * h, const sepol_policydb_t * p, unsigned int *response); typedef int (*record_policydb_table_exists_t) (sepol_handle_t * h, const sepol_policydb_t * p, const record_key_t * rkey, int *response); typedef int (*record_policydb_table_iterate_t) (sepol_handle_t * h, const sepol_policydb_t * p, int (*fn) (const record_t * r, void *fn_arg), void *arg); /* POLICYDB extension to RECORD interface - method table */ typedef struct record_policydb_table { /* Add policy record */ record_policydb_table_add_t add; /* Modify policy record, or add if * the key isn't found */ record_policydb_table_modify_t modify; /* Set policy record */ record_policydb_table_set_t set; /* Query policy record - return the record * or NULL if it isn't found */ record_policydb_table_query_t query; /* Count records */ record_policydb_table_count_t count; /* Check if a record exists */ record_policydb_table_exists_t exists; /* Iterate over records */ record_policydb_table_iterate_t iterate; } record_policydb_table_t; /* Initialize database */ extern int dbase_policydb_init(semanage_handle_t * handle, const char *path_ro, const char *path_rw, record_table_t * rtable, record_policydb_table_t * rptable, dbase_policydb_t ** dbase); /* Attach to a shared policydb. * This implies drop_cache(). * and prevents flush() and drop_cache() * until detached. */ extern void dbase_policydb_attach(dbase_policydb_t * dbase, sepol_policydb_t * policydb); /* Detach from a shared policdb. * This implies drop_cache. */ extern void dbase_policydb_detach(dbase_policydb_t * dbase); /* Release allocated resources */ extern void dbase_policydb_release(dbase_policydb_t * dbase); /* POLICYDB database - method table implementation */ extern dbase_table_t SEMANAGE_POLICYDB_DTABLE; #endif