r5675: - More DCOM bug fixes
authorJelmer Vernooij <jelmer@samba.org>
Sun, 6 Mar 2005 22:37:31 +0000 (22:37 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:10:59 +0000 (13:10 -0500)
- Keep COM and DCOM more seperated

source/build/pidl/pidl.pl
source/lib/com/classes/simple.c
source/lib/com/com.h
source/lib/com/dcom/dcom.h [new file with mode: 0644]
source/lib/com/dcom/main.c
source/librpc/config.mk
source/torture/com/simple.c
source/torture/rpc/oxidresolve.c
source/torture/rpc/remact.c

index 9e1ce48467e1bc2b0e73b3804ce7713ae60ab874..c94163f334c3b6019edde8f4003b44dc14850520 100755 (executable)
@@ -177,7 +177,7 @@ sub process_file($)
                        util::FileSave($client, 
                        "#include \"includes.h\"\n" .
                        "#include \"librpc/gen_ndr/com_$basename.h\"\n" . 
-                       "#include \"lib/dcom/common/orpc.h\"\n". $res);
+                       "#include \"lib/com/dcom/dcom.h\"\n" .$res);
                }
                $opt_odl = 1;
        }
index a6134d4c36cb2a3e86a861a14ec0e59a70160615..ad03c17cce24502a249ebf28cf1bb9ba14879bd7 100644 (file)
@@ -22,8 +22,8 @@
 #include "lib/com/com.h"
 #include "librpc/gen_ndr/com_dcom.h"
 
