*/
#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"
+#define CLSID_IMAGEDOC "02B01C80-E03D-101A-B294-00DD010F2BF9"
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 };
+ struct GUID iids[1];
+ 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);
- GUID_from_string(CLSID_SIMPLE, &r.in.Clsid);
+ r.in.this.cid = GUID_random();
+ GUID_from_string(CLSID_IMAGEDOC, &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]);
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(W_ERROR(r.out.hr))) {
- fprintf(stderr, "RemoteActivation: %s\n", win_errstr(W_ERROR(r.out.hr)));
+ if(!W_ERROR_IS_OK(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;
}
BOOL torture_rpc_remact(void)
{
- NTSTATUS status;
- struct dcerpc_pipe *p;
+ NTSTATUS status;
+ struct dcerpc_pipe *p;
TALLOC_CTX *mem_ctx;
BOOL ret = True;
mem_ctx = talloc_init("torture_rpc_remact");
- status = torture_rpc_connection(&p,
- DCERPC_IREMOTEACTIVATION_NAME,
- DCERPC_IREMOTEACTIVATION_UUID,
- DCERPC_IREMOTEACTIVATION_VERSION);
+ status = torture_rpc_connection(mem_ctx,
+ &p,
+ &dcerpc_table_IRemoteActivation);
if (!NT_STATUS_IS_OK(status)) {
+ talloc_free(mem_ctx);
return False;
}
if(!test_RemoteActivation(p, mem_ctx))
ret = False;
- talloc_destroy(mem_ctx);
-
- torture_rpc_close(p);
+ talloc_free(mem_ctx);
return ret;
}