Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 1 | Configuration modules. These are a set of modules which can perform |
| 2 | various configuration functions. |
| 3 | |
| 4 | Currently the routines should be called at most once when an application |
| 5 | starts up: that is before it starts any threads. |
| 6 | |
| 7 | The routines read a configuration file set up like this: |
| 8 | |
| 9 | ----- |
| 10 | #default section |
Dr. Stephen Henson | ee7ca09 | 2007-05-10 17:35:37 +0000 | [diff] [blame] | 11 | openssl_conf=init_section |
Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 12 | |
| 13 | [init_section] |
| 14 | |
| 15 | module1=value1 |
| 16 | #Second instance of module1 |
| 17 | module1.1=valueX |
| 18 | module2=value2 |
| 19 | module3=dso_literal |
| 20 | module4=dso_section |
| 21 | |
| 22 | [dso_section] |
| 23 | |
| 24 | path=/some/path/to/some/dso.so |
| 25 | other_stuff=other_value |
| 26 | ---- |
| 27 | |
Dr. Stephen Henson | ee7ca09 | 2007-05-10 17:35:37 +0000 | [diff] [blame] | 28 | When this file is loaded a configuration module with the specified string |
| 29 | (module* in the above example) is looked up and its init function called as: |
Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 30 | |
| 31 | int conf_init_func(CONF_IMODULE *md, CONF *cnf); |
| 32 | |
Dr. Stephen Henson | ee7ca09 | 2007-05-10 17:35:37 +0000 | [diff] [blame] | 33 | The function can then take whatever action is appropriate, for example further |
| 34 | lookups based on the value. Multiple instances of the same config module can be |
| 35 | loaded. |
Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 36 | |
Dr. Stephen Henson | ee7ca09 | 2007-05-10 17:35:37 +0000 | [diff] [blame] | 37 | When the application closes down the modules are cleaned up by calling an |
| 38 | optional finish function: |
Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 39 | |
| 40 | void conf_finish_func(CONF_IMODULE *md); |
| 41 | |
| 42 | The finish functions are called in reverse order: that is the last module |
| 43 | loaded is the first one cleaned up. |
| 44 | |
Dr. Stephen Henson | ee7ca09 | 2007-05-10 17:35:37 +0000 | [diff] [blame] | 45 | If no module exists with a given name then an attempt is made to load a DSO |
| 46 | with the supplied name. This might mean that "module3" attempts to load a DSO |
| 47 | called libmodule3.so or module3.dll for example. An explicit DSO name can be |
| 48 | given by including a separate section as in the module4 example above. |
Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 49 | |
| 50 | The DSO is expected to at least contain an initialization function: |
| 51 | |
| 52 | int OPENSSL_init(CONF_IMODULE *md, CONF *cnf); |
| 53 | |
| 54 | and may also include a finish function: |
| 55 | |
| 56 | void OPENSSL_finish(CONF_IMODULE *md); |
| 57 | |
| 58 | Static modules can also be added using, |
| 59 | |
Dr. Stephen Henson | ee7ca09 | 2007-05-10 17:35:37 +0000 | [diff] [blame] | 60 | int CONF_module_add(char *name, dso_mod_init_func *ifunc, dso_mod_finish_func |
| 61 | *ffunc); |
Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 62 | |
Dr. Stephen Henson | ee7ca09 | 2007-05-10 17:35:37 +0000 | [diff] [blame] | 63 | where "name" is the name in the configuration file this function corresponds |
| 64 | to. |
Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 65 | |
Dr. Stephen Henson | ee7ca09 | 2007-05-10 17:35:37 +0000 | [diff] [blame] | 66 | A set of builtin modules (currently only an ASN1 non functional test module) |
| 67 | can be added by calling OPENSSL_load_builtin_modules(). |
Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 68 | |
Dr. Stephen Henson | ee7ca09 | 2007-05-10 17:35:37 +0000 | [diff] [blame] | 69 | The function OPENSSL_config() is intended as a simple configuration function |
| 70 | that any application can call to perform various default configuration tasks. |
| 71 | It uses the file openssl.cnf in the usual locations. |
Dr. Stephen Henson | bc37d99 | 2002-01-05 01:37:16 +0000 | [diff] [blame] | 72 | |
| 73 | |