From ee7bf1dc28e3712e4aa523a47c3f31f1b9cb7ae3 Mon Sep 17 00:00:00 2001 From: John Johansen Date: Wed, 3 Sep 2014 14:24:37 -0700 Subject: [PATCH] parser: Refactor rule accumulation to use some helper functions Signed-off-by: John Johansen Acked-by: Steve Beattie Acked-by: Seth Arnold --- parser/libapparmor_re/aare_rules.cc | 26 +++++++++++++++++--------- parser/libapparmor_re/aare_rules.h | 1 + 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/parser/libapparmor_re/aare_rules.cc b/parser/libapparmor_re/aare_rules.cc index c730d6c9c..dcf0aab4a 100644 --- a/parser/libapparmor_re/aare_rules.cc +++ b/parser/libapparmor_re/aare_rules.cc @@ -76,6 +76,21 @@ void aare_reset_matchflags(void) #undef RESET_FLAGS } +void aare_rules::add_to_rules(Node *tree, Node *perms) +{ + if (reverse) + flip_tree(tree); + if (root) + root = new AltNode(root, new CatNode(tree, perms)); + else + root = new CatNode(tree, perms); +} + +static Node *cat_with_null_seperator(Node *l, Node *r) +{ + return new CatNode(new CatNode(l, new CharNode(0)), r); +} + bool aare_rules::add_rule_vec(int deny, uint32_t perms, uint32_t audit, int count, const char **rulev, dfaflags_t flags) { @@ -89,13 +104,9 @@ bool aare_rules::add_rule_vec(int deny, uint32_t perms, uint32_t audit, return false; for (int i = 1; i < count; i++) { Node *subtree = NULL; - Node *node = new CharNode(0); - if (!node) - return false; - tree = new CatNode(tree, node); if (regex_parse(&subtree, rulev[i])) return false; - tree = new CatNode(tree, subtree); + tree = cat_with_null_seperator(tree, subtree); } /* @@ -200,10 +211,7 @@ bool aare_rules::add_rule_vec(int deny, uint32_t perms, uint32_t audit, cerr << "\n\n"; } - if (root) - root = new AltNode(root, new CatNode(tree, accept)); - else - root = new CatNode(tree, accept); + add_to_rules(tree, accept); rule_count++; diff --git a/parser/libapparmor_re/aare_rules.h b/parser/libapparmor_re/aare_rules.h index e6bc8fde4..ba3266292 100644 --- a/parser/libapparmor_re/aare_rules.h +++ b/parser/libapparmor_re/aare_rules.h @@ -28,6 +28,7 @@ class aare_rules { Node *root; + void add_to_rules(Node *tree, Node *perms); public: int reverse; int rule_count;