1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-26 10:04:02 +03:00

r5675: - More DCOM bug fixes

- Keep COM and DCOM more seperated
(This used to be commit f694f484c422d0c86beb58e8f62f134f8676d5e1)
This commit is contained in:
Jelmer Vernooij 2005-03-06 22:37:31 +00:00 committed by Gerald (Jerry) Carter
parent 77ec3f684d
commit dd2aefd56b
9 changed files with 55 additions and 32 deletions

View File

@ -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;
}

View 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);
}

View 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);

View File

@ -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 */

View 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++;

View 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

View 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)

View File

@ -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)
{

View File

@ -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)
{