Evaluation Order为0时,策略执行顺序最靠后。

This commit is contained in:
zhengchao
2020-02-28 18:00:44 +08:00
parent b6fd57ffb9
commit af6f23fd13
3 changed files with 38 additions and 3 deletions

View File

@@ -114,7 +114,7 @@ static void compile_sort_para_set(struct compile_sort_para* para, const struct M
} }
static int compile_sort_para_compare(const struct compile_sort_para* a, const struct compile_sort_para* b) static int compile_sort_para_compare(const struct compile_sort_para* a, const struct compile_sort_para* b)
{ {
//If both of compile rule's execute sequences are specified, compile rule with lower execute sequence is priority. //If both of compile rule's evaluation order are specified, compile rule with small evaluation order is priority.
if(a->evaluation_order!=0 && b->evaluation_order!=0) if(a->evaluation_order!=0 && b->evaluation_order!=0)
{ {
if(a->evaluation_order - b->evaluation_order <0) if(a->evaluation_order - b->evaluation_order <0)
@@ -126,6 +126,11 @@ static int compile_sort_para_compare(const struct compile_sort_para* a, const st
return 1; return 1;
} }
} }
//If one of compile rule's evaluation order is zero, compile rule with big evaluation order is priority.
else if(a->evaluation_order + b->evaluation_order!= 0)
{
return (a->evaluation_order - b->evaluation_order >0) ? -1 : 1;
}
//If compile rule's execute sequences are not specified or equal. //If compile rule's execute sequences are not specified or equal.
if(a->group_cnt!=b->group_cnt) if(a->group_cnt!=b->group_cnt)
{ {

View File

@@ -1397,6 +1397,33 @@
] ]
} }
] ]
},
{
"compile_id": 168,
"service": 1,
"action": 1,
"do_blacklist": 1,
"do_log": 1,
"user_region": "EvaluationOrder",
"is_valid": "yes",
"evaluation_order":"0",
"groups": [
{
"group_name": "Untitled",
"regions": [
{
"table_name": "HTTP_URL",
"table_type": "string",
"table_content": {
"keywords": "2019/12/27",
"expr_type": "none",
"match_method": "sub",
"format": "uncase plain"
}
}
]
}
]
} }
], ],
"plugin_table": [ "plugin_table": [

View File

@@ -1417,7 +1417,7 @@ TEST(Policy, SubGroup)
TEST(Policy, EvaluationOrder) TEST(Policy, EvaluationOrder)
{ {
#define TestExecuteSequence #define EvaluationOrder
int ret=0, table_id=0; int ret=0, table_id=0;
size_t i=0; size_t i=0;
const char* url="cavemancircus.com/2019/12/27/pretty-girls-6/"; const char* url="cavemancircus.com/2019/12/27/pretty-girls-6/";
@@ -1431,8 +1431,10 @@ TEST(Policy, EvaluationOrder)
ret=Maat_full_scan_string(g_feather, table_id, CHARSET_GBK, url, strlen(url), ret=Maat_full_scan_string(g_feather, table_id, CHARSET_GBK, url, strlen(url),
result+i, NULL, 4-i, result+i, NULL, 4-i,
&mid, 0); &mid, 0);
EXPECT_EQ(ret, 2); EXPECT_EQ(ret, 3);
EXPECT_EQ(result[i].config_id, 166); EXPECT_EQ(result[i].config_id, 166);
EXPECT_EQ(result[i+1].config_id, 167);
EXPECT_EQ(result[i+2].config_id, 168);
i+=ret; i+=ret;
struct ipaddr ipv4_addr; struct ipaddr ipv4_addr;
@@ -1458,6 +1460,7 @@ TEST(Policy, EvaluationOrder)
EXPECT_EQ(result[0].config_id, 165); EXPECT_EQ(result[0].config_id, 165);
EXPECT_EQ(result[1].config_id, 166); EXPECT_EQ(result[1].config_id, 166);
EXPECT_EQ(result[2].config_id, 167); EXPECT_EQ(result[2].config_id, 167);
EXPECT_EQ(result[3].config_id, 168);
Maat_clean_status(&mid); Maat_clean_status(&mid);
} }