diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2003-02-18 18:34:48 +0000 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2003-02-18 18:34:48 +0000 |
commit | c536b88b2b71c264a1e31ada51e463fee5cb949b (patch) | |
tree | 406f7c9d2d1ca7afc1245ddf9487f7106fd91b83 /source3/rpc_server/srv_pipe.c | |
parent | 030beddfb3c5208256c08b3cd2620332113f6308 (diff) | |
download | samba-c536b88b2b71c264a1e31ada51e463fee5cb949b.tar.gz samba-c536b88b2b71c264a1e31ada51e463fee5cb949b.tar.bz2 samba-c536b88b2b71c264a1e31ada51e463fee5cb949b.zip |
Use the new modules stuff to load dynrpc modules. Basically this means:
- calling the initialization function in the module init_module() instead of rpc_pipe_init()
- calling smb_load_module() to do the dlopen(), dlsym() and init_module() calls
I'll merge this to 3.0, together with the smb_load_module() function.
Discussed with Anthony.
(This used to be commit 3757ed8df06ca2b306bef336bdb9c7671f5e6a65)
Diffstat (limited to 'source3/rpc_server/srv_pipe.c')
-rw-r--r-- | source3/rpc_server/srv_pipe.c | 31 |
1 files changed, 6 insertions, 25 deletions
diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c index 50127005a1..0b8b7b229a 100644 --- a/source3/rpc_server/srv_pipe.c +++ b/source3/rpc_server/srv_pipe.c @@ -794,42 +794,23 @@ int rpc_pipe_register_commands(const char *clnt, const char *srv, const struct a /******************************************************************* Register commands to an RPC pipe *******************************************************************/ -int rpc_load_module(const char *module) +NTSTATUS rpc_load_module(const char *module) { -#ifdef HAVE_DLOPEN - void *handle; - int (*module_init)(void); pstring full_path; - char *error; + NTSTATUS status; pstrcpy(full_path, lib_path("rpc")); pstrcat(full_path, "/librpc_"); pstrcat(full_path, module); pstrcat(full_path, "."); pstrcat(full_path, shlib_ext()); - - handle = sys_dlopen(full_path, RTLD_LAZY); - if (!handle) { + + if (!NT_STATUS_IS_OK(status = smb_load_module(full_path))) { DEBUG(0, ("Could not load requested pipe %s as %s\n", module, full_path)); - DEBUG(0, (" Error: %s\n", dlerror())); - return 0; } - DEBUG(3, ("Module '%s' loaded\n", full_path)); - - module_init = sys_dlsym(handle, "rpc_pipe_init"); - if ((error = sys_dlerror()) != NULL) { - DEBUG(0, ("Error trying to resolve symbol 'rpc_pipe_init' in %s: %s\n", - full_path, error)); - return 0; - } - - return module_init(); -#else - DEBUG(0,("Attempting to load a dynamic RPC pipe when dlopen isn't available\n")); - return 0; -#endif + return status; } /******************************************************************* @@ -877,7 +858,7 @@ BOOL api_pipe_bind_req(pipes_struct *p, prs_struct *rpc_in_p) } } - if (!api_fd_commands[i].name && !rpc_load_module(p->name)) { + if (!api_fd_commands[i].name && !NT_STATUS_IS_OK(rpc_load_module(p->name))) { DEBUG(3,("api_pipe_bind_req: Unknown pipe name %s in bind request.\n", p->name )); if(!setup_bind_nak(p)) |