From ab8a9c8419a66ff22714fb84530534fde321db26 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 15 Apr 2003 16:55:21 +0000 Subject: use the new modules system for the rpc modules (backport from HEAD) (This used to be commit aca7319e8d45eb604f28b8bd490413b08e2c98f2) --- source3/Makefile.in | 40 +++------------ source3/rpc_server/srv_dfs.c | 4 -- source3/rpc_server/srv_lsa.c | 4 -- source3/rpc_server/srv_netlog.c | 4 -- source3/rpc_server/srv_pipe.c | 106 +++------------------------------------ source3/rpc_server/srv_reg.c | 4 -- source3/rpc_server/srv_samr.c | 4 -- source3/rpc_server/srv_spoolss.c | 4 -- source3/rpc_server/srv_srvsvc.c | 4 -- source3/rpc_server/srv_wkssvc.c | 4 -- 10 files changed, 15 insertions(+), 163 deletions(-) (limited to 'source3') diff --git a/source3/Makefile.in b/source3/Makefile.in index f4dde29be1..744194ce4a 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -141,7 +141,8 @@ QUOTAOBJS=@QUOTAOBJS@ VFS_MODULES = bin/vfs_audit.@SHLIBEXT@ bin/vfs_extd_audit.@SHLIBEXT@ bin/vfs_recycle.@SHLIBEXT@ bin/vfs_netatalk.@SHLIBEXT@ PDB_MODULES = @PDB_MODULES@ -MODULES = $(VFS_MODULES) $(PDB_MODULES) +RPC_MODULES = @RPC_MODULES@ +MODULES = $(VFS_MODULES) $(PDB_MODULES) $(RPC_MODULES) ###################################################################### # object file lists @@ -238,7 +239,6 @@ RPC_SVC_OBJ = rpc_server/srv_srvsvc.o rpc_server/srv_srvsvc_nt.o RPC_WKS_OBJ = rpc_server/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o RPC_DFS_OBJ = rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o - RPC_SPOOLSS_OBJ = rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o RPC_ECHO_OBJ = rpc_server/srv_echo.o rpc_server/srv_echo_nt.o @@ -246,32 +246,7 @@ RPC_ECHO_OBJ = rpc_server/srv_echo.o rpc_server/srv_echo_nt.o RPC_PIPE_OBJ = rpc_server/srv_pipe_hnd.o rpc_server/srv_util.o \ rpc_server/srv_pipe.o rpc_server/srv_lsa_hnd.o -# These are like they are to avoid a dependency on GNU MAKE -@LSA_DYNAMIC_YES@RPC_MODULES1 = bin/librpc_lsarpc.@SHLIBEXT@ -@NETLOG_DYNAMIC_YES@RPC_MODULES2 = bin/librpc_NETLOGON.@SHLIBEXT@ -@SAMR_DYNAMIC_YES@RPC_MODULES3 = bin/librpc_samr.@SHLIBEXT@ -@SVC_DYNAMIC_YES@RPC_MODULES4 = bin/librpc_srvsvc.@SHLIBEXT@ -@WKS_DYNAMIC_YES@RPC_MODULES5 = bin/librpc_wkssvc.@SHLIBEXT@ -@REG_DYNAMIC_YES@RPC_MODULES6 = bin/librpc_winreg.@SHLIBEXT@ -@SPOOLSS_DYNAMIC_YES@RPC_MODULES7 = bin/librpc_spoolss.@SHLIBEXT@ -@DFS_DYNAMIC_YES@RPC_MODULES8 = bin/librpc_netdfs.@SHLIBEXT@ -@ECHO_DYNAMIC_YES@RPC_MODULES9 = bin/librpc_echo.@SHLIBEXT@ -RPC_MODULES = $(RPC_MODULES1) $(RPC_MODULES2) $(RPC_MODULES3) $(RPC_MODULES4) \ - $(RPC_MODULES5) $(RPC_MODULES6) $(RPC_MODULES7) $(RPC_MODULES8) \ - $(RPC_MODULES9) - -@LSA_DYNAMIC_NO@RPC_PIPE_OBJ1 = $(RPC_LSA_OBJ) -@NETLOG_DYNAMIC_NO@RPC_PIPE_OBJ2 = $(RPC_NETLOG_OBJ) -@SAMR_DYNAMIC_NO@RPC_PIPE_OBJ3 = $(RPC_SAMR_OBJ) -@SVC_DYNAMIC_NO@RPC_PIPE_OBJ4 = $(RPC_SVC_OBJ) -@WKS_DYNAMIC_NO@RPC_PIPE_OBJ5 = $(RPC_WKS_OBJ) -@REG_DYNAMIC_NO@RPC_PIPE_OBJ6 = $(RPC_REG_OBJ) -@SPOOLSS_DYNAMIC_NO@RPC_PIPE_OBJ7 = $(RPC_SPOOLSS_OBJ) -@DFS_DYNAMIC_NO@RPC_PIPE_OBJ8 = $(RPC_DFS_OBJ) -@ECHO_DYNAMIC_NO@RPC_PIPE_OBJ9 = $(RPC_ECHO_OBJ) -RPC_SERVER_OBJ = $(RPC_PIPE_OBJ1) $(RPC_PIPE_OBJ2) $(RPC_PIPE_OBJ3) \ - $(RPC_PIPE_OBJ4) $(RPC_PIPE_OBJ5) $(RPC_PIPE_OBJ6) $(RPC_PIPE_OBJ7) \ - $(RPC_PIPE_OBJ8) $(RPC_PIPE_OBJ9) $(RPC_PIPE_OBJ) +RPC_SERVER_OBJ = @RPC_STATIC@ $(RPC_PIPE_OBJ) # this includes only the low level parse code, not stuff # that requires knowledge of security contexts @@ -644,7 +619,7 @@ nsswitch : SHOWFLAGS bin/winbindd@EXEEXT@ bin/wbinfo@EXEEXT@ nsswitch/libnss_win wins : SHOWFLAGS nsswitch/libnss_wins.@SHLIBEXT@ -modules: SHOWFLAGS proto_exists $(VFS_MODULES) $(PDB_MODULES) +modules: SHOWFLAGS proto_exists $(MODULES) everything: all libsmbclient debug2html smbfilter talloctort modules torture @@ -1038,6 +1013,7 @@ installbin: all installdirs installmodules: all installdirs @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(VFS_MODULES) @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(PDBLIBDIR) $(PDB_MODULES) + @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(RPCLIBDIR) $(RPC_MODULES) installscripts: installdirs @$(SHELL) $(srcdir)/script/installscripts.sh $(INSTALLPERMS) $(DESTDIR)$(BINDIR) $(SCRIPTS) @@ -1113,11 +1089,11 @@ uninstallman: uninstallbin: @$(SHELL) $(srcdir)/script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(SBIN_PROGS) @$(SHELL) $(srcdir)/script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(BIN_PROGS) - @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(RPCLIBDIR) $(DESTDIR)$(RPC_MODULES) uninstallmodules: - @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(PDBLIBDIR) $(DESTDIR)$(VFS_MODULES) - @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(DESTDIR)$(PDB_MODULES) + @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(DESTDIR)$(VFS_MODULES) + @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(PDBLIBDIR) $(DESTDIR)$(PDB_MODULES) + @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(RPCLIBDIR) $(DESTDIR)$(RPC_MODULES) uninstallscripts: @$(SHELL) $(srcdir)/script/uninstallscripts.sh $(INSTALLPERMS) $(DESTDIR)$(BINDIR) $(SCRIPTS) diff --git a/source3/rpc_server/srv_dfs.c b/source3/rpc_server/srv_dfs.c index f6e9ca3d56..0807efd550 100644 --- a/source3/rpc_server/srv_dfs.c +++ b/source3/rpc_server/srv_dfs.c @@ -158,11 +158,7 @@ static BOOL api_dfs_enum(pipes_struct *p) \pipe\netdfs commands ********************************************************************/ -#ifdef RPC_DFS_DYNAMIC -int rpc_pipe_init(void) -#else int rpc_dfs_init(void) -#endif { struct api_struct api_netdfs_cmds[] = { diff --git a/source3/rpc_server/srv_lsa.c b/source3/rpc_server/srv_lsa.c index 11388a00b1..8648213fda 100644 --- a/source3/rpc_server/srv_lsa.c +++ b/source3/rpc_server/srv_lsa.c @@ -645,11 +645,7 @@ static BOOL api_lsa_query_info2(pipes_struct *p) /*************************************************************************** \PIPE\ntlsa commands ***************************************************************************/ -#ifdef RPC_LSA_DYNAMIC -int rpc_pipe_init(void) -#else int rpc_lsa_init(void) -#endif { static const struct api_struct api_lsa_cmds[] = { diff --git a/source3/rpc_server/srv_netlog.c b/source3/rpc_server/srv_netlog.c index f377d3952b..7dc0f57f34 100644 --- a/source3/rpc_server/srv_netlog.c +++ b/source3/rpc_server/srv_netlog.c @@ -321,11 +321,7 @@ static BOOL api_net_logon_ctrl(pipes_struct *p) array of \PIPE\NETLOGON operations ********************************************************************/ -#ifdef RPC_NETLOG_DYNAMIC -int rpc_pipe_init(void) -#else int rpc_net_init(void) -#endif { static struct api_struct api_net_cmds [] = { diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c index 1a48435c9d..43fbb4edaa 100644 --- a/source3/rpc_server/srv_pipe.c +++ b/source3/rpc_server/srv_pipe.c @@ -506,46 +506,6 @@ failed authentication on named pipe %s.\n", domain, user_name, wks, p->name )); The switch table for the pipe names and the functions to handle them. *******************************************************************/ -struct api_cmd -{ - const char *name; - int (*init)(void); -}; - -static struct api_cmd api_fd_commands[] = -{ -#ifndef RPC_LSA_DYNAMIC - { "lsarpc", rpc_lsa_init }, -#endif -#ifndef RPC_SAMR_DYNAMIC - { "samr", rpc_samr_init }, -#endif -#ifndef RPC_SVC_DYNAMIC - { "srvsvc", rpc_srv_init }, -#endif -#ifndef RPC_WKS_DYNAMIC - { "wkssvc", rpc_wks_init }, -#endif -#ifndef RPC_NETLOG_DYNAMIC - { "NETLOGON", rpc_net_init }, -#endif -#ifndef RPC_REG_DYNAMIC - { "winreg", rpc_reg_init }, -#endif -#ifndef RPC_SPOOLSS_DYNAMIC - { "spoolss", rpc_spoolss_init }, -#endif -#ifndef RPC_DFS_DYNAMIC - { "netdfs", rpc_dfs_init }, -#endif -#ifdef DEVELOPER -#ifndef RPC_ECHO_DYNAMIC - { "rpcecho", rpc_echo_init }, -#endif -#endif - { NULL, NULL } -}; - struct rpc_table { struct @@ -848,47 +808,6 @@ int rpc_pipe_register_commands(const char *clnt, const char *srv, const struct a return size; } -/******************************************************************* - Register commands to an RPC pipe -*******************************************************************/ -int rpc_load_module(const char *module) -{ -#ifdef HAVE_DLOPEN - void *handle; - int (*module_init)(void); - pstring full_path; - const char *error; - - 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) { - 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 -} - /******************************************************************* Respond to a pipe bind request. *******************************************************************/ @@ -928,14 +847,7 @@ BOOL api_pipe_bind_req(pipes_struct *p, prs_struct *rpc_in_p) } if (i == rpc_lookup_size) { - for (i = 0; api_fd_commands[i].name; i++) { - if (strequal(api_fd_commands[i].name, p->name)) { - api_fd_commands[i].init(); - break; - } - } - - if (!api_fd_commands[i].name && !rpc_load_module(p->name)) { + if (!smb_probe_module("rpc", p->name)) { DEBUG(3,("api_pipe_bind_req: Unknown pipe name %s in bind request.\n", p->name )); if(!setup_bind_nak(p)) @@ -951,6 +863,11 @@ BOOL api_pipe_bind_req(pipes_struct *p, prs_struct *rpc_in_p) break; } } + + if (i == rpc_lookup_size) { + DEBUG(0, ("module %s doesn't provide functions for pipe %s!\n", p->name, p->name)); + return False; + } } /* decode the bind request */ @@ -1478,16 +1395,7 @@ BOOL api_pipe_request(pipes_struct *p) if (i == rpc_lookup_size) { - for (i = 0; api_fd_commands[i].name; i++) { - if (strequal(api_fd_commands[i].name, p->name)) { - api_fd_commands[i].init(); - break; - } - } - - if (!api_fd_commands[i].name) { - rpc_load_module(p->name); - } + smb_probe_module("rpc", p->name); for (i = 0; i < rpc_lookup_size; i++) { if (strequal(rpc_lookup[i].pipe.clnt, p->name)) { diff --git a/source3/rpc_server/srv_reg.c b/source3/rpc_server/srv_reg.c index 04960f8e3a..f72d8e4f29 100644 --- a/source3/rpc_server/srv_reg.c +++ b/source3/rpc_server/srv_reg.c @@ -373,11 +373,7 @@ static BOOL api_reg_save_key(pipes_struct *p) array of \PIPE\reg operations ********************************************************************/ -#ifdef RPC_REG_DYNAMIC -int rpc_pipe_init(void) -#else int rpc_reg_init(void) -#endif { static struct api_struct api_reg_cmds[] = { diff --git a/source3/rpc_server/srv_samr.c b/source3/rpc_server/srv_samr.c index 3a31ec82e1..67c092775b 100644 --- a/source3/rpc_server/srv_samr.c +++ b/source3/rpc_server/srv_samr.c @@ -1443,11 +1443,7 @@ static BOOL api_samr_set_dom_info(pipes_struct *p) array of \PIPE\samr operations ********************************************************************/ -#ifdef RPC_SAMR_DYNAMIC -int rpc_pipe_init(void) -#else int rpc_samr_init(void) -#endif { static struct api_struct api_samr_cmds [] = { diff --git a/source3/rpc_server/srv_spoolss.c b/source3/rpc_server/srv_spoolss.c index 5832ae876b..a7dd7a6cef 100755 --- a/source3/rpc_server/srv_spoolss.c +++ b/source3/rpc_server/srv_spoolss.c @@ -1580,11 +1580,7 @@ static BOOL api_spoolss_replycloseprinter(pipes_struct *p) \pipe\spoolss commands ********************************************************************/ -#ifdef RPC_SPOOLSS_DYNAMIC -int rpc_pipe_init(void) -#else int rpc_spoolss_init(void) -#endif { struct api_struct api_spoolss_cmds[] = { diff --git a/source3/rpc_server/srv_srvsvc.c b/source3/rpc_server/srv_srvsvc.c index 983c660965..96820ae74b 100644 --- a/source3/rpc_server/srv_srvsvc.c +++ b/source3/rpc_server/srv_srvsvc.c @@ -526,11 +526,7 @@ static BOOL api_srv_net_file_set_secdesc(pipes_struct *p) \PIPE\srvsvc commands ********************************************************************/ -#ifdef RPC_SVC_DYNAMIC -int rpc_pipe_init(void) -#else int rpc_srv_init(void) -#endif { static const struct api_struct api_srv_cmds[] = { diff --git a/source3/rpc_server/srv_wkssvc.c b/source3/rpc_server/srv_wkssvc.c index 1fed2cc6db..ddcbadd1d4 100644 --- a/source3/rpc_server/srv_wkssvc.c +++ b/source3/rpc_server/srv_wkssvc.c @@ -60,11 +60,7 @@ static BOOL api_wks_query_info(pipes_struct *p) \PIPE\wkssvc commands ********************************************************************/ -#ifdef RPC_WKS_DYNAMIC -int rpc_pipe_init(void) -#else int rpc_wks_init(void) -#endif { static struct api_struct api_wks_cmds[] = { -- cgit