r3487: RemoteActivation works! The only odd bit is that I get either a
authorJelmer Vernooij <jelmer@samba.org>
Tue, 2 Nov 2004 15:32:58 +0000 (15:32 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:05:21 +0000 (13:05 -0500)
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...
(This used to be commit f6f3d312bf43354564a9b0816edc3a13b520192d)

source4/librpc/idl/dcom.idl
source4/torture/rpc/remact.c

index 3c066acaeed2cc883046890c2864695e24a9c5fb..da0b51cf36ca2cfb11c87730c480b3818a896f3d 100644 (file)
@@ -234,7 +234,7 @@ interface ObjectRpcBaseTypes
                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 @@ interface ObjectRpcBaseTypes
        typedef [public] struct 
        {
                uint32 size;
-               [size_is(size)] uint8 data[];
+               [subcontext(4)] OBJREF obj;
        } MInterfacePointer;
 }
 
@@ -278,8 +278,8 @@ interface IUnknown
        /* 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 @@ interface IUnknown
        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 @@ interface IRemUnknown : IUnknown
                [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 @@ interface IRemUnknown : IUnknown
        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 
index 9d725893c9a1804895dc6cf794274402f5d74026..38d80e1bea65962c5de475740661f08944769a56 100644 (file)
@@ -32,7 +32,7 @@ static int test_RemoteActivation(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
        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 @@ static int test_RemoteActivation(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
        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]);