校验Maat_cmd_set_lines中table_lien的有效标志位合法性。
This commit is contained in:
@@ -145,7 +145,7 @@ enum MAAT_TABLE_TYPE type_region2table(const struct Maat_region_t* p)
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
void invalidate_line(char* line, enum MAAT_TABLE_TYPE type,int valid_column_seq)
|
int get_valid_flag_offset(const char* line, enum MAAT_TABLE_TYPE type,int valid_column_seq)
|
||||||
{
|
{
|
||||||
unsigned int offset=0;
|
unsigned int offset=0;
|
||||||
unsigned int i=0,j=0;
|
unsigned int i=0,j=0;
|
||||||
@@ -163,7 +163,7 @@ void invalidate_line(char* line, enum MAAT_TABLE_TYPE type,int valid_column_seq)
|
|||||||
case TABLE_TYPE_PLUGIN:
|
case TABLE_TYPE_PLUGIN:
|
||||||
if(valid_column_seq<0)
|
if(valid_column_seq<0)
|
||||||
{
|
{
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
offset=(unsigned int)valid_column_seq;
|
offset=(unsigned int)valid_column_seq;
|
||||||
break;
|
break;
|
||||||
@@ -197,10 +197,22 @@ void invalidate_line(char* line, enum MAAT_TABLE_TYPE type,int valid_column_seq)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
assert(i<strlen(line));
|
if(i>=strlen(line)||line[i]!='1')
|
||||||
assert(line[i]=='1');
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
int invalidate_line(char* line, enum MAAT_TABLE_TYPE type,int valid_column_seq)
|
||||||
|
{
|
||||||
|
int i=0;
|
||||||
|
i=get_valid_flag_offset(line, type,valid_column_seq);
|
||||||
|
if(i<0)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
line[i]='0';
|
line[i]='0';
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
int del_rule_from_redis(redisContext* ctx, struct serial_rule_t* s_rule, long long new_version)
|
int del_rule_from_redis(redisContext* ctx, struct serial_rule_t* s_rule, long long new_version)
|
||||||
{
|
{
|
||||||
@@ -1016,7 +1028,13 @@ void redis_monitor_traverse(unsigned int version,redisContext *c,
|
|||||||
table_type=feather->p_table_info[table_id]->table_type;
|
table_type=feather->p_table_info[table_id]->table_type;
|
||||||
if(rule_list[i].op==MAAT_OP_DEL)
|
if(rule_list[i].op==MAAT_OP_DEL)
|
||||||
{
|
{
|
||||||
invalidate_line(rule_list[i].table_line,table_type,feather->p_table_info[table_id]->valid_flag_column);
|
ret=invalidate_line(rule_list[i].table_line,table_type,feather->p_table_info[table_id]->valid_flag_column);
|
||||||
|
if(ret<0)
|
||||||
|
{
|
||||||
|
MESA_handle_runtime_log(logger,RLOG_LV_INFO,maat_redis_monitor,"Invaid format %s ."
|
||||||
|
,rule_list[i].table_line);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
update(rule_list[i].table_name,rule_list[i].table_line,u_para);
|
update(rule_list[i].table_name,rule_list[i].table_line,u_para);
|
||||||
}
|
}
|
||||||
@@ -1159,7 +1177,18 @@ int Maat_cmd_set_lines(Maat_feather_t feather,const struct Maat_line_t** line_ru
|
|||||||
ret=-1;
|
ret=-1;
|
||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
|
ret=get_valid_flag_offset(line_rule[i]->table_line
|
||||||
|
, _feather->p_table_info[table_id]->table_type
|
||||||
|
, _feather->p_table_info[table_id]->valid_flag_column);
|
||||||
|
if(ret<0||
|
||||||
|
(op==MAAT_OP_ADD&&line_rule[i]->table_line[ret]!='1'))
|
||||||
|
{
|
||||||
|
MESA_handle_runtime_log(_feather->logger,RLOG_LV_FATAL,maat_module
|
||||||
|
,"Command set line id %d failed: illegal valid flag."
|
||||||
|
, line_rule[i]->rule_id);
|
||||||
|
ret=-1;
|
||||||
|
goto error_out;
|
||||||
|
}
|
||||||
if(line_rule[i]->expire_after>0)
|
if(line_rule[i]->expire_after>0)
|
||||||
{
|
{
|
||||||
absolute_expire_time=server_time+line_rule[i]->expire_after;
|
absolute_expire_time=server_time+line_rule[i]->expire_after;
|
||||||
|
|||||||
Reference in New Issue
Block a user