74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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_conf=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.
 | 
						|
 | 
						|
 |