use the new modules system for the rpc modules (backport from HEAD)
authorJelmer Vernooij <jelmer@samba.org>
Tue, 15 Apr 2003 16:55:21 +0000 (16:55 +0000)
committerJelmer Vernooij <jelmer@samba.org>
Tue, 15 Apr 2003 16:55:21 +0000 (16:55 +0000)
(This used to be commit aca7319e8d45eb604f28b8bd490413b08e2c98f2)

source3/Makefile.in
source3/rpc_server/srv_dfs.c
source3/rpc_server/srv_lsa.c
source3/rpc_server/srv_netlog.c
source3/rpc_server/srv_pipe.c
source3/rpc_server/srv_reg.c
source3/rpc_server/srv_samr.c
source3/rpc_server/srv_spoolss.c
source3/rpc_server/srv_srvsvc.c
source3/rpc_server/srv_wkssvc.c

index f4dde29be17c4a4da3a87c1b16b43a65295dcf70..744194ce4aa7050b18321d89841aa0938783567f 100644 (file)
@@ -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)
index f6e9ca3d567ba295e6ba2a42ca400fc53cc5cf10..0807efd550c08b5fa5bac1753cd02ca1fa538225 100644 (file)
@@ -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[] =
     {
index 11388a00b102856ae3071741a4b666a52d417bc0..8648213fdaad1116d734da92f05700304b9a633b 100644 (file)
@@ -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[] =
 {
index f377d3952bf038aa5d9afd61b9a0e8d65ca09155..7dc0f57f34f6ebf7486c971fa4fb53aa9b76edc6 100644 (file)
@@ -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 [] =
     {
index 1a48435c9d629c491d260028b718273101d02c3b..43fbb4edaacec9a436e8d01706ff0afbeba57dda 100644 (file)
@@ -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)) {
index 04960f8e3a3c54c5c70cf65cddff99033a0ef1fd..f72d8e4f295354054d5bf4b536783e56b0a882d4 100644 (file)
@@ -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[] =
     {
index 3a31ec82e14e28a692553e262bb6620f80711a28..67c092775b974a39c405f8a93db8e0cc65b04f3a 100644 (file)
@@ -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 [] =
     {
index 5832ae876bfed0f59e03b75ae685179b73b1c6fe..a7dd7a6cef5a0f2e2ce7874377359492f9033e92 100755 (executable)
@@ -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[] = 
     {
index 983c660965129528c7d91e54ff823c4404a4c484..96820ae74bc3b1b6d6791f02f3f7815bc35d8e3c 100644 (file)
@@ -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[] =
     {
index 1fed2cc6db0853443b0c826132d38d3e1300caea..ddcbadd1d44dad780f90830e8cd7c0daf10dac4e 100644 (file)
@@ -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[] =
     {