summaryrefslogtreecommitdiff
path: root/source4/librpc
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2004-11-04 01:09:43 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:05:27 -0500
commit695677f4bb078291c683931d5017f339811abf90 (patch)
tree3711e7f7b111c192067e09a34a6cc255c9a6056d /source4/librpc
parent9a65c54c72cb5cbbe3d57df32193568850266b3b (diff)
downloadsamba-695677f4bb078291c683931d5017f339811abf90.tar.gz
samba-695677f4bb078291c683931d5017f339811abf90.tar.bz2
samba-695677f4bb078291c683931d5017f339811abf90.zip
r3515: Fix RemoteActivation correctly this time (-:
Thanks to tridge for some help on this one! (This used to be commit 1104667190aa144e2c7d79ece9a55502b98d0351)
Diffstat (limited to 'source4/librpc')
-rw-r--r--source4/librpc/idl/dcom.idl3
-rw-r--r--source4/librpc/idl/remact.idl11
-rw-r--r--source4/librpc/rpc/dcerpc_util.c8
3 files changed, 16 insertions, 6 deletions
diff --git a/source4/librpc/idl/dcom.idl b/source4/librpc/idl/dcom.idl
index 448ed827f9..9d37e5bc44 100644
--- a/source4/librpc/idl/dcom.idl
+++ b/source4/librpc/idl/dcom.idl
@@ -262,8 +262,7 @@ interface ObjectRpcBaseTypes
typedef [public] struct
{
uint32 size;
- uint32 sizex;
- [subcontext(4),align(1)] OBJREF obj;
+ [subcontext(4),align(4)] OBJREF obj;
} MInterfacePointer;
}
diff --git a/source4/librpc/idl/remact.idl b/source4/librpc/idl/remact.idl
index 1d54148f5e..8a77240a19 100644
--- a/source4/librpc/idl/remact.idl
+++ b/source4/librpc/idl/remact.idl
@@ -10,6 +10,7 @@
[
uuid("4d9f4ab8-7d1c-11cf-861e-0020af6e7c57"),
pointer_default(unique),
+ endpoint("ncalrpc:", "ncacn_ip_tcp:[135]"),
depends(dcom)
]
interface IRemoteActivation
@@ -22,7 +23,11 @@ interface IRemoteActivation
RPC_C_IMP_LEVEL_IMPERSONATE = 3,
RPC_C_IMP_LEVEL_DELEGATE = 4
} imp_levels;
-
+
+ typedef struct {
+ MInterfacePointer *p;
+ } pMInterfacePointer;
+
const uint32 MODE_GET_CLASS_OBJECT = 0xffffffff;
WERROR RemoteActivation (
[in] ORPCTHIS this,
@@ -32,7 +37,7 @@ interface IRemoteActivation
[in, unique] MInterfacePointer *pObjectStorage,
[in] uint32 ClientImpLevel,
[in] uint32 Mode,
- [in] uint32 Interfaces,
+ [in,range(1,32768)] uint32 Interfaces,
[in, unique,size_is(Interfaces)] GUID *pIIDs,
[in] uint16 num_protseqs,
[in, size_is(num_protseqs)] uint16 protseq[],
@@ -42,7 +47,7 @@ interface IRemoteActivation
[out] uint32 AuthnHint,
[out] COMVERSION ServerVersion,
[out] WERROR hr,
- [out,size_is(Interfaces)] MInterfacePointer ifaces[],
+ [out,size_is(Interfaces),ref] pMInterfacePointer *ifaces,
[out,size_is(Interfaces)] WERROR results[]
);
}
diff --git a/source4/librpc/rpc/dcerpc_util.c b/source4/librpc/rpc/dcerpc_util.c
index 7b49e4f8d7..8eb058d7b3 100644
--- a/source4/librpc/rpc/dcerpc_util.c
+++ b/source4/librpc/rpc/dcerpc_util.c
@@ -24,6 +24,9 @@
#include "includes.h"
#include "system/network.h"
#include "librpc/gen_ndr/ndr_epmapper.h"
+#include "librpc/gen_ndr/ndr_remact.h"
+#include "librpc/gen_ndr/ndr_oxidresolver.h"
+#include "librpc/gen_ndr/ndr_mgmt.h"
#include "librpc/gen_ndr/tables.h"
/*
@@ -659,7 +662,10 @@ NTSTATUS dcerpc_epm_map_binding(TALLOC_CTX *mem_ctx, struct dcerpc_binding *bind
struct dcerpc_binding epmapper_binding;
- if (!strcmp(uuid, DCERPC_EPMAPPER_UUID)) {
+ if (!strcmp(uuid, DCERPC_EPMAPPER_UUID) ||
+ !strcmp(uuid, DCERPC_MGMT_UUID) ||
+ !strcmp(uuid, DCERPC_IREMOTEACTIVATION_UUID) ||
+ !strcmp(uuid, DCERPC_IOXIDRESOLVER_UUID)) {
switch(binding->transport) {
case NCACN_IP_TCP: binding->endpoint = talloc_asprintf(mem_ctx, "%d", EPMAPPER_PORT); return NT_STATUS_OK;
case NCALRPC: binding->endpoint = EPMAPPER_IDENTIFIER; return NT_STATUS_OK;