2005-04-17 02:20:36 +04:00
/* Authors: Karl MacMillan <kmacmillan@tresys.com>
* Frank Mayer < mayerf @ tresys . com >
*
* Copyright ( C ) 2003 - 2004 Tresys Technology , LLC
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , version 2.
*/
# ifndef _CONDITIONAL_H_
# define _CONDITIONAL_H_
# include "avtab.h"
# include "symtab.h"
# include "policydb.h"
2011-08-30 06:52:32 +04:00
# include "../include/conditional.h"
2005-04-17 02:20:36 +04:00
# define COND_EXPR_MAXDEPTH 10
/*
* A conditional expression is a list of operators and operands
* in reverse polish notation .
*/
struct cond_expr {
# define COND_BOOL 1 /* plain bool */
# define COND_NOT 2 /* !bool */
# define COND_OR 3 /* bool || bool */
# define COND_AND 4 /* bool && bool */
# define COND_XOR 5 /* bool ^ bool */
# define COND_EQ 6 /* bool == bool */
# define COND_NEQ 7 /* bool != bool */
2008-08-06 19:24:51 +04:00
# define COND_LAST COND_NEQ
2005-04-17 02:20:36 +04:00
__u32 expr_type ;
__u32 bool ;
struct cond_expr * next ;
} ;
/*
* Each cond_node contains a list of rules to be enabled / disabled
* depending on the current value of the conditional expression . This
* struct is for that list .
*/
struct cond_av_list {
struct avtab_node * node ;
struct cond_av_list * next ;
} ;
/*
* A cond node represents a conditional block in a policy . It
* contains a conditional expression , the current state of the expression ,
* two lists of rules to enable / disable depending on the value of the
* expression ( the true list corresponds to if and the false list corresponds
* to else ) . .
*/
struct cond_node {
int cur_state ;
struct cond_expr * expr ;
struct cond_av_list * true_list ;
struct cond_av_list * false_list ;
struct cond_node * next ;
} ;
2008-04-23 01:46:12 +04:00
int cond_policydb_init ( struct policydb * p ) ;
void cond_policydb_destroy ( struct policydb * p ) ;
2005-04-17 02:20:36 +04:00
2008-04-23 01:46:12 +04:00
int cond_init_bool_indexes ( struct policydb * p ) ;
2005-04-17 02:20:36 +04:00
int cond_destroy_bool ( void * key , void * datum , void * p ) ;
int cond_index_bool ( void * key , void * datum , void * datap ) ;
int cond_read_bool ( struct policydb * p , struct hashtab * h , void * fp ) ;
int cond_read_list ( struct policydb * p , void * fp ) ;
2010-10-14 01:50:25 +04:00
int cond_write_bool ( void * key , void * datum , void * ptr ) ;
int cond_write_list ( struct policydb * p , struct cond_node * list , void * fp ) ;
2005-04-17 02:20:36 +04:00
2015-07-11 00:19:56 +03:00
void cond_compute_av ( struct avtab * ctab , struct avtab_key * key ,
struct av_decision * avd , struct extended_perms * xperms ) ;
void cond_compute_xperms ( struct avtab * ctab , struct avtab_key * key ,
struct extended_perms_decision * xpermd ) ;
2005-04-17 02:20:36 +04:00
int evaluate_cond_node ( struct policydb * p , struct cond_node * node ) ;
# endif /* _CONDITIONAL_H_ */