
DSO (Dynamically Shared Object)
-------------------------------

Support for dynamically loadable modules, known as DSO modules or "shared"
modules, is now available in ProFTPD 1.3.0.  There is a DSO howto included
with the source distribution as doc/howto/DSO.html.

To use this feature, you must first compile your proftpd server with
support for DSO modules, using the --enable-dso configure option.  This
option causes the mod_dso module to be included in your proftpd server.
Documentation for the mod_dso module can be found under the doc/ directory
of the source distribution, as doc/modules/mod_dso.html.

Once --enable-dso is used, you can then compile any module as a DSO module
using the --with-shared configure option.  --with-shared is just like
--with-modules: it takes a list of colon-separated module names.  For
example:

  ./configure --enable-dso --with-shared=mod_sql:mod_sql_mysql

will configure proftpd for DSO support, and compile the mod_sql and
mod_sql_mysql modules as DSO modules.  Note that attempting to use the
--with-shared option, without also using --enable-dso, will result in an
error.

Any modules that were configured as DSO modules will be installed into the
libexec/ directory during the 'make install' step.  This means that, by
default, your DSO modules will be installed into /usr/local/libexec/.  You
can change this directory at compile time using the --libexecdir configure
option.  Or you can change it at run-time using the ModulePath configuration
directive, e.g.:

  ModulePath /path/to/dso/dir/

This directive should appear at the top of your proftpd.conf if you installed
your DSO modules into a non-standard location.  Note that proftpd will
*only load modules from the ModulePath directory*.  Any DSO modules that
are not installed into that location cannot be dynamically loaded.  This
is done as a precaution, to prevent malicious users from attempting to
load their own modules from arbitrary system locations.  DSO modules
must be installed properly by the FTP administrator into the proper directory
in order to be usable.

Once you have configured and installed your DSO modules, you need to add
the proper directives to your proftpd.conf, so that proftpd loads those
DSO modules when it starts up.  This is done using the LoadModule
configuration directive, provided by the mod_dso module:

  <IfModule mod_dso.c>
    LoadModule mod_sql.c
    LoadModule mod_sql_mysql.c
  </IfModule>

The modules are loaded into proftpd in the order they appear in proftpd.conf.

