Author: jelmer Date: 2004-11-02 15:32:58 +0000 (Tue, 02 Nov 2004) New Revision: 3487
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=3487 Log: RemoteActivation works! The only odd bit is that I get either a NT_STATUS_BUFFER_TOO_SMALL or a NT_STATUS_NET_WRITE_FAULT if I try other user accounts. Must've got something to do with the auth padding... Modified: branches/SAMBA_4_0/source/librpc/idl/dcom.idl branches/SAMBA_4_0/source/torture/rpc/remact.c Changeset: Modified: branches/SAMBA_4_0/source/librpc/idl/dcom.idl =================================================================== --- branches/SAMBA_4_0/source/librpc/idl/dcom.idl 2004-11-02 14:52:45 UTC (rev 3486) +++ branches/SAMBA_4_0/source/librpc/idl/dcom.idl 2004-11-02 15:32:58 UTC (rev 3487) @@ -234,7 +234,7 @@ GUID clsid; /* Clsid of unmarshaling code */ uint32 cbExtension; /* size of extension data */ uint32 size; /* size of data that follows */ - [size_is(size), ref] uint8 *pData; /* extension + class specific data */ + [size_is(size)] uint8 pData[]; /* extension + class specific data */ } u_custom; typedef struct @@ -262,7 +262,7 @@ typedef [public] struct { uint32 size; - [size_is(size)] uint8 data[]; + [subcontext(4)] OBJREF obj; } MInterfacePointer; } @@ -278,8 +278,8 @@ /* Function 0x00 */ /* Returns the interface with the specified IID if implemented by this object */ - [local] WERROR QueryInterface([in] IID *riid - /*FIXME, [out] void **data*/); + [local] WERROR QueryInterface([in] IID *riid, + [out,iid_is(riid)] MInterfacePointer *data); /*****************/ /* Function 0x01 */ @@ -297,9 +297,9 @@ pointer_default(unique) ] interface IClassFactory : IUnknown { - [local] WERROR CreateInstance(/*FIXME[in] IUnknown *pUnknown, + [local] WERROR CreateInstance(/*FIXME[in] IUnknown *pUnknown*/, [in] IID *riid, - [out, iid_is(riid)] void **ppv*/); + [out, iid_is(riid)] MInterfacePointer *ppv); [call_as(CreateInstance)] WERROR RemoteCreateInstance(); @@ -338,7 +338,7 @@ [in] uint32 cRefs, /* count of AddRefs requested */ [in] uint16 cIids, /* count of IIDs that follow */ [in, size_is(cIids)] IID* iids, /*, // IIDs to QI for */ - [out] MInterfacePointer *ip + [out, size_is(cIids)] MInterfacePointer *ip ); typedef struct @@ -368,8 +368,8 @@ void RemoteGetClassObject([in] GUID clsid, [in] uint32 context, [in] LCID locale, - [in] GUID iid/*FIXME, - [out, iid_is(iid)] void *data */); + [in] GUID iid, + [out, iid_is(iid)] MInterfacePointer data); } /* Looks like this is the equivalent of .NET's Modified: branches/SAMBA_4_0/source/torture/rpc/remact.c =================================================================== --- branches/SAMBA_4_0/source/torture/rpc/remact.c 2004-11-02 14:52:45 UTC (rev 3486) +++ branches/SAMBA_4_0/source/torture/rpc/remact.c 2004-11-02 15:32:58 UTC (rev 3487) @@ -32,7 +32,7 @@ struct RemoteActivation r; NTSTATUS status; struct GUID iids[2]; - uint16 protseq[2] = { EPM_PROTOCOL_TCP, EPM_PROTOCOL_NCALRPC }; + uint16 protseq[3] = { EPM_PROTOCOL_TCP, EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_UUID }; ZERO_STRUCT(r.in); r.in.this.version.MajorVersion = 5; @@ -40,7 +40,7 @@ uuid_generate_random(&r.in.this.cid); GUID_from_string(CLSID_SIMPLE, &r.in.Clsid); r.in.ClientImpLevel = RPC_C_IMP_LEVEL_IDENTIFY; - r.in.num_protseqs = 2; + r.in.num_protseqs = 3; r.in.protseq = protseq; r.in.Interfaces = 1; GUID_from_string(DCERPC_IUNKNOWN_UUID, &iids[0]);