3.10.1.4 Extending sieve
The basic set of sieve actions, tests and comparators may be extended
using loadable extensions. The usual require
mechanism is used for
that.
When processing arguments for require
statement, sieve
uses the following algorithm:
- Look up the name in a symbol table. If the name begins with
‘comparator-’ it is looked up in the comparator table. If it
begins with ‘test-’, the test table is searched instead. Otherwise
the name is looked up in the action table.
- If the name is found, the search is terminated.
- Otherwise, transform the name. First, any ‘comparator-’ or
‘test-’ prefix is stripped. Then, any character other than
alphanumeric characters, ‘.’ and ‘,’ is replaced with
dash (‘-’). The name thus obtained is used as a file name
of an external loadable module.
- Try to load the module. The module is searched in the
following search paths (in the order given):
- Mailutils module directory. By default it is
$prefix/lib/mailutils.
- The value of the environment variable
LTDL_LIBRARY_PATH
.
- Additional search directories specified with the.
--libdir-prefix command line option (see libdir-prefix), or the
library-path-prefix
configuration
statement (see library-path-prefix).
- Additional search directories specified with the
library-path
statement (see library-path) in Sieve configuration file.
- Additional search directories specified with the.
--libdir command line option (see libdir).
- Additional search directories specified with the
#searchpath
Sieve directive (see Sieve #searchpath directive).
- System library search path: The system dependent library
search path (e.g. on Linux it is set by the contents of the file
/etc/ld.so.conf and the value of the environment variable
LD_LIBRARY_PATH
).
The value of LTDL_LIBRARY_PATH
and LD_LIBRARY_PATH
must be
a colon-separated list of absolute directories, for example,
‘"/usr/lib/mypkg:/lib/foo"’.
In any of these directories, sieve
first attempts to find
and load the given filename. If this fails, it tries to append the
following suffixes to the file name:
- the libtool archive extension ‘.la’
- the extension used for native dynamic libraries on the host
platform, e.g., ‘.so’, ‘.sl’, etc.
- If the module is found,
sieve
executes its
initialization function (see below) and again looks up the name
in the symbol table. If found, search terminates successfully.
- If either the module is not found, or the symbol wasn’t
found after execution of the module initialization function,
search is terminated with an error status.
sieve
then displays
the following diagnostic message:
source for the required action NAME is not available
This document was generated on January 3, 2025 using makeinfo.
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.