dlsym() can return NULL validly, so we can't use that as the error test.
authorJim McDonough <jmcd@samba.org>
Fri, 17 Jan 2003 21:23:14 +0000 (21:23 +0000)
committerJim McDonough <jmcd@samba.org>
Fri, 17 Jan 2003 21:23:14 +0000 (21:23 +0000)
dlerror() is the correct way to test.
(This used to be commit 41b1be15bac271116a7096e511cc029685013e1f)

source3/lib/module.c

index 5ad64858064ab0c996a8bff593b6e89104a6d65f..6febe8a9f1644df14f90bdbabea3e06eaa3e8c35 100644 (file)
@@ -27,6 +27,7 @@ NTSTATUS smb_load_module(const char *module_name)
        void *handle;
        init_module_function *init;
        NTSTATUS nt_status;
+       const char *error;
 
        /* Always try to use LAZY symbol resolving; if the plugin has 
         * backwards compatibility, there might be symbols in the 
@@ -41,8 +42,11 @@ NTSTATUS smb_load_module(const char *module_name)
 
        init = sys_dlsym(handle, "init_module");
 
-       if(!init) {
-               DEBUG(0, ("Error trying to resolve symbol 'init_module' in %s: %s\n", module_name, sys_dlerror()));
+       /* we must check sys_dlerror() to determine if it worked, because
+           sys_dlsym() can validly return NULL */
+       error = sys_dlerror();
+       if (error) {
+               DEBUG(0, ("Error trying to resolve symbol 'init_module' in %s: %s\n", module_name, error));
                return NT_STATUS_UNSUCCESSFUL;
        }