From dd2aefd56b0968da8b1c4d055bc8c2f30382fb23 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 (This used to be commit f694f484c422d0c86beb58e8f62f134f8676d5e1) --- source4/lib/com/classes/simple.c | 14 +++++++++----- source4/lib/com/com.h | 12 +----------- source4/lib/com/dcom/dcom.h | 36 ++++++++++++++++++++++++++++++++++++ source4/lib/com/dcom/main.c | 11 ++++++----- 4 files changed, 52 insertions(+), 21 deletions(-) create mode 100644 source4/lib/com/dcom/dcom.h (limited to 'source4/lib') diff --git a/source4/lib/com/classes/simple.c b/source4/lib/com/classes/simple.c index a6134d4c36..ad03c17cce 100644 --- a/source4/lib/com/classes/simple.c +++ b/source4/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/source4/lib/com/com.h b/source4/lib/com/com.h index a056d1d9ee..97841e14c3 100644 --- a/source4/lib/com/com.h +++ b/source4/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/source4/lib/com/dcom/dcom.h b/source4/lib/com/dcom/dcom.h new file mode 100644 index 0000000000..668d952124 --- /dev/null +++ b/source4/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/source4/lib/com/dcom/main.c b/source4/lib/com/dcom/main.c index b8c2eef82c..853af4c739 100644 --- a/source4/lib/com/dcom/main.c +++ b/source4/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++; -- cgit