diff --git a/src/entry/Maat_api.cpp b/src/entry/Maat_api.cpp index f03c633..1868f83 100644 --- a/src/entry/Maat_api.cpp +++ b/src/entry/Maat_api.cpp @@ -426,7 +426,7 @@ Maat_feather_t Maat_feather(int max_thread_num,const char* table_info_path,void* { feather->GROUP_MODE_ON=1; } - for(j=0;jp_table_info[i].conj_cnt;j++) + for(j=0;jp_table_info[i]->conj_cnt;j++) { ret=map_register(feather->map_tablename2id,feather->p_table_info[i]->table_name[j],feather->p_table_info[i]->table_id); if(ret<0) diff --git a/src/entry/Maat_rule.cpp b/src/entry/Maat_rule.cpp index 613a473..f01bc9a 100644 --- a/src/entry/Maat_rule.cpp +++ b/src/entry/Maat_rule.cpp @@ -552,7 +552,7 @@ int read_table_info(struct _Maat_table_info_t** p_table_info,int num,const char* } if(p->table_id>=num) { - fprintf(stderr,"Maat read table info %s line %d error: table id %uh > %d.\n",table_info_path,i,p->table_id,num); + fprintf(stderr,"Maat read table info %s:%d error: table id %uh > %d.\n",table_info_path,i,p->table_id,num); MESA_handle_runtime_log(logger, RLOG_LV_FATAL,maat_module, "Maat read table info %s line %d error: table id %uh > %d.\n",table_info_path,i,p->table_id,num); @@ -571,7 +571,7 @@ int read_table_info(struct _Maat_table_info_t** p_table_info,int num,const char* memcpy(conj_table->table_name[conj_table->conj_cnt],p->table_name[0],MAX_TABLE_NAME_LEN); conj_table->conj_cnt++; MESA_handle_runtime_log(logger, RLOG_LV_INFO,maat_module, - "Maat read table info %s line %d error:conjunction %s with %s (id=%d,total=%d).\n" + "Maat read table info %s:%d:conjunction %s with %s (id=%d,total=%d).\n" ,table_info_path,i,p->table_name[0] ,conj_table->table_name[0],conj_table->table_id,conj_table->conj_cnt); //use goto to free the conjunctioned table_info @@ -2687,12 +2687,12 @@ void maat_update_cb(const char* table_name,const char* line,void *u_para) p_table=feather->p_table_info[table_id]; for(i=0;iconj_cnt;i++) { - if(0==memcmp(p_table->table_name[i],table_name,strlen(table_name)) + if(0==memcmp(p_table->table_name[i],table_name,strlen(table_name))) { p_table->updating_name=i; } } - assert(iconj_cnt); + assert(i<=p_table->conj_cnt); switch(feather->p_table_info[table_id]->table_type) { diff --git a/src/entry/Maat_stat.cpp b/src/entry/Maat_stat.cpp index 1eb4f39..8bdd7e0 100644 --- a/src/entry/Maat_stat.cpp +++ b/src/entry/Maat_stat.cpp @@ -28,7 +28,7 @@ void maat_stat_init(struct _Maat_feather_t* feather) int value=0; int i=0,j=0,offset=0; struct _Maat_table_info_t* p_table=NULL; - char conj_table_name[(MAX_TABLE_NAME_LEN+1)*MAX_CONJUNCTION_TABLE_NUM]={0} + char conj_table_name[(MAX_TABLE_NAME_LEN+1)*MAX_CONJUNCTION_TABLE_NUM]={0}; feather->stat_handle=FS_create_handle(); FS_set_para(feather->stat_handle, OUTPUT_DEVICE, feather->stat_file, strlen(feather->stat_file)+1); diff --git a/test/maat_json.json b/test/maat_json.json index 889e4e3..0804d84 100644 --- a/test/maat_json.json +++ b/test/maat_json.json @@ -324,6 +324,61 @@ ] } ] + }, + { + "compile_id": 133, + "service": 1, + "action": 1, + "do_blacklist": 1, + "do_log": 1, + "effective_rage": 0, + "user_region": "table_conjunction_test_part1", + "is_valid": "yes", + "groups": [ + { + "group_name": "group_13", + "regions": [ + { + "table_name": "HTTP_HOST", + "table_type": "string", + "table_content": { + "keywords": "www.3300av.com", + "expr_type": "none", + "match_method": "sub", + "format": "uncase plain" + } + } + ] + } + ] + } +, + { + "compile_id": 134, + "service": 1, + "action": 1, + "do_blacklist": 1, + "do_log": 1, + "effective_rage": 0, + "user_region": "table_conjunction_test_part2", + "is_valid": "yes", + "groups": [ + { + "group_name": "group_14", + "regions": [ + { + "table_name": "HTTP_URL", + "table_type": "string", + "table_content": { + "keywords": "novel&27122.txt", + "expr_type": "and", + "match_method": "sub", + "format": "uncase plain" + } + } + ] + } + ] } ], "plugin_table": [ diff --git a/test/maat_test.cpp b/test/maat_test.cpp index 3fb3cfe..67158bc 100644 --- a/test/maat_test.cpp +++ b/test/maat_test.cpp @@ -431,6 +431,31 @@ int test_expr_plus(Maat_feather_t feather,const char* table_name,scan_status_t* return ret; } +int test_table_conjunction(Maat_feather_t feather,const char* table_name,const char* conj_table_name,scan_status_t* mid) +{ + int ret=0; + int table_id=0,conj_table_id=0; + struct Maat_rule_t result[4]; + int found_pos[4]; + const char* scan_data="soq is using table conjunction function.http://www.3300av.com/novel/27122.txt"; + + table_id=Maat_table_register(feather,table_name); + if(table_id==-1) + { + printf("Database table %s register failed.\n",table_name); + return -1; + } + conj_table_id=Maat_table_register(feather,conj_table_name); + assert(conj_table_id==table_id); + ret=Maat_full_scan_string(feather, conj_table_id,CHARSET_GBK, scan_data, strlen(scan_data), + result,found_pos, 4, + mid, 0); + if(ret>=2) + { + printf("Table conjunction success %s\n",print_maat_result(result,ret)); + } + return 0; +} int main(int argc,char* argv[]) { Maat_feather_t feather=NULL; @@ -488,6 +513,9 @@ int main(int argc,char* argv[]) test_unescape_string_scan(feather,"KEYWORDS_TABLE",&mid); Maat_clean_status(&mid); + test_table_conjunction(feather, "HTTP_URL", "HTTP_HOST", &mid); + Maat_clean_status(&mid); + sleep(4); Maat_burn_feather(feather);