]> git.sur5r.net Git - openldap/blob - servers/slapd/module.c
5b945e5b81c6db9bb85e383649fb3789f1d2e39a
[openldap] / servers / slapd / module.c
1 #include "portable.h"
2 #include <stdio.h>
3 #include "slap.h"
4
5 #ifdef SLAPD_MODULES
6
7 #include <ltdl.h>
8
9 int load_module(const char* file_name, int argc, char *argv[]) {
10    lt_dlhandle* module = NULL;
11    void (*initialize) LDAP_P((int argc, char *argv[]));
12
13    if (lt_dlinit()) {
14       Debug(LDAP_DEBUG_ANY, "lt_dlinit failed: %s\n", lt_dlerror(), 0, 0);
15       return -1;
16    }
17    
18    if ((module = lt_dlopen(file_name)) == NULL) {
19       Debug(LDAP_DEBUG_ANY, "lt_dlopen failed: (%s) %s\n", file_name, lt_dlerror(), 0);
20       return -1;
21    }
22
23    Debug(LDAP_DEBUG_CONFIG, "loaded module %s\n", file_name, 0, 0);
24    
25    if ((initialize = lt_dlsym(module, "init_module"))) {
26       initialize(argc, argv);
27    } else {
28       Debug(LDAP_DEBUG_CONFIG, "module %s: no init_module() function found\n", file_name, 0, 0);
29       return -1;
30    }
31
32    return 0;
33 }
34
35 #endif /* SLAPD_MODULES */
36