Add support for plugins

Problem to solve

Support a generic plugin mechanism to extend the functionality of Amavis.

User experience goal

The user can load and configure plugins, both bundled and external ones, similar to the ones used in SpamAssassin.

Proposal

Add a plugin loader and executor. The loader should only require explicitly mentioned plugins. It should support some simple ordering of plugins.

Add a mechanism to extend the config for plugins. I don't know yet how this would work.

In the end it should replace the existing custom module. Also maybe will be expressive enough to allow the implementation of spam and virus filtering extracted into a plugin.

Further details

The existing Module::Pluggable module does neither support ordering, nor does it support only explicit loaded plugins. Does implementation exist that we can use?

Edited by Bastian Blank
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information