#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)
{
struct RemoteActivation r;
NTSTATUS status;
struct GUID iids[2];
- uint16 protseq[2] = { EPM_PROTOCOL_TCP, EPM_PROTOCOL_NCALRPC };
+ uint16_t protseq[3] = { EPM_PROTOCOL_TCP, EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_UUID };
ZERO_STRUCT(r.in);
r.in.this.version.MajorVersion = 5;
r.in.this.version.MinorVersion = 1;
- uuid_generate_random(&r.in.this.cid);
+ r.in.this.cid = GUID_random();
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;
+ r.in.Interfaces = 2;
GUID_from_string(DCERPC_IUNKNOWN_UUID, &iids[0]);
+ GUID_from_string(DCERPC_ISTREAM_UUID, &iids[1]);
r.in.pIIDs = iids;
status = dcerpc_RemoteActivation(p, mem_ctx, &r);
if(NT_STATUS_IS_ERR(status)) {
- fprintf(stderr, "RemoteActivation: %s\n", nt_errstr(status));
+ printf("RemoteActivation: %s\n", nt_errstr(status));
return 0;
}
if(!W_ERROR_IS_OK(r.out.result)) {
- fprintf(stderr, "RemoteActivation: %s\n", win_errstr(r.out.result));
+ printf("RemoteActivation: %s\n", win_errstr(r.out.result));
return 0;
}
if(!W_ERROR_IS_OK(r.out.hr)) {
- fprintf(stderr, "RemoteActivation: %s\n", win_errstr(r.out.hr));
+ printf("RemoteActivation: %s\n", win_errstr(r.out.hr));
+ return 0;
+ }
+
+ if(!W_ERROR_IS_OK(r.out.results[0])) {
+ printf("RemoteActivation: %s\n", win_errstr(r.out.results[0]));
+ return 0;
+ }
+
+ GUID_from_string(DCERPC_ICLASSFACTORY_UUID, &iids[0]);
+ r.in.Interfaces = 1;
+ r.in.Mode = MODE_GET_CLASS_OBJECT;
+
+ status = dcerpc_RemoteActivation(p, mem_ctx, &r);
+ if(NT_STATUS_IS_ERR(status)) {
+ printf("RemoteActivation(GetClassObject): %s\n", nt_errstr(status));
+ return 0;
+ }
+
+ if(!W_ERROR_IS_OK(r.out.result)) {
+ printf("RemoteActivation(GetClassObject): %s\n", win_errstr(r.out.result));
+ return 0;
+ }
+
+ if(!W_ERROR_IS_OK(r.out.hr)) {
+ printf("RemoteActivation(GetClassObject): %s\n", win_errstr(r.out.hr));
+ return 0;
+ }
+
+ if(!W_ERROR_IS_OK(r.out.results[0])) {
+ printf("RemoteActivation(GetClassObject): %s\n", win_errstr(r.out.results[0]));
return 0;
}
if(!test_RemoteActivation(p, mem_ctx))
ret = False;
- talloc_destroy(mem_ctx);
+ talloc_free(mem_ctx);
torture_rpc_close(p);