static ModuleList s_modules;
static unsigned s_errors = 0;
+std::set<uint32_t> ModuleManager::gids;
+
static string s_current;
static string s_name;
static string s_type;
std::lock_guard<std::mutex> lock(stats_mutex);
m->reset_stats();
+
+ if ( m->get_gid() )
+ gids.emplace(m->get_gid());
}
Module* ModuleManager::get_module(const char* s)
cout << "no match" << endl;
}
+bool ModuleManager::gid_in_use(uint32_t gid)
+{
+ return gids.find(gid) != gids.end();
+}
+
void ModuleManager::show_gids(const char* pfx, bool exact)
{
s_modules.sort(comp_gids);
// Factory for Modules, including all builtin and plugin modules.
// Modules are strictly used during parse time.
+#include <cstdint>
+#include <set>
#include <list>
//-------------------------------------------------------------------------
static void show_modules();
static void show_module(const char*);
+ static bool gid_in_use(uint32_t);
+
// output for matching module name; prefix is sufficient if not exact
static void show_configs(const char* = nullptr, bool exact = false);
static void show_commands(const char* = nullptr, bool exact = false);
static void dump_stats(SnortConfig*, const char* skip = nullptr);
static void accumulate(SnortConfig*);
static void reset_stats(SnortConfig*);
+
+ static std::set<uint32_t> gids;
};
#endif
#include "main/snort_debug.h"
#include "main/thread_config.h"
#include "managers/ips_manager.h"
+#include "managers/module_manager.h"
#include "managers/so_manager.h"
#include "ports/rule_port_tables.h"
#include "sfip/sf_ipvar.h"
otn->sigInfo.text_rule = true;
so_rule_count++;
}
- else
+ else if ( ModuleManager::gid_in_use(otn->sigInfo.generator) )
{
- if ( !otn->sigInfo.generator )
- ParseError("gid must set in builtin rules");
-
if ( otn->num_detection_opts )
ParseError("%u:%u builtin rules do not support detection options",
otn->sigInfo.generator, otn->sigInfo.id);