Use template macros for code reuse, and append to linked lists

Add to the end of linked lists for correct list ordering, but btrees
cannot obey this ordering.
Also, update the unit tests accordingly.
And fix compile with WITHOUT_USERAUTH.
pull/48/head
Soner Tari 3 years ago
parent 4f36a21c78
commit 2ff0f728e5

@ -32,6 +32,26 @@
#include "log.h" #include "log.h"
#include "util.h" #include "util.h"
#define free_list(list, type) { \
while (list) { \
type *next = (list)->next; \
free(list); \
list = next; \
}}
#define append_list(list, value, type) { \
type *l = *list; \
while (l) { \
if (!l->next) \
break; \
l = l->next; \
} \
if (l) \
l->next = value; \
else \
*list = value; \
}
#ifndef WITHOUT_USERAUTH #ifndef WITHOUT_USERAUTH
void void
filter_userlist_free(userlist_t *ul) filter_userlist_free(userlist_t *ul)
@ -56,8 +76,8 @@ filter_userlist_copy(userlist_t *userlist, const char *argv0, userlist_t **ul)
du->user = strdup(userlist->user); du->user = strdup(userlist->user);
if (!du->user) if (!du->user)
return oom_return(argv0); return oom_return(argv0);
du->next = *ul;
*ul = du; append_list(ul, du, userlist_t)
userlist = userlist->next; userlist = userlist->next;
} }
@ -142,8 +162,8 @@ filter_userlist_set(char *value, int line_num, userlist_t **list, const char *li
ul->user = strdup(argv[argc]); ul->user = strdup(argv[argc]);
if (!ul->user) if (!ul->user)
return oom_return_na(); return oom_return_na();
ul->next = *list;
*list = ul; append_list(list, ul, userlist_t)
} }
return 0; return 0;
} }
@ -276,6 +296,7 @@ filter_list_free(filter_list_t *list)
free(list); free(list);
} }
#ifndef WITHOUT_USERAUTH
#define free_keyword(p) { \ #define free_keyword(p) { \
free(*p->keyword); \ free(*p->keyword); \
filter_list_free(*p->list); \ filter_list_free(*p->list); \
@ -309,6 +330,7 @@ filter_user_free(filter_user_t *user)
#define free_user(p) { \ #define free_user(p) { \
filter_user_free(*p); \ filter_user_free(*p); \
free(*p); } free(*p); }
#endif /* !WITHOUT_USERAUTH */
void void
filter_free(opts_t *opts) filter_free(opts_t *opts)
@ -367,22 +389,6 @@ filter_free(opts_t *opts)
opts->filter = NULL; opts->filter = NULL;
} }
static void
filter_macro_value_append(value_t **list, value_t *value)
{
value_t *l = *list;
while (l) {
if (!l->next)
break;
l = l->next;
}
if (l)
l->next = value;
else
*list = value;
}
int int
filter_macro_copy(macro_t *macro, const char *argv0, opts_t *opts) filter_macro_copy(macro_t *macro, const char *argv0, opts_t *opts)
{ {
@ -407,35 +413,18 @@ filter_macro_copy(macro_t *macro, const char *argv0, opts_t *opts)
if (!v->value) if (!v->value)
return oom_return(argv0); return oom_return(argv0);
filter_macro_value_append(&m->value, v); append_list(&m->value, v, value_t)
value = value->next; value = value->next;
} }
m->next = opts->macro; append_list(&opts->macro, m, macro_t)
opts->macro = m;
macro = macro->next; macro = macro->next;
} }
return 0; return 0;
} }
static void
filter_rule_append(filter_rule_t **list, filter_rule_t *rule)
{
filter_rule_t *l = *list;
while (l) {
if (!l->next)
break;
l = l->next;
}
if (l)
l->next = rule;
else
*list = rule;
}
int int
filter_rules_copy(filter_rule_t *rule, const char *argv0, opts_t *opts) filter_rules_copy(filter_rule_t *rule, const char *argv0, opts_t *opts)
{ {
@ -497,7 +486,7 @@ filter_rules_copy(filter_rule_t *rule, const char *argv0, opts_t *opts)
// The action field is not a pointer, hence the direct assignment (copy) // The action field is not a pointer, hence the direct assignment (copy)
r->action = rule->action; r->action = rule->action;
filter_rule_append(&opts->filter_rules, r); append_list(&opts->filter_rules, r, filter_rule_t)
rule = rule->next; rule = rule->next;
} }
@ -690,18 +679,7 @@ out:
filter_port_list_t *s = malloc(sizeof(filter_port_list_t)); \ filter_port_list_t *s = malloc(sizeof(filter_port_list_t)); \
memset(s, 0, sizeof(filter_port_list_t)); \ memset(s, 0, sizeof(filter_port_list_t)); \
s->port = *p; \ s->port = *p; \
s->next = port; \ append_list(&port, s, filter_port_list_t) }
port = s; }
static void
filter_tmp_port_list_free(filter_port_list_t *port_list)
{
while (port_list) {
filter_port_list_t *next = port_list->next;
free(port_list);
port_list = next;
}
}
static char * static char *
filter_sites_str(filter_site_list_t *site_list) filter_sites_str(filter_site_list_t *site_list)
@ -738,7 +716,7 @@ filter_sites_str(filter_site_list_t *site_list)
ports_substring ? "\n port substring:" : "", STRORNONE(ports_substring)) < 0) { ports_substring ? "\n port substring:" : "", STRORNONE(ports_substring)) < 0) {
if (ports_exact) { if (ports_exact) {
free(ports_exact); free(ports_exact);
filter_tmp_port_list_free(port); free_list(port, filter_port_list_t)
} }
if (ports_substring) if (ports_substring)
free(ports_substring); free(ports_substring);
@ -746,7 +724,7 @@ filter_sites_str(filter_site_list_t *site_list)
} }
if (ports_exact) { if (ports_exact) {
free(ports_exact); free(ports_exact);
filter_tmp_port_list_free(port); free_list(port, filter_port_list_t)
} }
if (ports_substring) if (ports_substring)
free(ports_substring); free(ports_substring);
@ -785,11 +763,7 @@ filter_list_sub_str(filter_site_list_t *list, char *old_s, const char *name)
static void static void
filter_tmp_site_list_free(filter_site_list_t **list) filter_tmp_site_list_free(filter_site_list_t **list)
{ {
while (*list) { free_list(*list, filter_site_list_t)
filter_site_list_t *next = (*list)->next;
free(*list);
*list = next;
}
*list = NULL; *list = NULL;
} }
@ -803,8 +777,7 @@ filter_list_str(filter_list_t *list)
filter_site_list_t *s = malloc(sizeof(filter_site_list_t)); \ filter_site_list_t *s = malloc(sizeof(filter_site_list_t)); \
memset(s, 0, sizeof(filter_site_list_t)); \ memset(s, 0, sizeof(filter_site_list_t)); \
s->site = *p; \ s->site = *p; \
s->next = site; \ append_list(&site, s, filter_site_list_t) }
site = s; }
if (list->ip_btree) { if (list->ip_btree) {
__kb_traverse(filter_site_p_t, list->ip_btree, build_site_list); __kb_traverse(filter_site_p_t, list->ip_btree, build_site_list);
@ -902,19 +875,14 @@ filter_ip_btree_str(kbtree_t(ip) *ip_btree)
filter_ip_list_t *i = malloc(sizeof(filter_ip_list_t)); \ filter_ip_list_t *i = malloc(sizeof(filter_ip_list_t)); \
memset(i, 0, sizeof(filter_ip_list_t)); \ memset(i, 0, sizeof(filter_ip_list_t)); \
i->ip = *p; \ i->ip = *p; \
i->next = ip; \ append_list(&ip, i, filter_ip_list_t) }
ip = i; }
filter_ip_list_t *ip = NULL; filter_ip_list_t *ip = NULL;
__kb_traverse(filter_ip_p_t, ip_btree, build_ip_list); __kb_traverse(filter_ip_p_t, ip_btree, build_ip_list);
char *s = filter_ip_list_str(ip); char *s = filter_ip_list_str(ip);
while (ip) { free_list(ip, filter_ip_list_t)
filter_ip_list_t *next = ip->next;
free(ip);
ip = next;
}
return s; return s;
} }
@ -966,8 +934,7 @@ out:
filter_user_list_t *u = malloc(sizeof(filter_user_list_t)); \ filter_user_list_t *u = malloc(sizeof(filter_user_list_t)); \
memset(u, 0, sizeof(filter_user_list_t)); \ memset(u, 0, sizeof(filter_user_list_t)); \
u->user = *p; \ u->user = *p; \
u->next = user; \ append_list(&user, u, filter_user_list_t) }
user = u; }
static char * static char *
filter_user_btree_str(kbtree_t(user) *user_btree) filter_user_btree_str(kbtree_t(user) *user_btree)
@ -980,11 +947,7 @@ filter_user_btree_str(kbtree_t(user) *user_btree)
char *s = filter_user_list_str(user); char *s = filter_user_list_str(user);
while (user) { free_list(user, filter_user_list_t)
filter_user_list_t *next = user->next;
free(user);
user = next;
}
return s; return s;
} }
@ -1032,19 +995,14 @@ filter_keyword_btree_str(kbtree_t(keyword) *keyword_btree)
filter_keyword_list_t *k = malloc(sizeof(filter_keyword_list_t)); \ filter_keyword_list_t *k = malloc(sizeof(filter_keyword_list_t)); \
memset(k, 0, sizeof(filter_keyword_list_t)); \ memset(k, 0, sizeof(filter_keyword_list_t)); \
k->keyword = *p; \ k->keyword = *p; \
k->next = keyword; \ append_list(&keyword, k, filter_keyword_list_t) }
keyword = k; }
filter_keyword_list_t *keyword = NULL; filter_keyword_list_t *keyword = NULL;
__kb_traverse(filter_keyword_p_t, keyword_btree, build_keyword_list); __kb_traverse(filter_keyword_p_t, keyword_btree, build_keyword_list);
char *s = filter_keyword_list_str(keyword); char *s = filter_keyword_list_str(keyword);
while (keyword) { free_list(keyword, filter_keyword_list_t)
filter_keyword_list_t *next = keyword->next;
free(keyword);
keyword = next;
}
return s; return s;
} }
@ -1106,11 +1064,7 @@ filter_userkeyword_btree_str(kbtree_t(user) *user_btree)
char *s = filter_userkeyword_list_str(user); char *s = filter_userkeyword_list_str(user);
while (user) { free_list(user, filter_user_list_t)
filter_user_list_t *next = user->next;
free(user);
user = next;
}
return s; return s;
} }
#endif /* !WITHOUT_USERAUTH */ #endif /* !WITHOUT_USERAUTH */
@ -1381,7 +1335,7 @@ filter_passsite_set(opts_t *opts, char *value, int line_num)
rule->cn = 1; rule->cn = 1;
rule->action.pass = 1; rule->action.pass = 1;
filter_rule_append(&opts->filter_rules, rule); append_list(&opts->filter_rules, rule, filter_rule_t)
#ifdef DEBUG_OPTS #ifdef DEBUG_OPTS
filter_rule_dbg_print(rule); filter_rule_dbg_print(rule);
@ -1463,11 +1417,10 @@ filter_macro_set(opts_t *opts, char *value, int line_num)
if (!v->value) if (!v->value)
return oom_return_na(); return oom_return_na();
filter_macro_value_append(&macro->value, v); append_list(&macro->value, v, value_t)
} }
macro->next = opts->macro; append_list(&opts->macro, macro, macro_t)
opts->macro = macro;
#ifdef DEBUG_OPTS #ifdef DEBUG_OPTS
log_dbg_printf("Macro: %s = %s\n", macro->name, filter_value_str(macro->value)); log_dbg_printf("Macro: %s = %s\n", macro->name, filter_value_str(macro->value));
@ -1837,7 +1790,7 @@ filter_rule_translate(opts_t *opts, const char *name, int argc, char **argv, int
rule->dstip = 1; rule->dstip = 1;
} }
filter_rule_append(&opts->filter_rules, rule); append_list(&opts->filter_rules, rule, filter_rule_t)
#ifdef DEBUG_OPTS #ifdef DEBUG_OPTS
filter_rule_dbg_print(rule); filter_rule_dbg_print(rule);
@ -2498,8 +2451,7 @@ filter_ip_get(filter_t *filter, filter_rule_t *rule)
ip_list->ip = ip; ip_list->ip = ip;
ip_list->next = filter->ip_list; append_list(&filter->ip_list, ip_list, filter_ip_list_t)
filter->ip_list = ip_list;
} }
} }
return ip; return ip;
@ -2599,8 +2551,7 @@ filter_keyword_get(filter_t *filter, filter_user_t *user, filter_rule_t *rule)
keyword_list->keyword = keyword; keyword_list->keyword = keyword;
filter_keyword_list_t **list = user ? &user->keyword_list : &filter->keyword_list; filter_keyword_list_t **list = user ? &user->keyword_list : &filter->keyword_list;
keyword_list->next = *list; append_list(list, keyword_list, filter_keyword_list_t)
*list = keyword_list;
} }
} }
return keyword; return keyword;
@ -2691,8 +2642,7 @@ filter_user_get(filter_t *filter, filter_rule_t *rule)
user_list->user = user; user_list->user = user;
user_list->next = filter->user_list; append_list(&filter->user_list, user_list, filter_user_list_t)
filter->user_list = user_list;
} }
} }
return user; return user;
@ -2765,6 +2715,7 @@ filter_set(filter_rule_t *rule)
} }
#ifdef DEBUG_OPTS #ifdef DEBUG_OPTS
#ifndef WITHOUT_USERAUTH
#define traverse_user(p) { if (cnt == 0) y = *p; ++cnt; } #define traverse_user(p) { if (cnt == 0) y = *p; ++cnt; }
int cnt = 0; int cnt = 0;
if (filter->user_btree) { if (filter->user_btree) {
@ -2785,14 +2736,15 @@ filter_set(filter_rule_t *rule)
if (cnt) if (cnt)
fprintf(stderr, "keyword_exact first element: %s == %s\n", x2->keyword, y2->keyword); fprintf(stderr, "keyword_exact first element: %s == %s\n", x2->keyword, y2->keyword);
} }
#define traverse_ip(p) { if (cnt == 0) y3 = *p; ++cnt; } #endif /* !WITHOUT_USERAUTH */
#define traverse_ip(p) { if (cnt2 == 0) y3 = *p; ++cnt2; }
if (filter->ip_btree) { if (filter->ip_btree) {
cnt = 0; int cnt2 = 0;
filter_ip_p_t x3, y3 = NULL; filter_ip_p_t x3, y3 = NULL;
__kb_traverse(filter_ip_p_t, filter->ip_btree, traverse_ip); __kb_traverse(filter_ip_p_t, filter->ip_btree, traverse_ip);
__kb_get_first(filter_ip_p_t, filter->ip_btree, x3); __kb_get_first(filter_ip_p_t, filter->ip_btree, x3);
fprintf(stderr, "ip_exact # of elements from traversal: %d\n", cnt); fprintf(stderr, "ip_exact # of elements from traversal: %d\n", cnt2);
if (cnt) if (cnt2)
fprintf(stderr, "ip_exact first element: %s == %s\n", x3->ip, y3->ip); fprintf(stderr, "ip_exact first element: %s == %s\n", x3->ip, y3->ip);
} }
#endif /* DEBUG_OPTS */ #endif /* DEBUG_OPTS */

