svn commit: samba r9528 - in branches/SOC/SAMBA_4_0/source/torture/rpc: .

metze at samba.org metze at samba.org
Tue Aug 23 16:22:22 GMT 2005


Author: metze
Date: 2005-08-23 16:22:22 +0000 (Tue, 23 Aug 2005)
New Revision: 9528

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9528

Log:
the RPC-DSSYNC test is now able to fetch the whole tree,
including the unicodePwd, ntPwdHistory fields

metze
Modified:
   branches/SOC/SAMBA_4_0/source/torture/rpc/dssync.c


Changeset:
Modified: branches/SOC/SAMBA_4_0/source/torture/rpc/dssync.c
===================================================================
--- branches/SOC/SAMBA_4_0/source/torture/rpc/dssync.c	2005-08-23 16:19:04 UTC (rev 9527)
+++ branches/SOC/SAMBA_4_0/source/torture/rpc/dssync.c	2005-08-23 16:22:22 UTC (rev 9528)
@@ -62,6 +62,7 @@
 	/* what we need to do as the new dc machine account */
 	struct {
 		struct cli_credentials *credentials;
+		struct DsSyncBindInfo drsuapi;
 		struct drsuapi_DsGetDCInfo2 dc_info2;
 		struct GUID invocation_id;
 		struct GUID object_guid;
@@ -113,7 +114,7 @@
 	/* ctx->new_dc ...*/
 #define TEST_MACHINE_NAME "smbtorturedssync"
 	/*create machine account*/
-	ctx->new_dc.join = torture_join_domain(mem_ctx, TEST_MACHINE_NAME, lp_workgroup(), ACB_SVRTRUST, &new_dc_pass);  
+	ctx->new_dc.join = torture_join_domain(mem_ctx, TEST_MACHINE_NAME, lp_workgroup(), ACB_SVRTRUST, &new_dc_pass);
 
 	ctx->new_dc.credentials = cli_credentials_init(ctx);
 	
@@ -125,6 +126,23 @@
 
 	ctx->new_dc.invocation_id = GUID_random();
 
+	our_bind_info					= &ctx->new_dc.drsuapi.our_bind_info;
+	our_bind_info->length				= 28;
+	our_bind_info->info.info28.supported_extensions	= 0x1ffffb7f;
+	our_bind_info->info.info28.supported_extensions	|= DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3;
+	our_bind_info->info.info28.site_guid		= GUID_zero();
+	our_bind_info->info.info28.u1			= 508;
+	our_bind_info->info.info28.repl_epoch		= 0;
+
+#ifndef DRSUAPI_DS_BIND_GUID_W2K3
+#define DRSUAPI_DS_BIND_GUID_W2K3	( "6afab99c-6e26-464a-975f-f58f105218bc" )
+#endif
+	GUID_from_string(DRSUAPI_DS_BIND_GUID_W2K3, &ctx->new_dc.drsuapi.bind_guid);
+
+	ctx->new_dc.drsuapi.req.in.bind_guid		= &ctx->new_dc.drsuapi.bind_guid;
+	ctx->new_dc.drsuapi.req.in.bind_info		= our_bind_info;
+	ctx->new_dc.drsuapi.req.out.bind_handle		= &ctx->new_dc.drsuapi.bind_handle;
+
 	/* ctx->old_dc ...*/
 	
 	ctx->ldb_ctx = ldb_init(mem_ctx);
@@ -689,11 +707,115 @@
 
 static BOOL test_FetchData(struct DsSyncTest *ctx)
 {
+	NTSTATUS status;
 	BOOL ret = True;
-	/*
-	This is where we call dcerpc_drsuapi_DsGetNCChanges().
-	See test_DsGetNCChanges() in torture/rpc/drsuapi.c.
-	*/
+	int i;
+	struct drsuapi_DsGetNCChanges r;
+	struct drsuapi_DsReplicaObjectIdentifier nc;
+	struct GUID null_guid;
+	struct dom_sid null_sid;
+	struct {
+		int32_t level;
+	} array[] = {
+		{	
+			5
+		},
+		{	
+			8
+		}
+	};
+
+	ZERO_STRUCT(null_guid);
+	ZERO_STRUCT(null_sid);
+
+	for (i=0; i < ARRAY_SIZE(array); i++) {
+		printf("testing DsGetNCChanges level %d\n",
+			array[i].level);
+
+		r.in.bind_handle	= &ctx->new_dc.drsuapi.bind_handle;
+		r.in.level		= array[i].level;
+
+		switch (r.in.level) {
+		case 5:
+			nc.guid	= null_guid;
+			nc.sid	= null_sid;
+			nc.dn	= ctx->domain_dn;
+
+			r.in.req.req5.destination_dsa_guid		= ctx->new_dc.invocation_id;
+			r.in.req.req5.source_dsa_guid			= null_guid;
+			r.in.req.req5.naming_context			= &nc;
+			r.in.req.req5.highwatermark.tmp_highest_usn	= 0;
+			r.in.req.req5.highwatermark.reserved_usn	= 0;
+			r.in.req.req5.highwatermark.highest_usn		= 0;
+			r.in.req.req5.uptodateness_vector		= NULL;
+			r.in.req.req5.replica_flags			= 0;
+			if (lp_parm_bool(-1,"drsuapi","compression",False)) {
+				r.in.req.req5.replica_flags		|= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
+			}
+			if (lp_parm_bool(-1,"drsuapi","neighbour_writeable",True)) {
+				r.in.req.req5.replica_flags		|= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE;
+			}
+			r.in.req.req5.replica_flags			|= DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
+									| DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS
+									| DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS
+									| DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED
+									;
+			r.in.req.req5.unknown2				= 133;
+			r.in.req.req5.unknown3				= 1336770;
+			r.in.req.req5.unknown4				= 0;
+			r.in.req.req5.h1				= 0;
+
+			break;
+		case 8:
+			nc.guid	= null_guid;
+			nc.sid	= null_sid;
+			nc.dn	= ctx->domain_dn;
+
+			r.in.req.req8.destination_dsa_guid		= ctx->new_dc.invocation_id;
+			r.in.req.req8.source_dsa_guid			= null_guid;
+			r.in.req.req8.naming_context			= &nc;
+			r.in.req.req8.highwatermark.tmp_highest_usn	= 0;
+			r.in.req.req8.highwatermark.reserved_usn	= 0;
+			r.in.req.req8.highwatermark.highest_usn		= 0;
+			r.in.req.req8.uptodateness_vector		= NULL;
+			r.in.req.req8.replica_flags			= 0;
+			if (lp_parm_bool(-1,"drsuapi","compression",False)) {
+				r.in.req.req8.replica_flags		|= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
+			}
+			if (lp_parm_bool(-1,"drsuapi","neighbour_writeable",True)) {
+				r.in.req.req8.replica_flags		|= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE;
+			}
+			r.in.req.req8.replica_flags			|= DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
+									| DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS
+									| DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS
+									| DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED
+									;
+			r.in.req.req8.unknown2				= 402;
+			r.in.req.req8.unknown3				= 402116;
+			r.in.req.req8.unknown4				= 0;
+			r.in.req.req8.h1				= 0;
+			r.in.req.req8.unique_ptr1			= 0;
+			r.in.req.req8.unique_ptr2			= 0;
+			r.in.req.req8.ctr12.count			= 0;
+			r.in.req.req8.ctr12.array			= NULL;
+
+			break;
+		}
+
+		status = dcerpc_drsuapi_DsGetNCChanges(ctx->new_dc.drsuapi.pipe, ctx, &r);
+		if (!NT_STATUS_IS_OK(status)) {
+			const char *errstr = nt_errstr(status);
+			if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
+				errstr = dcerpc_errstr(ctx, ctx->new_dc.drsuapi.pipe->last_fault_code);
+			}
+			printf("dcerpc_drsuapi_DsGetNCChanges failed - %s\n", errstr);
+			ret = False;
+		} else if (!W_ERROR_IS_OK(r.out.result)) {
+			printf("DsGetNCChanges failed - %s\n", win_errstr(r.out.result));
+			ret = False;
+		}
+	}
+
 	return ret;
 }
 
@@ -713,6 +835,7 @@
 	ret &= test_LDAPBind(ctx, ctx->admin.credentials, &ctx->admin.ldap);
 	ret &= test_GetInfo(ctx);
 	ret &= test_CompleteJoin(ctx, mem_ctx);
+	ret &= test_DsBind(ctx, ctx->admin.credentials, &ctx->new_dc.drsuapi);
 	ret &= test_FetchData(ctx);
 	test_destroy_context(ctx);
 



More information about the samba-cvs mailing list