From 24258c9f2daa529fa1fa1aff2e38540dff724d2e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 6 Mar 2005 22:37:31 +0000 Subject: r5675: - More DCOM bug fixes - Keep COM and DCOM more seperated --- source/build/pidl/pidl.pl | 2 +- source/lib/com/classes/simple.c | 14 +++++++++----- source/lib/com/com.h | 12 +----------- source/lib/com/dcom/dcom.h | 36 ++++++++++++++++++++++++++++++++++++ source/lib/com/dcom/main.c | 11 ++++++----- source/librpc/config.mk | 1 - source/torture/com/simple.c | 1 - source/torture/rpc/oxidresolve.c | 5 +---- source/torture/rpc/remact.c | 5 +---- 9 files changed, 55 insertions(+), 32 deletions(-) create mode 100644 source/lib/com/dcom/dcom.h (limited to 'source') diff --git a/source/build/pidl/pidl.pl b/source/build/pidl/pidl.pl index 9e1ce48467e..c94163f334c 100755 --- a/source/build/pidl/pidl.pl +++ b/source/build/pidl/pidl.pl @@ -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; } diff --git a/source/lib/com/classes/simple.c b/source/lib/com/classes/simple.c index a6134d4c36c..ad03c17cce2 100644 --- a/source/lib/com/classes/simple.c +++ b/source/lib/com/classes/simple.c @@ -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); } diff --git a/source/lib/com/com.h b/source/lib/com/com.h index a056d1d9ee8..97841e14c38 100644 --- a/source/lib/com/com.h +++ b/source/lib/com/com.h @@ -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 index 00000000000..668d9521242 --- /dev/null +++ b/source/lib/com/dcom/dcom.h @@ -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 */ diff --git a/source/lib/com/dcom/main.c b/source/lib/com/dcom/main.c index b8c2eef82ca..853af4c7398 100644 --- a/source/lib/com/dcom/main.c +++ b/source/lib/com/dcom/main.c @@ -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++; diff --git a/source/librpc/config.mk b/source/librpc/config.mk index 086a2323430..e5660af9075 100644 --- a/source/librpc/config.mk +++ b/source/librpc/config.mk @@ -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 diff --git a/source/torture/com/simple.c b/source/torture/com/simple.c index 32b269f4751..4eceb6a9483 100644 --- a/source/torture/com/simple.c +++ b/source/torture/com/simple.c @@ -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) diff --git a/source/torture/rpc/oxidresolve.c b/source/torture/rpc/oxidresolve.c index 6164825af73..3ff90e3a01f 100644 --- a/source/torture/rpc/oxidresolve.c +++ b/source/torture/rpc/oxidresolve.c @@ -23,10 +23,7 @@ #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) { diff --git a/source/torture/rpc/remact.c b/source/torture/rpc/remact.c index 9db1e4f164d..83a88117871 100644 --- a/source/torture/rpc/remact.c +++ b/source/torture/rpc/remact.c @@ -22,10 +22,7 @@ #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) { -- cgit