diff --git a/src/entry/Maat_command.cpp b/src/entry/Maat_command.cpp index 02ce3ca..4f43ac5 100644 --- a/src/entry/Maat_command.cpp +++ b/src/entry/Maat_command.cpp @@ -547,12 +547,13 @@ error_out: MESA_htable_destroy(htable, NULL); return ret; } -int get_rm_key_list(redisContext *c, long long instance_version, long long desired_version, long long* new_version, struct serial_rule_t** list,int *update_type, void* logger, int cumulative_off) + +int get_rm_key_list(redisContext *c, long long instance_version, long long desired_version, long long* new_version, struct Maat_table_manager* table_mgr, struct serial_rule_t** list,int *update_type, void* logger, int cumulative_off) { redisReply* reply=NULL,*sub_reply=NULL; char err_buff[256]; long long redis_version=0,target_version=0; - int rule_num=0, changed_rule_num=0; + int rule_num=0, changed_rule_num=0, table_id=0; int ret=0; unsigned int i=0,full_idx =0,append_cmd_cnt=0; struct serial_rule_t *s_rule_array=NULL, *changed_rule_array=NULL, *history_rule_array=NULL; @@ -701,6 +702,14 @@ FULL_UPDATE: "Invalid Redis Key Format: %s", sub_reply->element[i]->str); continue; } + if(table_mgr) + { + table_id=Maat_table_get_id_by_name(table_mgr, s_rule_array[full_idx].table_name); + if(table_id<0)//Unrecognized table. + { + continue; + } + } full_idx++; } rule_num=full_idx; @@ -1330,9 +1339,11 @@ error_out: } const char* find_Nth_column(const char* line, int Nth, int* column_len) { - int i=0, j=0; + size_t i=0; + int j=0; int start=0, end=0; - for(i=0;i<(int)strlen(line);i++) + size_t line_len= strlen(line); + for(i=0;iread_ctx, version, feather->load_version_from, &new_version, &rule_list, &update_type, logger, feather->cumulative_update_off); + rule_num=get_rm_key_list(mr_ctx->read_ctx, version, feather->load_version_from, &new_version, feather->table_mgr, &rule_list, &update_type, logger, feather->cumulative_update_off); if(rule_num<0)//redis communication error { return; diff --git a/src/entry/Maat_rule.cpp b/src/entry/Maat_rule.cpp index 6b01597..f7586ae 100644 --- a/src/entry/Maat_rule.cpp +++ b/src/entry/Maat_rule.cpp @@ -1667,6 +1667,13 @@ void update_expr_rule(struct Maat_table_schema* table,const char* table_line,str maat_str_rule->match_method=MATCH_METHOD_SUB; } + if(strlen(maat_str_rule->keywords)<4) + { + MESA_handle_runtime_log(logger, RLOG_LV_INFO, maat_module , + "Table %s region cfg %d has a expr less than 4 bytes.", + table->table_name, + maat_str_rule->region_id); + } ret=add_expr_rule(table, maat_str_rule, scanner, logger); if(ret<0) { diff --git a/src/inc_internal/Maat_rule_internal.h b/src/inc_internal/Maat_rule_internal.h index dba92e2..c92b944 100644 --- a/src/inc_internal/Maat_rule_internal.h +++ b/src/inc_internal/Maat_rule_internal.h @@ -390,7 +390,7 @@ void maat_stat_table(struct Maat_table_runtime* p,int scan_len,struct timespec* void maat_stat_output(struct _Maat_feather_t* feather); redisReply *_wrap_redisCommand(redisContext *c, const char *format, ...); -int get_rm_key_list(redisContext *c, long long instance_version, long long desired_version, long long* new_version, struct serial_rule_t** list,int *update_type, void* logger, int cumulative_off); +int get_rm_key_list(redisContext *c, long long instance_version, long long desired_version, long long* new_version, struct Maat_table_manager* table_mgr, struct serial_rule_t** list,int *update_type, void* logger, int cumulative_off); int get_maat_redis_value(redisContext *c,struct serial_rule_t* rule_list,int rule_num,void* logger,int print_process); int get_foreign_keys_by_prefix(redisContext *ctx, struct serial_rule_t* rule_list, int rule_num, const char* dir,void *logger); void get_foreign_conts(redisContext *ctx, struct serial_rule_t* rule_list, int rule_num, int print_fn, void *logger); diff --git a/tools/maat_redis_tool.cpp b/tools/maat_redis_tool.cpp index 9ff0240..aff81b0 100644 --- a/tools/maat_redis_tool.cpp +++ b/tools/maat_redis_tool.cpp @@ -34,10 +34,12 @@ static int compare_serial_rule(const void *a, const void *b) struct serial_rule_t *ra=(struct serial_rule_t *)a; struct serial_rule_t *rb=(struct serial_rule_t *)b; - char p_str[256],q_str[256]; - snprintf(p_str,sizeof(p_str),"%s.%ld",ra->table_name,ra->rule_id); - snprintf(q_str,sizeof(q_str),"%s.%ld",rb->table_name,rb->rule_id); - return strcmp(p_str,q_str); + int ret=strcmp(ra->table_name, rb->table_name); + if(ret==0) + { + ret= ra->rule_id - rb->rule_id; + } + return ret; } void read_rule_from_redis(redisContext * ctx, long long desire_version, const char* output_path ,void*logger) @@ -51,7 +53,7 @@ void read_rule_from_redis(redisContext * ctx, long long desire_version, const ch char table_path[256],index_path[256]; FILE *table_fp=NULL, *index_fp=NULL; - rule_num=get_rm_key_list(ctx, 0, desire_version, &version, &rule_list, &update_type, logger,0); + rule_num=get_rm_key_list(ctx, 0, desire_version, &version, NULL, &rule_list, &update_type, logger,0); if(rule_num==0) { if(desire_version!=0)