This documentation is for Dovecot v2.x, see wiki1 for v1.x documentation.
Differences between revisions 5 and 6
Revision 5 as of 2016-09-16 17:20:46
Size: 1873
Editor: JeffSipek
Revision 6 as of 2021-09-24 15:10:40
Size: 67
Editor: TimoSirainen
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Plugins =

Plugins in Dovecot are really simple. They basically have two functions:

 * <plugin_name>_init(module) is called when {{{module_dir_init()}}} is called.
 * <plugin_name>_deinit() is called when {{{module_dir_deinit()}}} or {{{module_dir_unload()}}} is called.

The <plugin_name> is the short version of the plugin name, based on the filename. For example if the filename is {{{}}}, the <plugin_name> is "imap_quota" and the init function to be called is imap_quota_plugin_init().

== Versioning ==

Since different Dovecot versions can have different APIs, your plugin should usually also define <plugin_name>_version, like:

const char *imap_quota_plugin_version = DOVECOT_ABI_VERSION;

If the version string in plugin doesn't match the version of the running binary, the plugin loading fails. The DOVECOT_ABI_VERSION is defined in Dovecot's {{{config.h}}}, which you're typically including.

== Dependencies ==

Some plugins depend on another one. In some systems (but not all) it's possible to handle this by giving a nicer error message than "symbol xyz not found". There are two steps for this:

First create <plugin_name>_dependencies array listing plugin names that the plugin depends on, like:

const char *imap_quota_plugin_dependencies[] = { "quota", NULL };

Then you'll also have to make the plugin .so binary link to the other plugins:

lib11_imap_quota_plugin_la_LIBADD = \

PLUGIN_DEPS is set only if plugin dependencies are actually supported. Otherwise the build might fail or plugin loading might fail.

Once all this is done, trying to load imap_quota plugin without quota plugin gives a nice error message:
Error: Can't load plugin imap_quota_plugin: Plugin quota must be loaded also
Moved to

None: Design/Plugins (last edited 2021-09-24 15:10:40 by TimoSirainen)