WARNING WARNING WARNING!!!

This stuff is experimental, may change radically or be deleted altogether
before OpenSSL 0.9.7 release. You have been warned!

Configuration modules. These are a set of modules which can perform
various configuration functions.

Currently the routines should be called at most once when an application
starts up: that is before it starts any threads.

The routines read a configuration file set up like this:

-----
#default section
openssl_init=init_section

[init_section]

module1=value1
#Second instance of module1
module1.1=valueX
module2=value2
module3=dso_literal
module4=dso_section

[dso_section]

path=/some/path/to/some/dso.so
other_stuff=other_value
----

When this file is loaded a configuration module with the specified
string (module* in the above example) is looked up and its init
function called as:

int conf_init_func(CONF_IMODULE *md, CONF *cnf);

The function can then take whatever action is appropriate, for example
further lookups based on the value. Multiple instances of the same 
config module can be loaded.

When the application closes down the modules are cleaned up by calling
an optional finish function:

void conf_finish_func(CONF_IMODULE *md);

The finish functions are called in reverse order: that is the last module
loaded is the first one cleaned up.

If no module exists with a given name then an attempt is made to load
a DSO with the supplied name. This might mean that "module3" attempts
to load a DSO called libmodule3.so or module3.dll for example. An explicit
DSO name can be given by including a separate section as in the module4 example
above.

The DSO is expected to at least contain an initialization function:

int OPENSSL_init(CONF_IMODULE *md, CONF *cnf);

and may also include a finish function:

void OPENSSL_finish(CONF_IMODULE *md);

Static modules can also be added using,

int CONF_module_add(char *name, dso_mod_init_func *ifunc, dso_mod_finish_func *ffunc);

where "name" is the name in the configuration file this function corresponds to.

A set of builtin modules (currently only an ASN1 non functional test module) can be 
added by calling OPENSSL_load_builtin_modules(). 

The function OPENSSL_config() is intended as a simple configuration function that
any application can call to perform various default configuration tasks. It uses the
file openssl.cnf in the usual locations.


