counts[i] = 0;
}
+bool Module::verified_begin(const char* fqn, int idx, SnortConfig* c)
+{
+ table_level++;
+ return begin(fqn, idx, c);
+}
+
+bool Module::verified_set(const char* fqn, Value& v, SnortConfig* c)
+{
+ if ( list and table_level < 2 )
+ return false;
+
+ return set(fqn, v, c);
+}
+
+bool Module::verified_end(const char* fqn, int idx, SnortConfig* c)
+{
+ table_level--;
+ return end(fqn, idx, c);
+}
+
const PegInfo simple_pegs[] =
{
{ "packets", "total packets" },
virtual void show_stats();
virtual void reset_stats();
+ // Wrappers to check that lists are not tables
+ bool verified_begin(const char*, int, SnortConfig*);
+ bool verified_set(const char*, Value&, SnortConfig*);
+ bool verified_end(const char*, int, SnortConfig*);
+
protected:
Module(const char* name, const char* help);
Module(const char* name, const char* help, const Parameter*,
const Parameter* params;
const Parameter* default_params = nullptr;
bool list;
+ int table_level = 0;
Trace* trace;
};
static bool set_param(Module* mod, const char* fqn, Value& val)
{
- if ( !mod->set(fqn, val, s_config) )
+ if ( !mod->verified_set(fqn, val, s_config) )
{
ParseError("%s is invalid", fqn);
++s_errors;
(idx and p->type != Parameter::PT_LIST) )
{
//printf("begin %s %d\n", s, idx);
- if ( !m->begin(s, idx, s_config) )
+ if ( !m->verified_begin(s, idx, s_config) )
return false;
}
// don't set list defaults
(idx and p->type != Parameter::PT_LIST) )
{
//printf("end %s %d\n", s, idx);
- return m->end(s, idx, s_config);
+ return m->verified_end(s, idx, s_config);
}
return true;
}
if ( mod )
{
- mod->begin(s, 0, sc);
- mod->end(s, 0, nullptr);
+ mod->verified_begin(s, 0, sc);
+ mod->verified_end(s, 0, nullptr);
}
return mod;
}