r3629: A bit of work on the DCOM server architecture, small fixes
authorJelmer Vernooij <jelmer@samba.org>
Tue, 9 Nov 2004 00:30:44 +0000 (00:30 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:05:40 +0000 (13:05 -0500)
source/librpc/idl/remact.idl
source/rpc_server/config.m4
source/rpc_server/config.mk
source/rpc_server/dcom/oxidresolver.c
source/rpc_server/dcom/remact.c
source/rpc_server/dcom/rot.c [new file with mode: 0644]

index 6065d41bcc0a789ea0e2af2e43f08d74ded396ff..d73f6c51251771a03d3f7f3a68e001dea8139dc5 100644 (file)
@@ -5,8 +5,6 @@
   http://www.grimes.demon.co.uk/DCOM/DCOMSpec.htm
  */
 
-#define IPID GUID
-
 [
        uuid("4d9f4ab8-7d1c-11cf-861e-0020af6e7c57"),
        pointer_default(unique),
@@ -43,7 +41,7 @@ interface IRemoteActivation
                        [in, size_is(num_protseqs)] uint16 protseq[],
                        [out] HYPER_T pOxid,
                        [out] DUALSTRINGARRAY *pdsaOxidBindings,
-                       [out] IPID ipidRemUnknown,
+                       [out] GUID ipidRemUnknown,
                        [out] uint32 AuthnHint,
                        [out] COMVERSION ServerVersion,
                        [out] WERROR hr,
index 52559aa12f23a8b584a89776f20690a05412979e..7fb8b555c2b6cace39d30b59764a5629e765cd90 100644 (file)
@@ -15,8 +15,7 @@ SMB_MODULE_MK(dcerpc_winreg,DCERPC,STATIC,rpc_server/config.mk)
 SMB_MODULE_MK(dcerpc_netlogon,DCERPC,STATIC,rpc_server/config.mk)
 SMB_MODULE_MK(dcerpc_lsarpc,DCERPC,STATIC,rpc_server/config.mk)
 SMB_MODULE_MK(dcerpc_spoolss,DCERPC,STATIC,rpc_server/config.mk)
-SMB_MODULE_MK(dcerpc_IOXIDResolver,DCERPC,STATIC,rpc_server/config.mk)
-SMB_MODULE_MK(dcerpc_IRemoteActivation,DCERPC,STATIC,rpc_server/config.mk)
+SMB_MODULE_MK(dcerpc_dcom,DCERPC,STATIC,rpc_server/config.mk)
 SMB_MODULE_MK(dcerpc_drsuapi,DCERPC,STATIC,rpc_server/config.mk)
 
 SMB_SUBSYSTEM_MK(DCERPC,rpc_server/config.mk)
index a513377077eaa969713cbe78cd68d240d747aa56..4b89e875cfad70e4b6565f0edd0b796d0a4bd54d 100644 (file)
@@ -12,21 +12,12 @@ ADD_OBJ_FILES = \
 ################################################
 
 ################################################
-# Start MODULE dcerpc_IOXIDResolver
-[MODULE::dcerpc_IOXIDResolver]
-INIT_FUNCTION = dcerpc_server_IOXIDResolver_init
-INIT_OBJ_FILES = \
-               rpc_server/dcom/oxidresolver.o
-REQUIRED_SUBSYSTEMS = \
-               DCERPC_COMMON
-# End MODULE dcerpc_IOXIDResolver
-################################################
-
-################################################
-# Start MODULE dcerpc_IRemoteActivation
-[MODULE::dcerpc_IRemoteActivation]
-INIT_FUNCTION = dcerpc_server_IRemoteActivation_init
+# Start MODULE dcerpc_DCOM
+[MODULE::dcerpc_dcom]
+INIT_FUNCTION = dcerpc_server_dcom_init
 INIT_OBJ_FILES = \
+               rpc_server/dcom/oxidresolver.o \
+               rpc_server/dcom/rot.o \
                rpc_server/dcom/remact.o
 REQUIRED_SUBSYSTEMS = \
                DCERPC_COMMON
index 213802fade56e679892d6a00505b8d3c14206a11..a3f65b62e5629fee1770323d3440c2424d1e06db 100644 (file)
@@ -89,21 +89,30 @@ static WERROR ServerAlive(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ct
 */
 static WERROR ResolveOxid2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ResolveOxid2 *r)
 {
+       ZERO_STRUCT(r->out);
+       r->out.ComVersion.MajorVersion = COM_MAJOR_VERSION;
+       r->out.ComVersion.MinorVersion = COM_MINOR_VERSION;
        return WERR_NOT_SUPPORTED;
 }
 
+struct DUALSTRINGARRAY *dcom_server_generate_dual_string(TALLOC_CTX *mem_ctx, struct dcesrv_call_state *state)
+{
+       return NULL; /* FIXME */
+}
 
 /* 
   ServerAlive2 
 */
 static WERROR ServerAlive2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ServerAlive2 *r)
 {
-       return WERR_NOT_SUPPORTED;
+       ZERO_STRUCT(r->out);
+       r->out.info.version.MajorVersion = COM_MAJOR_VERSION;
+       r->out.info.version.MinorVersion = COM_MINOR_VERSION;
+       r->out.dualstring = *dcom_server_generate_dual_string(mem_ctx, dce_call);
+       return WERR_OK;
 }
 
-/* FIXME: Regularly ping objects in use by local programs on 
- * remote servers */
-
+/* FIXME: Garbage collect objects that haven't been pinged */
 
 /* include the generated boilerplate */
 #include "librpc/gen_ndr/ndr_oxidresolver_s.c"
index 8259b96a5173ceb8cdd8344bb54eb070bc5a6d3c..086d32a82f3b1adcd5032385bcf2891e593699e6 100644 (file)
 #include "rpc_server/dcerpc_server.h"
 #include "rpc_server/common/common.h"
 #include "librpc/gen_ndr/ndr_remact.h"
+#include "librpc/gen_ndr/ndr_oxidresolver.h"
 #include "rpc_server/dcom/dcom.h"
 
-static void register_dcom_class(void *_c)
-{
-       struct dcom_class *class = _c;
-       /* FIXME */
-}
-
-struct dcom_object *dcom_object_by_oid(struct GUID *oid)
-{
-       /* FIXME */
-       return NULL;
-}
-
-struct dcom_class *dcom_class_by_clsid(struct GUID *clsid)
-{
-       /* FIXME */
-       return NULL;
-}
-
 struct dcom_interface_pointer *dcom_interface_pointer_by_ipid(struct GUID *ipid)
 {
        /* FIXME */
@@ -57,10 +40,38 @@ static WERROR RemoteActivation(struct dcesrv_call_state *dce_call, TALLOC_CTX *m
 {
        /* FIXME: CoGetClassObject() */
        /* FIXME: IClassFactory::CreateInstance() */
+       /* FIXME: Register newly created object with dcerpc subsystem */
        /* FIXME: IClassFactory::Release() */
+       
+       ZERO_STRUCT(r->out);
+       r->out.ServerVersion.MajorVersion = COM_MAJOR_VERSION;
+       r->out.ServerVersion.MinorVersion = COM_MINOR_VERSION;
+
+       /* FIXME: */
+       r->out.hr = WERR_NOT_SUPPORTED;
+       r->out.pOxid = 0;
+       r->out.AuthnHint = 0;
+       /* FIXME: Loop thru given interfaces and set r->out.results and 
+        * r->out.interfaces */
+       
        return WERR_NOT_SUPPORTED;
 }
 
+NTSTATUS dcerpc_server_dcom_init(void)
+{
+       NTSTATUS status;
+       status = dcerpc_server_IOXIDResolver_init();
+       if (NT_STATUS_IS_ERR(status)) {
+               return status;
+       }
+
+       status = dcerpc_server_IRemoteActivation_init();
+       if (NT_STATUS_IS_ERR(status)) {
+               return status;
+       }
+
+       return NT_STATUS_OK;
+}
 
 /* include the generated boilerplate */
 #include "librpc/gen_ndr/ndr_remact_s.c"
diff --git a/source/rpc_server/dcom/rot.c b/source/rpc_server/dcom/rot.c
new file mode 100644 (file)
index 0000000..f55ff59
--- /dev/null
@@ -0,0 +1,46 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Running object table functions
+
+   Copyright (C) Jelmer Vernooij 2004
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "rpc_server/dcerpc_server.h"
+#include "rpc_server/common/common.h"
+#include "rpc_server/dcom/dcom.h"
+
+
+static void register_dcom_class(void *_c)
+{
+       struct dcom_class *class = _c;
+       /* FIXME */
+}
+
+struct dcom_object *dcom_object_by_oid(struct GUID *oid)
+{
+       /* FIXME */
+       return NULL;
+}
+
+struct dcom_class *dcom_class_by_clsid(struct GUID *clsid)
+{
+       /* FIXME */
+       return NULL;
+}
+