@ -1505,17 +1505,17 @@ START_TEST(set_filter_rule_08)
"keyword_filter_substr->\n" "keyword_filter_substr->\n"
"all_user_filter->\n" "all_user_filter->\n"
"ip_filter_exact->\n" "ip_filter_exact->\n"
" ip 0 192.168.0.2 (exact)= \n" " ip 0 192.168.0.1 (exact)= \n"
" ip exact: \n" " ip exact: \n"
" 0: 192.168.0.3 (exact, action=||||match, log=|||||, precedence=1)\n" " 0: 192.168.0.2 (exact, action=divert|split|pass||, log=!connect|master|!cert|content|!pcap|mirror, precedence=2)\n"
" 1: 192.168.0.1 (exact, action=||||match, log=|||||, precedence=1)\n" " 1: 192.168.0.3 (exact, action=||||match, log=|||||, precedence=1)\n"
" ip 1 192.168.0.2 (exact)= \n"
" ip exact: \n"
" 0: 192.168.0.1 (exact, action=||||match, log=|||||, precedence=1)\n"
" 1: 192.168.0.3 (exact, action=||||match, log=|||||, precedence=1)\n"
" ip substring: \n" " ip substring: \n"
" 0: 192.168.0. (substring, action=||||match, log=|||||, precedence=1)\n" " 0: 192.168.0. (substring, action=||||match, log=|||||, precedence=1)\n"
" 1: (all_sites, substring, action=||||match, log=|||||, precedence=1)\n" " 1: (all_sites, substring, action=||||match, log=|||||, precedence=1)\n"
" ip 1 192.168.0.1 (exact)= \n"
" ip exact: \n"
" 0: 192.168.0.3 (exact, action=||||match, log=|||||, precedence=1)\n"
" 1: 192.168.0.2 (exact, action=divert|split|pass||, log=!connect|master|!cert|content|!pcap|mirror, precedence=2)\n"
"ip_filter_substr->\n" "ip_filter_substr->\n"
"all_filter->\n"), "failed to translate rule: %s", s); "all_filter->\n"), "failed to translate rule: %s", s);
free(s); free(s);
@ -1615,7 +1615,16 @@ START_TEST(set_filter_rule_09)
"keyword_filter_substr->\n" "keyword_filter_substr->\n"
"all_user_filter->\n" "all_user_filter->\n"
"ip_filter_exact->\n" "ip_filter_exact->\n"
" ip 0 192.168.0.2 (exact)= \n" " ip 0 192.168.0.1 (exact)= \n"
" ip exact: \n"
" 0: 192.168.0.2 (exact, action=||||, log=|||||, precedence=0)\n"
" port exact:\n"
" 0: 443 (exact, action=divert|split|pass||, log=!connect|master|!cert|content|!pcap|mirror, precedence=3)\n"
" 1: 192.168.0.3 (exact, action=||||match, log=|||||!mirror, precedence=2)\n"
" port exact:\n"
" 0: 443 (exact, action=||||match, log=|||||, precedence=2)\n"
" 1: 80 (exact, action=||||match, log=|||||, precedence=2)\n"
" ip 1 192.168.0.2 (exact)= \n"
" ip exact: \n" " ip exact: \n"
" 0: 192.168.0.1 (exact, action=||||, log=|||||, precedence=0)\n" " 0: 192.168.0.1 (exact, action=||||, log=|||||, precedence=0)\n"
" port exact:\n" " port exact:\n"
@ -1623,15 +1632,6 @@ START_TEST(set_filter_rule_09)
" port substring:\n" " port substring:\n"
" 0: 80 (substring, action=||||match, log=|||||, precedence=2)\n" " 0: 80 (substring, action=||||match, log=|||||, precedence=2)\n"
" 1: (all_ports, substring, action=||||match, log=|||||, precedence=2)\n" " 1: (all_ports, substring, action=||||match, log=|||||, precedence=2)\n"
" ip 1 192.168.0.1 (exact)= \n"
" ip exact: \n"
" 0: 192.168.0.3 (exact, action=||||match, log=|||||!mirror, precedence=2)\n"
" port exact:\n"
" 0: 80 (exact, action=||||match, log=|||||, precedence=2)\n"
" 1: 443 (exact, action=||||match, log=|||||, precedence=2)\n"
" 1: 192.168.0.2 (exact, action=||||, log=|||||, precedence=0)\n"
" port exact:\n"
" 0: 443 (exact, action=divert|split|pass||, log=!connect|master|!cert|content|!pcap|mirror, precedence=3)\n"
"ip_filter_substr->\n" "ip_filter_substr->\n"
"all_filter->\n"), "failed to translate rule: %s", s); "all_filter->\n"), "failed to translate rule: %s", s);
free(s); free(s);
@ -1721,17 +1721,17 @@ START_TEST(set_filter_rule_10)
"userkeyword_filter_exact->\n" "userkeyword_filter_exact->\n"
"userkeyword_filter_substr->\n" "userkeyword_filter_substr->\n"
"user_filter_exact->\n" "user_filter_exact->\n"
" user 0 root (exact)= \n" " user 0 daemon (exact)= \n"
" sni exact: \n" " sni exact: \n"
" 0: example2.com (exact, action=||||match, log=|||||, precedence=3)\n" " 0: example.com (exact, action=||||match, log=|||||, precedence=3)\n"
" 1: example.com (exact, action=divert|split|pass||, log=!connect|master|!cert|content|!pcap|mirror, precedence=4)\n" " 1: example3.com (exact, action=||||match, log=|||||, precedence=3)\n"
" user 1 daemon (exact)= \n"
" sni exact: \n"
" 0: example3.com (exact, action=||||match, log=|||||, precedence=3)\n"
" 1: example.com (exact, action=||||match, log=|||||, precedence=3)\n"
" sni substring: \n" " sni substring: \n"
" 0: .example.com (substring, action=||||match, log=|||||, precedence=3)\n" " 0: .example.com (substring, action=||||match, log=|||||, precedence=3)\n"
" 1: (all_sites, substring, action=||||match, log=|||||, precedence=3)\n" " 1: (all_sites, substring, action=||||match, log=|||||, precedence=3)\n"
" user 1 root (exact)= \n"
" sni exact: \n"
" 0: example.com (exact, action=divert|split|pass||, log=!connect|master|!cert|content|!pcap|mirror, precedence=4)\n"
" 1: example2.com (exact, action=||||match, log=|||||, precedence=3)\n"
"user_filter_substr->\n" "user_filter_substr->\n"
"keyword_filter_exact->\n" "keyword_filter_exact->\n"
"keyword_filter_substr->\n" "keyword_filter_substr->\n"
@ -1852,36 +1852,36 @@ START_TEST(set_filter_rule_11)
s = filter_str(opts->filter); s = filter_str(opts->filter);
fail_unless(!strcmp(s, "filter=>\n" fail_unless(!strcmp(s, "filter=>\n"
"userkeyword_filter_exact->\n" "userkeyword_filter_exact->\n"
" user 0 root (exact)=\n" " user 0 daemon (exact)=\n"
" keyword exact:\n" " keyword exact:\n"
" keyword 0 desc (exact)= \n" " keyword 0 desc (exact)= \n"
" cn exact: \n" " cn exact: \n"
" 0: example2.com (exact, action=||||match, log=|||||, precedence=4)\n" " 0: example.com (exact, action=||||match, log=|||||, precedence=4)\n"
" 1: example.com (exact, action=divert|split|pass||, log=!connect|master|!cert|content|!pcap|mirror, precedence=5)\n" " 1: example3.com (exact, action=||||match, log=|||||, precedence=4)\n"
" user 1 daemon (exact)=\n"
" keyword exact:\n"
" keyword 0 desc2 (exact)= \n"
" cn exact: \n"
" 0: example4.com (exact, action=||||match, log=|||||, precedence=4)\n"
" keyword 1 desc (exact)= \n"
" cn exact: \n"
" 0: example3.com (exact, action=||||match, log=|||||, precedence=4)\n"
" 1: example.com (exact, action=||||match, log=|||||, precedence=4)\n"
" cn substring: \n" " cn substring: \n"
" 0: .example.com (substring, action=||||match, log=|||||, precedence=4)\n" " 0: .example.com (substring, action=||||match, log=|||||, precedence=4)\n"
" 1: (all_sites, substring, action=||||match, log=|||||, precedence=4)\n" " 1: (all_sites, substring, action=||||match, log=|||||, precedence=4)\n"
" keyword 1 desc2 (exact)= \n"
" cn exact: \n"
" 0: example4.com (exact, action=||||match, log=|||||, precedence=4)\n"
" user 1 root (exact)=\n"
" keyword exact:\n"
" keyword 0 desc (exact)= \n"
" cn exact: \n"
" 0: example.com (exact, action=divert|split|pass||, log=!connect|master|!cert|content|!pcap|mirror, precedence=5)\n"
" 1: example2.com (exact, action=||||match, log=|||||, precedence=4)\n"
"userkeyword_filter_substr->\n" "userkeyword_filter_substr->\n"
"user_filter_exact->\n" "user_filter_exact->\n"
"user_filter_substr->\n" "user_filter_substr->\n"
"keyword_filter_exact->\n" "keyword_filter_exact->\n"
" keyword 0 desc3 (exact)= \n" " keyword 0 desc (exact)= \n"
" uri exact: \n"
" 0: example6.com (exact, action=||||match, log=|||||, precedence=3)\n"
" keyword 1 desc (exact)= \n"
" cn exact: \n" " cn exact: \n"
" 0: example5.com (exact, action=||||match, log=|||||, precedence=3)\n" " 0: example5.com (exact, action=||||match, log=|||||, precedence=3)\n"
" host substring: \n" " host substring: \n"
" 0: (all_sites, substring, action=||||match, log=|||||, precedence=3)\n" " 0: (all_sites, substring, action=||||match, log=|||||, precedence=3)\n"
" keyword 1 desc3 (exact)= \n"
" uri exact: \n"
" 0: example6.com (exact, action=||||match, log=|||||, precedence=3)\n"
"keyword_filter_substr->\n" "keyword_filter_substr->\n"
"all_user_filter->\n" "all_user_filter->\n"
"ip_filter_exact->\n" "ip_filter_exact->\n"
@ -1958,26 +1958,26 @@ START_TEST(set_filter_rule_12)
"keyword_filter_substr->\n" "keyword_filter_substr->\n"
"all_user_filter->\n" "all_user_filter->\n"
"ip_filter_exact->\n" "ip_filter_exact->\n"
" ip 0 192.168.0.2 (exact)= \n" " ip 0 192.168.0.1 (exact)= \n"
" ip exact: \n" " ip exact: \n"
" 0: 192.168.0.4 (exact, action=||||, log=|||||, precedence=0)\n" " 0: 192.168.0.3 (exact, action=||||, log=|||||, precedence=0)\n"
" port exact:\n" " port exact:\n"
" 0: 80 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n" " 0: 443 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n"
" 1: 443 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n" " 1: 80 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n"
" 1: 192.168.0.3 (exact, action=||||, log=|||||, precedence=0)\n" " 1: 192.168.0.4 (exact, action=||||, log=|||||, precedence=0)\n"
" port exact:\n" " port exact:\n"
" 0: 80 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n" " 0: 443 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n"
" 1: 443 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n" " 1: 80 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n"
" ip 1 192.168.0.1 (exact)= \n" " ip 1 192.168.0.2 (exact)= \n"
" ip exact: \n" " ip exact: \n"
" 0: 192.168.0.4 (exact, action=||||, log=|||||, precedence=0)\n" " 0: 192.168.0.3 (exact, action=||||, log=|||||, precedence=0)\n"
" port exact:\n" " port exact:\n"
" 0: 80 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n" " 0: 443 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n"
" 1: 443 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n" " 1: 80 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n"
" 1: 192.168.0.3 (exact, action=||||, log=|||||, precedence=0)\n" " 1: 192.168.0.4 (exact, action=||||, log=|||||, precedence=0)\n"
" port exact:\n" " port exact:\n"
" 0: 80 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n" " 0: 443 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n"
" 1: 443 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n" " 1: 80 (exact, action=||||match, log=|!master|||!pcap|, precedence=3)\n"
"ip_filter_substr->\n" "ip_filter_substr->\n"
"all_filter->\n"), "failed to translate rule: %s", s); "all_filter->\n"), "failed to translate rule: %s", s);
free(s); free(s);
@ -2051,26 +2051,26 @@ START_TEST(set_filter_rule_13)
s = filter_str(opts->filter); s = filter_str(opts->filter);
fail_unless(!strcmp(s, "filter=>\n" fail_unless(!strcmp(s, "filter=>\n"
"userkeyword_filter_exact->\n" "userkeyword_filter_exact->\n"
" user 0 root (exact)=\n" " user 0 daemon (exact)=\n"
" keyword exact:\n" " keyword exact:\n"
" keyword 0 desc2 (exact)= \n" " keyword 0 desc1 (exact)= \n"
" sni exact: \n" " sni exact: \n"
" 0: site2 (exact, action=||||match, log=connect|||content||, precedence=5)\n" " 0: site1 (exact, action=||||match, log=connect|||content||, precedence=5)\n"
" 1: site1 (exact, action=||||match, log=connect|||content||, precedence=5)\n" " 1: site2 (exact, action=||||match, log=connect|||content||, precedence=5)\n"
" keyword 1 desc1 (exact)= \n" " keyword 1 desc2 (exact)= \n"
" sni exact: \n" " sni exact: \n"
" 0: site2 (exact, action=||||match, log=connect|||content||, precedence=5)\n" " 0: site1 (exact, action=||||match, log=connect|||content||, precedence=5)\n"
" 1: site1 (exact, action=||||match, log=connect|||content||, precedence=5)\n" " 1: site2 (exact, action=||||match, log=connect|||content||, precedence=5)\n"
" user 1 daemon (exact)=\n" " user 1 root (exact)=\n"
" keyword exact:\n" " keyword exact:\n"
" keyword 0 desc2 (exact)= \n" " keyword 0 desc1 (exact)= \n"
" sni exact: \n" " sni exact: \n"
" 0: site2 (exact, action=||||match, log=connect|||content||, precedence=5)\n" " 0: site1 (exact, action=||||match, log=connect|||content||, precedence=5)\n"
" 1: site1 (exact, action=||||match, log=connect|||content||, precedence=5)\n" " 1: site2 (exact, action=||||match, log=connect|||content||, precedence=5)\n"
" keyword 1 desc1 (exact)= \n" " keyword 1 desc2 (exact)= \n"
" sni exact: \n" " sni exact: \n"
" 0: site2 (exact, action=||||match, log=connect|||content||, precedence=5)\n" " 0: site1 (exact, action=||||match, log=connect|||content||, precedence=5)\n"
" 1: site1 (exact, action=||||match, log=connect|||content||, precedence=5)\n" " 1: site2 (exact, action=||||match, log=connect|||content||, precedence=5)\n"
"userkeyword_filter_substr->\n" "userkeyword_filter_substr->\n"
"user_filter_exact->\n" "user_filter_exact->\n"
"user_filter_substr->\n" "user_filter_substr->\n"

Loading…
Cancel
Save