X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmodule.c;h=0fb5f874ab007e86c9a7e19a5dd6c57e087f3c3c;hb=f8fb4aca7668c722f41941be719203aa8c298e12;hp=984f904948a73b5ae7d7abf2a45e0471834c40ad;hpb=d5edb4bff62150cf35e8b9c59798017ff58febc0;p=openldap diff --git a/servers/slapd/module.c b/servers/slapd/module.c index 984f904948..0fb5f874ab 100644 --- a/servers/slapd/module.c +++ b/servers/slapd/module.c @@ -29,7 +29,7 @@ struct module_regtable_t { typedef struct module_loaded_t { struct module_loaded_t *next; - lt_dlhandle *lib; + lt_dlhandle lib; } module_loaded_t; module_loaded_t *module_list = NULL; @@ -40,7 +40,13 @@ int module_init (void) { if (lt_dlinit()) { const char *error = lt_dlerror(); +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_CRIT, + "module_init: lt_ldinit failed: %s\n", error )); +#else Debug(LDAP_DEBUG_ANY, "lt_dlinit failed: %s\n", error, 0, 0); +#endif + return -1; } return 0; @@ -55,7 +61,13 @@ int module_kill (void) if (lt_dlexit()) { const char *error = lt_dlerror(); +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_CRIT, + "module_kill: lt_dlexit failed: %s\n", error )); +#else Debug(LDAP_DEBUG_ANY, "lt_dlexit failed: %s\n", error, 0, 0); +#endif + return -1; } return 0; @@ -70,8 +82,14 @@ int module_load(const char* file_name, int argc, char *argv[]) module = (module_loaded_t *)ch_calloc(1, sizeof(module_loaded_t)); if (module == NULL) { +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_CRIT, + "module_load: (%s) out of memory.\n", file_name )); +#else Debug(LDAP_DEBUG_ANY, "module_load failed: (%s) out of memory\n", file_name, 0, 0); +#endif + return -1; } @@ -82,17 +100,37 @@ int module_load(const char* file_name, int argc, char *argv[]) */ if ((module->lib = lt_dlopen(file_name)) == NULL) { error = lt_dlerror(); +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_CRIT, + "module_load: lt_dlopen failed: (%s) %s.\n", + file_name, error )); +#else Debug(LDAP_DEBUG_ANY, "lt_dlopen failed: (%s) %s\n", file_name, error, 0); +#endif + ch_free(module); return -1; } +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_INFO, + "module_load: loaded module %s\n", file_name )); +#else Debug(LDAP_DEBUG_CONFIG, "loaded module %s\n", file_name, 0, 0); +#endif + if ((initialize = lt_dlsym(module->lib, "init_module")) == NULL) { +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_ERR, + "module_load: module %s : no init_module() function found\n", + file_name )); +#else Debug(LDAP_DEBUG_CONFIG, "module %s: no init_module() function found\n", file_name, 0, 0); +#endif + lt_dlclose(module->lib); ch_free(module); return -1; @@ -115,8 +153,14 @@ int module_load(const char* file_name, int argc, char *argv[]) */ rc = initialize(argc, argv); if (rc == -1) { +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_ERR, + "module_load: module %s init_module() failed\n", file_name)); +#else Debug(LDAP_DEBUG_CONFIG, "module %s: init_module() failed\n", file_name, 0, 0); +#endif + lt_dlclose(module->lib); ch_free(module); return rc; @@ -125,16 +169,29 @@ int module_load(const char* file_name, int argc, char *argv[]) if (rc >= (sizeof(module_regtable) / sizeof(struct module_regtable_t)) || module_regtable[rc].proc == NULL) { +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_ERR, + "module_load: module %s: unknown registration type (%d).\n", file_name)); +#else Debug(LDAP_DEBUG_CONFIG, "module %s: unknown registration type (%d)\n", file_name, rc, 0); +#endif + module_unload(module); return -1; } rc = (module_regtable[rc].proc)(module, file_name); if (rc != 0) { +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_ERR, + "module_load: module %s:%s could not be registered.\n", + file_name, module_regtable[rc].type )); +#else Debug(LDAP_DEBUG_CONFIG, "module %s: %s module could not be registered\n", file_name, module_regtable[rc].type, 0); +#endif + module_unload(module); return rc; } @@ -142,8 +199,15 @@ int module_load(const char* file_name, int argc, char *argv[]) module->next = module_list; module_list = module; +#ifdef NEW_LOGGING + LDAP_LOG(( "module", LDAP_LEVEL_INFO, + "module_load: module %s:%s registered\n", file_name, + module_regtable[rc].type )); +#else Debug(LDAP_DEBUG_CONFIG, "module %s: %s module registered\n", file_name, module_regtable[rc].type, 0); +#endif + return 0; } @@ -189,7 +253,7 @@ static int module_unload (module_loaded_t *module) return 0; } -int load_null (const void *module, const char *file_name) +int load_null_module (const void *module, const char *file_name) { return 0; } @@ -201,7 +265,12 @@ load_extop_module ( const char *file_name ) { - ext_main = module_resolve(module, "ext_main"); + SLAP_EXTOP_MAIN_FN *ext_main; + int (*ext_getoid)(int index, char *oid, int blen); + char *oid; + int rc; + + ext_main = (SLAP_EXTOP_MAIN_FN *)module_resolve(module, "ext_main"); if (ext_main == NULL) { return(-1); } @@ -211,7 +280,20 @@ load_extop_module ( return(-1); } - return load_extop( ext_main, ext_getoid ); + oid = ch_malloc(256); + rc = (ext_getoid)(0, oid, 256); + if (rc != 0) { + ch_free(oid); + return(rc); + } + if (*oid == 0) { + free(oid); + return(-1); + } + + rc = load_extop( oid, ext_main ); + free(oid); + return rc; } #endif /* SLAPD_EXTERNAL_EXTENSIONS */ #endif /* SLAPD_MODULES */