-extern const struct IClassFactory_vtable simple_classobject_vtable;
-extern const struct IStream_vtable simple_IStream_vtable;
+extern struct IClassFactory_vtable simple_classobject_vtable;
+extern struct IStream_vtable simple_IStream_vtable;
 
 static WERROR simple_IUnknown_QueryInterface (struct IUnknown *d, TALLOC_CTX *mem_ctx, struct GUID *iid, struct IUnknown **iun)
 {
@@ -69,7 +69,7 @@ static WERROR simpleclass_IClassFactory_CreateInstance (struct IClassFactory *d,
        ret->vtable = &simple_IStream_vtable;
        ret->object_data = NULL;
 
-       *ppv = ret;
+       *ppv = (struct IUnknown *)ret;
        
        return WERR_OK;
 }
@@ -85,7 +85,8 @@ static uint32_t simpleclass_IUnknown_Release (struct IUnknown *d, TALLOC_CTX *me
 }
 
 /* Everything below this line should be autogenerated later on */
-const struct IClassFactory_vtable simple_classobject_vtable = {
+struct IClassFactory_vtable simple_classobject_vtable = {
+       {},
        simpleclass_IUnknown_QueryInterface, 
        simpleclass_IUnknown_AddRef, 
        simpleclass_IUnknown_Release,
@@ -95,7 +96,8 @@ const struct IClassFactory_vtable simple_classobject_vtable = {
        NULL
 };
 
-const struct IStream_vtable simple_IStream_vtable = {
+struct IStream_vtable simple_IStream_vtable = {
+       {},
        simple_IUnknown_QueryInterface,
        simple_IUnknown_AddRef, 
        simple_IUnknown_Release,
@@ -113,6 +115,8 @@ NTSTATUS com_simple_init(void)
        class_object->vtable = (struct IUnknown_vtable *)&simple_classobject_vtable;
 
        GUID_from_string(CLSID_SIMPLE, &clsid);
+       GUID_from_string(COM_ICLASSFACTORY_UUID, &simple_classobject_vtable.iid);
+       GUID_from_string(COM_ISTREAM_UUID, &simple_IStream_vtable.iid);
 
        return com_register_running_class(&clsid, PROGID_SIMPLE, class_object);
 }
index a056d1d9ee8a459e1aa98803cddb6e7493699b07..97841e14c389ded1efb5958fdc12b66450069c03 100644 (file)
@@ -25,17 +25,7 @@ struct IUnknown_vtable;
 
 struct com_context 
 {
-       struct {
-               const char *domain;
-               const char *user;
-               const char *password;
-               struct dcom_object_exporter {
-                       uint64_t oxid;  
-                       struct DUALSTRINGARRAY bindings;
-                       struct dcerpc_pipe *pipe;
-                       struct dcom_object_exporter *prev, *next;
-               } *object_exporters;
-       } dcom;
+       struct dcom_client_context *dcom;
 };
 
 typedef struct IUnknown *(*get_class_object_function) (const struct GUID *clsid);
diff --git a/source/lib/com/dcom/dcom.h b/source/lib/com/dcom/dcom.h
new file mode 100644 (file)
index 0000000..668d952
--- /dev/null
@@ -0,0 +1,36 @@
+/* 
+   Unix SMB/CIFS implementation.
+   COM standard objects
+   Copyright (C) Jelmer Vernooij                                         2004-2005.
+   
+   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.
+*/
+
+#ifndef _DCOM_H /* _DCOM_H */
+#define _DCOM_H 
+
+struct dcom_client_context {
+       const char *domain;
+       const char *user;
+       const char *password;
+       struct dcom_object_exporter {
+               uint64_t oxid;  
+               struct DUALSTRINGARRAY bindings;
+               struct dcerpc_pipe *pipe;
+               struct dcom_object_exporter *prev, *next;
+       } *object_exporters;
+};
+
+#endif /* _DCOM_H */
index b8c2eef82ca55396e7a0e61550af3f528a447f5d..853af4c739897a40fcddcdac5b29beca979a2e07 100644 (file)
@@ -26,6 +26,7 @@
 #include "librpc/gen_ndr/ndr_oxidresolver.h"
 #include "librpc/gen_ndr/ndr_dcom.h"
 #include "librpc/gen_ndr/com_dcom.h"
+#include "lib/com/dcom/dcom.h"
 
 #define DCOM_NEGOTIATED_PROTOCOLS { EPM_PROTOCOL_TCP, EPM_PROTOCOL_SMB, EPM_PROTOCOL_NCALRPC }
 
@@ -71,7 +72,7 @@ static NTSTATUS dcom_connect_host(struct com_context *ctx, struct dcerpc_pipe **
                return dcerpc_pipe_connect_b(p, &bd, 
                                        DCERPC_IREMOTEACTIVATION_UUID, 
                                        DCERPC_IREMOTEACTIVATION_VERSION, 
-                                       ctx->dcom.domain, ctx->dcom.user, ctx->dcom.password);
+                                       ctx->dcom->domain, ctx->dcom->user, ctx->dcom->password);
        }
 
        /* Allow server name to contain a binding string */
@@ -79,7 +80,7 @@ static NTSTATUS dcom_connect_host(struct com_context *ctx, struct dcerpc_pipe **
                status = dcerpc_pipe_connect_b(p, &bd, 
                                        DCERPC_IREMOTEACTIVATION_UUID, 
                                        DCERPC_IREMOTEACTIVATION_VERSION, 
-                                       ctx->dcom.domain, ctx->dcom.user, ctx->dcom.password);
+                                       ctx->dcom->domain, ctx->dcom->user, ctx->dcom->password);
 
                talloc_free(mem_ctx);
                return status;
@@ -96,7 +97,7 @@ static NTSTATUS dcom_connect_host(struct com_context *ctx, struct dcerpc_pipe **
                status = dcerpc_pipe_connect_b(p, &bd, 
                                                DCERPC_IREMOTEACTIVATION_UUID, 
                                                DCERPC_IREMOTEACTIVATION_VERSION, 
-                                               ctx->dcom.domain, ctx->dcom.user, ctx->dcom.password);
+                                               ctx->dcom->domain, ctx->dcom->user, ctx->dcom->password);
 
                if (NT_STATUS_IS_OK(status)) {
                        return status;
@@ -279,8 +280,8 @@ NTSTATUS dcom_get_pipe (struct IUnknown *iface, struct dcerpc_pipe **pp)
                } else {
                        status = dcerpc_pipe_connect_b(&p, &binding, 
                                                       uuid, 0.0, 
-                                                      iface->ctx->dcom.domain, iface->ctx->dcom.user, 
-                                                      iface->ctx->dcom.password);
+                                                      iface->ctx->dcom->domain, iface->ctx->dcom->user, 
+                                                      iface->ctx->dcom->password);
                }
 
                i++;
index 086a23234300fdb8fcd47b10f8df47d4c7fb299b..e5660af9075ea01fb4a9685cf85bb52a31933cb9 100644 (file)
@@ -448,7 +448,6 @@ NOPROTO = YES
 
 [SUBSYSTEM::DCOM_PROXY_DCOM]
 ADD_OBJ_FILES = librpc/gen_ndr/ndr_dcom_c.o
-INIT_FUNCTION = dcom_dcom_init
 REQUIRED_SUBSYSTEMS = LIBRPC NDR_DCOM
 NOPROTO = YES
 
index 32b269f475122c74caf4ce89d2057f862c165a3f..4eceb6a948344040acbb3aeb1ee24abcb3ea19d7 100644 (file)
@@ -23,7 +23,6 @@
 #include "lib/com/com.h"
 #include "librpc/gen_ndr/com_dcom.h"
 
-#define CLSID_SIMPLE "5e9ddec7-5767-11cf-beab-00aa006c3606"
 #define DEFAULT_TRANS 4096
 
 static BOOL test_readwrite(TALLOC_CTX *mem_ctx, const char *host)
index 6164825af73dc2f89f8df7e86689a4e7e558aa36..3ff90e3a01ff5e052e8d8fddc44de5c50a7668f8 100644 (file)
 #include "librpc/gen_ndr/ndr_oxidresolver.h"
 #include "librpc/gen_ndr/ndr_remact.h"
 #include "librpc/gen_ndr/ndr_epmapper.h"
-
-#define CLSID_TEST "00000316-0000-0000-C000-000000000046"
-#define CLSID_SIMPLE "5e9ddec7-5767-11cf-beab-00aa006c3606"
-#define CLSID_COFFEEMACHINE "DB7C21F8-FE33-4C11-AEA5-CEB56F076FBB"
+#include "librpc/gen_ndr/com_dcom.h"
 
 static int test_RemoteActivation(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, uint64_t *oxid, struct GUID *oid)
 {
index 9db1e4f164d29618fc39a099c505c59fba658495..83a881178716782b4c896c1109a83cafed9169c9 100644 (file)
 #include "includes.h"
 #include "librpc/gen_ndr/ndr_remact.h"
 #include "librpc/gen_ndr/ndr_epmapper.h"
-
-#define CLSID_TEST "00000316-0000-0000-C000-000000000046"
-#define CLSID_SIMPLE "5e9ddec7-5767-11cf-beab-00aa006c3606"
-#define CLSID_COFFEEMACHINE "DB7C21F8-FE33-4C11-AEA5-CEB56F076FBB"
+#include "librpc/gen_ndr/com_dcom.h"
 
 static int test_RemoteActivation(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
 {