[Bro-Dev] Config Framework Feedback

Christian Kreibich christian at corelight.com
Tue Oct 30 13:17:57 PDT 2018


Hi folks,

I would agree that it takes a bit of experimentation to figure out 
exactly when a change handler fires and how to reliably initialize or 
update things based on an option's value.

Consider this:

   module Foo;

   export { option foo = F; }

   function foo_handler(ID: string, foo_new: bool): bool
   {
           print fmt("New foo: %s", foo_new);

           # Update stuff here based on foo's value
           # ...

           return foo_new;
   }

   event bro_init() {
           Option::set_change_handler("Foo::foo", foo_handler);
   }

... foo_handler doesn't get called when you simply run the script 
without redefing Config::config_files. When you do redef it, the handler 
fires both when the config file sets foo to T, and when it sets it to F.

So you have to make sure that your initialization happens even when the 
handler doesn't get called, and you cannot write your handler assuming 
that the new value is actually different from the old one.

These arguably aren't bugs, but imo they do take getting used to.

Best,
-C.


More information about the bro-dev mailing list