mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00

Catch-and-release logs now include the plugin that is responsible for an action. Furthermore, the catch-and-release log also includes instances where a rule already existed, and where an error occurred during an operation.
149 lines
3.3 KiB
Text
149 lines
3.3 KiB
Text
##! Debugging plugin for the NetControl framework, providing insight into
|
|
##! executed operations.
|
|
|
|
@load ../plugin
|
|
@load ../main
|
|
|
|
module NetControl;
|
|
|
|
export {
|
|
## Instantiates a debug plugin for the NetControl framework. The debug
|
|
## plugin simply logs the operations it receives.
|
|
##
|
|
## do_something: If true, the plugin will claim it supports all operations; if
|
|
## false, it will indicate it doesn't support any.
|
|
##
|
|
## name: Optional name that for the plugin.
|
|
global create_debug: function(do_something: bool, name: string &default="") : PluginState;
|
|
|
|
## Instantiates a debug plugin for the NetControl framework. This variation
|
|
## of the plugin will return "exists" to any rule operations.
|
|
##
|
|
## name: Name of this plugin.
|
|
global create_debug_exists: function(name: string) : PluginState;
|
|
|
|
## Instantiates a debug plugin for the NetControl framework. This variation
|
|
## of the plugin will return "error" to any rule operations.
|
|
##
|
|
## name: Name of this plugin.
|
|
global create_debug_error: function(name: string) : PluginState;
|
|
}
|
|
|
|
function do_something(p: PluginState) : bool
|
|
{
|
|
return p$config["all"] == "1";
|
|
}
|
|
|
|
function debug_name(p: PluginState) : string
|
|
{
|
|
return p$config["name"];
|
|
}
|
|
|
|
function debug_log(p: PluginState, msg: string)
|
|
{
|
|
print fmt("netcontrol debug (%s): %s", debug_name(p), msg);
|
|
}
|
|
|
|
function debug_init(p: PluginState)
|
|
{
|
|
debug_log(p, "init");
|
|
plugin_activated(p);
|
|
}
|
|
|
|
function debug_done(p: PluginState)
|
|
{
|
|
debug_log(p, "init");
|
|
}
|
|
|
|
function debug_add_rule(p: PluginState, r: Rule) : bool
|
|
{
|
|
local s = fmt("add_rule: %s", r);
|
|
debug_log(p, s);
|
|
|
|
if ( do_something(p) )
|
|
{
|
|
event NetControl::rule_added(r, p);
|
|
return T;
|
|
}
|
|
|
|
return F;
|
|
}
|
|
|
|
function debug_add_rule_exists(p: PluginState, r: Rule) : bool
|
|
{
|
|
local s = fmt("add_rule_exists: %s", r);
|
|
debug_log(p, s);
|
|
|
|
if ( do_something(p) )
|
|
{
|
|
event NetControl::rule_exists(r, p);
|
|
return T;
|
|
}
|
|
|
|
return F;
|
|
}
|
|
|
|
function debug_add_rule_error(p: PluginState, r: Rule) : bool
|
|
{
|
|
local s = fmt("add_rule_error: %s", r);
|
|
debug_log(p, s);
|
|
|
|
if ( do_something(p) )
|
|
{
|
|
event NetControl::rule_error(r, p, "debug error");
|
|
return T;
|
|
}
|
|
|
|
return F;
|
|
}
|
|
|
|
function debug_remove_rule(p: PluginState, r: Rule, reason: string) : bool
|
|
{
|
|
local s = fmt("remove_rule (%s): %s", reason, r);
|
|
debug_log(p, s);
|
|
|
|
event NetControl::rule_removed(r, p);
|
|
return T;
|
|
}
|
|
|
|
global debug_plugin = Plugin(
|
|
$name=debug_name,
|
|
$can_expire = F,
|
|
$init = debug_init,
|
|
$done = debug_done,
|
|
$add_rule = debug_add_rule,
|
|
$remove_rule = debug_remove_rule
|
|
);
|
|
|
|
function create_debug(do_something: bool, name: string) : PluginState
|
|
{
|
|
local p: PluginState = [$plugin=debug_plugin];
|
|
|
|
# FIXME: Why's the default not working?
|
|
p$config = table();
|
|
p$config["all"] = (do_something ? "1" : "0");
|
|
if ( name == "" )
|
|
p$config["name"] = fmt("Debug-%s", (do_something ? "All" : "None"));
|
|
else
|
|
p$config["name"] = name;
|
|
|
|
return p;
|
|
}
|
|
|
|
function create_debug_error(name: string) : PluginState
|
|
{
|
|
local p: PluginState = copy([$plugin=debug_plugin]);
|
|
p$config["name"] = name;
|
|
p$config["all"] = "1";
|
|
p$plugin$add_rule = debug_add_rule_error;
|
|
return p;
|
|
}
|
|
|
|
function create_debug_exists(name: string) : PluginState
|
|
{
|
|
local p: PluginState = copy([$plugin=debug_plugin]);
|
|
p$config["name"] = name;
|
|
p$config["all"] = "1";
|
|
p$plugin$add_rule = debug_add_rule_exists;
|
|
return p;
|
|
}
|