修复域表配置计数bug:配置更新时,table->cfg_num与rulescan中实际的配置数可能不一致,导致扫描中rulescan产生调用无效subtype的错误日志。

This commit is contained in:
zhengchao
2016-12-28 18:06:34 +08:00
parent 621ae259fa
commit b17870141e
3 changed files with 138 additions and 32 deletions

View File

@@ -741,6 +741,7 @@ int Maat_full_scan_string_detail(Maat_feather_t feather,int table_id
_compile_result_t compile_result[rule_num];//dynamic array
struct _Maat_table_info_t *p_table=NULL;
struct timespec start,end;
_Maat_scanner_t* my_scanner=NULL;
if(data==NULL||data_len<=0)
{
return 0;
@@ -756,6 +757,7 @@ int Maat_full_scan_string_detail(Maat_feather_t feather,int table_id
_feather->scan_err_cnt++;
return -1;
}
if(p_table->cfg_num==0)
{
return 0;
@@ -778,17 +780,22 @@ int Maat_full_scan_string_detail(Maat_feather_t feather,int table_id
scan_data.text_data.text=data;
scan_data.text_data.tlen=data_len;
scan_data.text_data.toffset=0;
_Maat_scanner_t* my_scanner=NULL;
my_scanner=_feather->scanner;
if(my_scanner==NULL)
{
return 0;
}
struct _region_stat_t * region_stat=NULL;
region_stat=&(my_scanner->region_counter[p_table->table_id]);
if(region_stat->cfg_num==0)
{
return 0;
}
assert(thread_num<_feather->scan_thread_num);
region_result=my_scanner->region_rslt_buff+MAX_SCANNER_HIT_NUM*thread_num;
INC_SCANNER_REF(my_scanner, thread_num);
if(p_table->expr_rule_cnt>0)
if(region_stat->expr_rule_cnt>0)
{
scan_data.rule_type=RULETYPE_STR;
scan_data.sub_type=sub_type;
@@ -798,7 +805,7 @@ int Maat_full_scan_string_detail(Maat_feather_t feather,int table_id
hit_region_cnt+=region_ret;
}
}
if(p_table->regex_rule_cnt>0)
if(region_stat->regex_rule_cnt>0)
{
scan_data.rule_type=RULETYPE_REG;
scan_data.sub_type=make_sub_type(table_id,CHARSET_NONE,0);
@@ -895,6 +902,12 @@ int Maat_scan_intval(Maat_feather_t feather,int table_id
{
return 0;
}
struct _region_stat_t * region_stat=NULL;
region_stat=&(my_scanner->region_counter[p_table->table_id]);
if(region_stat->cfg_num==0)
{
return 0;
}
aligment_int64_array_add(_feather->thread_call_cnt, thread_num, 1);
region_result=my_scanner->region_rslt_buff+MAX_SCANNER_HIT_NUM*thread_num;
@@ -965,19 +978,25 @@ int Maat_scan_proto_addr(Maat_feather_t feather,int table_id
{
return 0;
}
if(p_table->ipv4_rule_cnt==0&&addr->addrtype==ADDR_TYPE_IPV4)
{
return 0;
}
if(p_table->ipv6_rule_cnt==0&&addr->addrtype==ADDR_TYPE_IPV6)
{
return 0;
}
my_scanner=_feather->scanner;
if(my_scanner==NULL)
{
return 0;
}
struct _region_stat_t * region_stat=NULL;
region_stat=&(my_scanner->region_counter[p_table->table_id]);
if(region_stat->cfg_num==0)
{
return 0;
}
if(region_stat->ipv4_rule_cnt==0&&addr->addrtype==ADDR_TYPE_IPV4)
{
return 0;
}
if(region_stat->ipv6_rule_cnt==0&&addr->addrtype==ADDR_TYPE_IPV6)
{
return 0;
}
aligment_int64_array_add(_feather->thread_call_cnt, thread_num, 1);
ip_scan_data.rule_type=RULETYPE_IPv4;
@@ -1083,7 +1102,8 @@ stream_para_t Maat_stream_scan_string_start(Maat_feather_t feather,int table_id,
{
return sp;
}
struct _region_stat_t * region_stat=NULL;
region_stat=&(scanner->region_counter[p_table->table_id]);
INC_SCANNER_REF(scanner, thread_num);
sp->table_id=table_id;
@@ -1096,11 +1116,11 @@ stream_para_t Maat_stream_scan_string_start(Maat_feather_t feather,int table_id,
{
sp->do_merge=1;
}
if(p_table->expr_rule_cnt>0)
if(region_stat->expr_rule_cnt>0)
{
sp->do_expr=1;
}
if(p_table->regex_rule_cnt>0)
if(region_stat->regex_rule_cnt>0)
{
sp->do_regex=1;
}
@@ -1144,10 +1164,9 @@ int Maat_stream_scan_string_detail(stream_para_t* stream_para
return 0;
}
p_table=sp->feather->p_table_info[sp->table_id];
if(p_table->cfg_num==0)
{
return 0;
}
//table rule num is already judged in Maat_stream_scan_string_start
if(p_table->table_type==TABLE_TYPE_EXPR_PLUS&&(_mid==NULL||_mid->is_set_district!=1))
{
sp->feather->scan_err_cnt++;