/[pdpsoft]/trunk/grid-mw-security/ees/include/common/pdl.h
ViewVC logotype

Contents of /trunk/grid-mw-security/ees/include/common/pdl.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1123 - (show annotations) (download) (as text)
Fri Nov 13 16:00:45 2009 UTC (12 years, 2 months ago) by aramv
File MIME type: text/x-csrc
File size: 4246 byte(s)
Added functionality to create policies, pretty printer for debug purposes
1 /*!
2
3 \file pdl.h
4 \brief Callback functions for parser of the evaluation manager
5 \author Aram Verstegen
6
7 This header contains some callback functions used for the PDL parser:
8 It contains the following functions:
9
10 -# pdl_init(const char*): Inilizes the parser
11 -# pdl_term(void): terminates the parser
12 -# set_modules_path(record_t*): sets the path to use for plug-ins (used by the parser)
13 -# get_pdl_path(void): returns the path read from the config file or empty string if none was parsed
14 -# add_policy(record_t*, rule_t*): adds a new policy
15 -# add_rule(record_t*, record_t*, record_t*): adds a new rule
16 -# remove_policy(record_t* policy): removes a policy
17 -# add_variable(record_t* name, record_t* value): adds a variable (plug-in) to the list
18 -# allow_rules(int):
19 -# allowed_policy_rule(const char* label):
20
21 -# concat_strings(record_t*, record_t*): concatenates two strings
22 -# concat_strings_with_space(record_t*, record_t*): concatenates two strings separated by a space
23 */
24
25 #ifndef PDL_H
26 #define PDL_H
27 #if HAVE_CONFIG_H
28 #include "config.h"
29 #endif
30 #if HAVE_STDIO_H
31 #include <stdio.h>
32 #endif
33 #if HAVE_STDLIB_H
34 #include <stdlib.h>
35 #endif
36 #include "plugin_manager.h"
37 #include "eef_log.h"
38
39 #define TRUE 1
40 #define FALSE 0
41
42 /*!
43 * \brief Structure for symbols used by the parser internally
44 */
45 typedef struct record_s {
46 char* string; /*!< Hold the symbol that lex has found. */
47 int lineno; /*!< Hold the line number the symbol has been found. */
48 } record_t;
49
50
51 /*!
52 * \brief Structure keeps track of the variables, their value and the line number they are defined on.
53 */
54 typedef struct var_s {
55 char* name; /*!< Name of the variable. */
56 char* value; /*!< Value of the variable. */
57 unsigned int lineno; /*!< Line number the variable appears on. */
58 struct var_s* next; /*!< Next variable, or 0 if none. */
59 } var_t;
60
61 /*!
62 * \brief Structure to make a tree of
63 *
64 */
65 typedef struct rule_s {
66 unsigned int lineno; /*!< Line number where rule appeared. */
67 char* state; /*!< Name of the state.*/
68 struct rule_s* true_branch; /*!< True branch or NULL if none */
69 struct rule_s* false_branch; /*!< False branch or NULL if none */
70 struct rule_s* next; /*!< Next rule, or NULL if none */
71 } rule_t;
72
73 /*!
74 * \brief Structure to build a tree of plugins as defined in a policy in the config file
75 */
76 typedef struct policy_s {
77 /*eef_plugindl_t* current; *//*!< Pointer to the plug-in described by this policy rule */
78 /*eef_plugindl_t* next_success; *//*!< Pointer to the next plug-in if the last one exited successfully */
79 /*eef_plugindl_t* next_failure; *//*!< Pointer to the next plug-in if the last one exited unsuccessfully */
80 char* name;
81 unsigned int lineno;
82 rule_t* rules;
83 struct policy_s* next;
84 /*struct policy_s* prev;*/
85 } policy_t;
86
87 /* lifecycle functions */
88 EES_RC pdl_init(const char*);
89 EES_RC pdl_term(void);
90 EES_RC initialize_plugins(void);
91 EES_RC clean_variables_list(void);
92 EES_RC clean_rules_list(void);
93
94 /* callback functions */
95 void set_modules_path(record_t*);
96 void add_policy(record_t*, rule_t*);
97 rule_t * add_rule(record_t*, record_t*, record_t*);
98 const char * get_pdl_path(void);
99 void remove_policy(record_t* policy);
100 void add_variable(record_t* name, record_t* value);
101 EES_RC allow_rules(int);
102 EES_RC allowed_policy_rule(const char* label);
103
104 /* convenience methods used by the lexer */
105 record_t * concat_strings(record_t*, record_t*);
106 record_t * concat_strings_with_space(record_t*, record_t*);
107 char ** _var_to_argv(char*, int*);
108 var_t* get_variable_by_name(char*);
109 rule_t* find_state(rule_t* rule, const char* state);
110 rule_t* check_for_recursion(rule_t*, rule_t*);
111
112
113 /* Lex/Yacc stuff */
114 int yyerror(char*);
115 void set_yylval(record_t* r);
116
117 /* debug functions */
118 void print_policies(void);
119
120 #endif

grid.support@nikhef.nl
ViewVC Help
Powered by ViewVC 1.1.28