[Exim] Exim 4 ideas.

Top Page
Delete this message
Reply to this message
Author: Theo E. Schlossnagle
Date:  
To: exim-users
Subject: [Exim] Exim 4 ideas.
I would really like to see a module interface so that I could write my own
modules into exim that could "interfere" or "observe" the transactions as they
happen. Think ala Apache (2.0).

In two different fashions.

(1) The module can have "handlers" than you can call from within Exim. For
example, I could write a handler that will perform address expansion. I tell
Exim to load my module "foo.domain.so" and in the jist of the system_alias
director, you could instead say

driver = foo.domain::alias_expansion

and exim will call the alias_expansion(...) function in the module
foo.domain. This will allow people to very easily write alias expansion
modules that support various databases and timeclock systems (for 24x7 support
opertions). This wouldn't be limited to address expansion, of course. Things
like body augmentation could be performed -- modules that will inline verify
PGP signatures, truly integrated virus scanners, etc.

(2) Have hooks at various stages and allow modules to register handlers for
those stages. The main use of this that I see immediately useful is logging.
Their can be a exim_log hook that a module can register with at initialization
time. If you load foo.domain module, exim will call foo.domain's
foo.domain_init(...) function and that initialization function could call
something like:
exim_module_register_hook("exim_log", my_supercool_loghandler);

Then, wherevere exim logs, it calls the modules that have hooked it so that
they have a chance to take care of business. This would allow for tallying
complicated and rather complete statistics concerning deliveries, failures,
etc. in real time in a shared memoery segment. AND you would have to put that
trash inside Exim. It would be an add on module.

Oh yeah. I volunteer. I would be happy to work on the implementation of this
if it is desired.

--
Theo Schlossnagle
1024D/A8EBCF8F/13BD 8C08 6BE2 629A 527E 2DC2 72C2 AD05 A8EB CF8F
2047R/33131B65/71 F7 95 64 49 76 5D BA 3D 90 B9 9F BE 27 24 E7