[SCM] Samba Shared Repository - branch master updated

Matthieu Patou mat at samba.org
Wed Aug 7 00:11:02 MDT 2013


The branch, master has been updated
       via  f6d1578 drs-cracknames: Add some debugs in the torture to know better which test has failed
       via  3de2547 Remove the knownfail flag on cracknames as it didn't fail anymore
       via  7fe4630 drs-cracksname: fix problems that prevented to pass our torture tests
       via  029e80d drs-crackname: Fix error code so that we have the same as windows
       via  552b4f3 drs-cracknames: When cracking NT4 names we should just look at netbios for the match
       via  aa17a2c drs-crackname: Fix cracknames for the format UNKNOWN when the data is actually a GUID
       via  beead4d drs-cracknames: Reorganise the cracknames list so that similar format names are group together
       via  2f7d772 Add Notes related to DRSUAPI
       via  b67085d s4-netlogon: honnor DS_RETURN_DNS_NAME flag
       via  927a103 s4-netlogon: do not add \ it has already be done in the fill_netlogon_samlogon_response
       via  5300984 torture: Quiet a warning about set but not used variable
       via  0eb304d torture-drsuapi: Make the name of the dc variable
      from  8b1a214 s3-netlogon: Connecting with the system token should be sufficient.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit f6d157858feeb8b59eb353a1a237fe9e359a5dcf
Author: Matthieu Patou <mat at matws.net>
Date:   Tue Jul 30 16:09:00 2013 -0700

    drs-cracknames: Add some debugs in the torture to know better which test has failed
    
    Signed-off-by: Matthieu Patou <mat at matws.net>
    Reviewed-By: Andrew Bartlett <abarlett at samba.org>
    
    Autobuild-User(master): Matthieu Patou <mat at samba.org>
    Autobuild-Date(master): Wed Aug  7 08:10:58 CEST 2013 on sn-devel-104

commit 3de2547e29cd29ff4a48cadaf392129d7893d77a
Author: Matthieu Patou <mat at matws.net>
Date:   Sun Jun 30 20:45:28 2013 -0700

    Remove the knownfail flag on cracknames as it didn't fail anymore
    
    Signed-off-by: Matthieu Patou <mat at matws.net>
    Reviewed-by: Andrew Bartlett <abarlett at samba.org>

commit 7fe4630bad232c09e29739beedda2e2fb63747ed
Author: Matthieu Patou <mat at matws.net>
Date:   Sun Jun 30 20:44:22 2013 -0700

    drs-cracksname: fix problems that prevented to pass our torture tests
    
    Some of the problems where also reported by Microsoft testing tools
    
    Signed-off-by: Matthieu Patou <mat at matws.net>
    Reviewed-by: Andrew Bartlett <abarlett at samba.org>

commit 029e80da9d1ab5096cd0981110b588245f8fd50d
Author: Matthieu Patou <mat at matws.net>
Date:   Sun Jun 30 02:04:20 2013 -0700

    drs-crackname: Fix error code so that we have the same as windows
    
    Signed-off-by: Matthieu Patou <mat at matws.net>
    Reviewed-by: Andrew Bartlett <abarlett at samba.org>

commit 552b4f3e022dca594e1dada7979fe351eee8cf9b
Author: Matthieu Patou <mat at matws.net>
Date:   Sun Jun 30 02:03:02 2013 -0700

    drs-cracknames: When cracking NT4 names we should just look at netbios for the match
    
    Looking at dnsRoot will yield a result for domain.tld\username when it
    shouldn't work.
    
    Signed-off-by: Matthieu Patou <mat at matws.net>
    Reviewed-by: Andrew Bartlett <abarlett at samba.org>

commit aa17a2c01dbab2e522a8ccccaed7943963bab5b9
Author: Matthieu Patou <mat at matws.net>
Date:   Sat Jun 29 16:02:32 2013 -0700

    drs-crackname: Fix cracknames for the format UNKNOWN when the data is actually a GUID
    
    The cannonical crackname expect a "/" or it returns
    DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR, when doing UNKNOWN format it's not
    an error to not have a "/" in the name to crack it's just a sign the
    name is not a cannonical one.
    
    Signed-off-by: Matthieu Patou <mat at matws.net>
    Reviewed-by: Andrew Bartlett <abarlett at samba.org>

commit beead4d431b4d0cdd5e9f58fef481848d9daeaff
Author: Matthieu Patou <mat at matws.net>
Date:   Fri Jun 28 01:11:46 2013 -0700

    drs-cracknames: Reorganise the cracknames list so that similar format names are group together
    
    It makes easier when reviewing failed test case in DRSR testsuite
    
    Signed-off-by: Matthieu Patou <mat at matws.net>
    Reviewed-by: Andrew Bartlett <abarlett at samba.org>

commit 2f7d772583c8cdb6f7fc2b96addc54b9f9b12cd1
Author: Matthieu Patou <mat at matws.net>
Date:   Thu Jun 27 23:58:41 2013 -0700

    Add Notes related to DRSUAPI
    
    Signed-off-by: Matthieu Patou <mat at matws.net>
    Reviewed-by: Andrew Bartlett <abarlett at samba.org>

commit b67085de7fdfb41c42c71438f2e4b5474b3b111a
Author: Matthieu Patou <mat at matws.net>
Date:   Tue Sep 27 14:06:03 2011 -0400

    s4-netlogon: honnor DS_RETURN_DNS_NAME flag
    
    Reviewed-By: Andrew Bartlett <abarlett at samba.org>

commit 927a1030d78c25dbc43b6470f9ffe8b5fe664835
Author: Matthieu Patou <mat at matws.net>
Date:   Mon Sep 26 18:54:04 2011 -0400

    s4-netlogon: do not add \\ it has already be done in the fill_netlogon_samlogon_response
    
    Reviewed-By: Andrew Bartlett <abarlett at samba.org>

commit 530098440ee34b6fc23c2786b2df411978d15c97
Author: Matthieu Patou <mat at matws.net>
Date:   Tue Jul 30 16:07:56 2013 -0700

    torture: Quiet a warning about set but not used variable
    
    Signed-off-by: Matthieu Patou <mat at matws.net>
    Reviewed-By: Andrew Bartlett <abarlett at samba.org>

commit 0eb304d536f27bcb647d7f8c0e57d187b59c0caa
Author: Matthieu Patou <mat at debian>
Date:   Tue Jul 30 21:45:59 2013 -0700

    torture-drsuapi: Make the name of the dc variable
    
    In case some tests fails or if the removal takes sometime to replicate
    to all the DCs
    
    Reviewed-By: Andrew Bartlett <abarlett at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 selftest/knownfail                            |    2 -
 source4/dsdb/samdb/cracknames.c               |   36 ++++++++++++++++++------
 source4/rpc_server/drsuapi/dcesrv_drsuapi.c   |   12 ++++----
 source4/rpc_server/drsuapi/updaterefs.c       |    1 +
 source4/rpc_server/netlogon/dcerpc_netlogon.c |   13 ++++++++-
 source4/torture/rpc/drsuapi.c                 |   23 ++++++++-------
 source4/torture/rpc/drsuapi_cracknames.c      |    4 +++
 7 files changed, 62 insertions(+), 29 deletions(-)


Changeset truncated at 500 lines:

diff --git a/selftest/knownfail b/selftest/knownfail
index 0c501fa..c075ba6 100644
--- a/selftest/knownfail
+++ b/selftest/knownfail
@@ -93,7 +93,6 @@
 ^samba4.rpc.lsalookup with seal,padcheck
 ^samba4.rpc.lsalookup with validate
 ^samba4.rpc.lsalookup with bigendian
-^samba4.rpc.cracknames
 ^samba4.rpc.netlogon.*.LogonUasLogon
 ^samba4.rpc.netlogon.*.LogonUasLogoff
 ^samba4.rpc.netlogon.*.DatabaseSync
@@ -155,7 +154,6 @@
 #^samba4.ldap.dirsync.python.dc..__main__.ExtendedDirsyncTests.*
 ^samba4.libsmbclient.opendir.opendir # This requires netbios browsing
 ^samba4.rpc.drsuapi.*.drsuapi.DsGetDomainControllerInfo\(.*\)$
-^samba4.rpc.drsuapi.*.drsuapi.DsCrackNames\(.*\)$
 ^samba4.smb2.oplock.exclusive2\(.*\)$ # samba 4 oplocks are a mess
 ^samba4.smb2.oplock.exclusive5\(.*\)$ # samba 4 oplocks are a mess
 ^samba4.smb2.oplock.exclusive6\(.*\)$ # samba 4 oplocks are a mess
diff --git a/source4/dsdb/samdb/cracknames.c b/source4/dsdb/samdb/cracknames.c
index 0c4cdfc..d09da25 100644
--- a/source4/dsdb/samdb/cracknames.c
+++ b/source4/dsdb/samdb/cracknames.c
@@ -468,7 +468,9 @@ WERROR DsCrackNameOneName(struct ldb_context *sam_ctx, TALLOC_CTX *mem_ctx,
 	/* TODO: - fill the correct names in all cases!
 	 *       - handle format_flags
 	 */
-
+	if (format_desired == DRSUAPI_DS_NAME_FORMAT_UNKNOWN) {
+		return WERR_OK;
+	}
 	/* here we need to set the domain_filter and/or the result_filter */
 	switch (format_offered) {
 	case DRSUAPI_DS_NAME_FORMAT_UNKNOWN:
@@ -488,7 +490,10 @@ WERROR DsCrackNameOneName(struct ldb_context *sam_ctx, TALLOC_CTX *mem_ctx,
 			if (!W_ERROR_IS_OK(werr)) {
 				return werr;
 			}
-			if (info1->status != DRSUAPI_DS_NAME_STATUS_NOT_FOUND) {
+			if (info1->status != DRSUAPI_DS_NAME_STATUS_NOT_FOUND &&
+			    (formats[i] != DRSUAPI_DS_NAME_FORMAT_CANONICAL ||
+			     info1->status != DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR))
+			{
 				return werr;
 			}
 		}
@@ -574,8 +579,7 @@ WERROR DsCrackNameOneName(struct ldb_context *sam_ctx, TALLOC_CTX *mem_ctx,
 		}
 
 		domain_filter = talloc_asprintf(mem_ctx, 
-						"(&(objectClass=crossRef)(|(dnsRoot=%s)(netbiosName=%s))(systemFlags:%s:=%u))",
-						ldb_binary_encode_string(mem_ctx, domain),
+						"(&(objectClass=crossRef)(netbiosName=%s)(systemFlags:%s:=%u))",
 						ldb_binary_encode_string(mem_ctx, domain),
 						LDB_OID_COMPARATOR_AND,
 						SYSTEM_FLAG_CR_NTDS_DOMAIN);
@@ -931,9 +935,25 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
 		int ret;
 		struct ldb_result *res;
 		uint32_t dsdb_flags = 0;
-		struct ldb_dn *real_search_dn;
+		struct ldb_dn *real_search_dn = NULL;
+		info1->status = DRSUAPI_DS_NAME_STATUS_NOT_FOUND;
 
-		if (domain_res) {
+		/*
+		 * From 4.1.4.2.11 of MS-DRSR
+		 * if DS_NAME_FLAG_GCVERIFY in flags then
+		 * rt := select all O from all
+		 * where attrValue in GetAttrVals(O, att, false)
+		 * else
+		 * rt := select all O from subtree DefaultNC()
+		 * where attrValue in GetAttrVals(O, att, false)
+		 * endif
+		 * return rt
+		 */
+		if (format_flags & DRSUAPI_DS_NAME_FLAG_GCVERIFY ||
+		    format_offered == DRSUAPI_DS_NAME_FORMAT_GUID)
+		{
+			dsdb_flags = DSDB_SEARCH_SEARCH_ALL_PARTITIONS;
+		} else if (domain_res) {
 			if (!search_dn) {
 				struct ldb_dn *tmp_dn = samdb_result_dn(sam_ctx, mem_ctx, domain_res->msgs[0], "ncName", NULL);
 				real_search_dn = tmp_dn;
@@ -941,13 +961,11 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
 				real_search_dn = search_dn;
 			}
 		} else {
-			dsdb_flags = DSDB_SEARCH_SEARCH_ALL_PARTITIONS;
-			real_search_dn = NULL;
+			real_search_dn = ldb_get_default_basedn(sam_ctx);
 		}
 		if (format_desired == DRSUAPI_DS_NAME_FORMAT_GUID){
 			 dsdb_flags |= DSDB_SEARCH_SHOW_RECYCLED;
 		}
-
 		/* search with the 'phantom root' flag */
 		ret = dsdb_search(sam_ctx, mem_ctx, &res,
 				  real_search_dn,
diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c
index 2ce6beb..879f63f 100644
--- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c
+++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c
@@ -430,21 +430,21 @@ static WERROR dcesrv_drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TA
 	switch (r->in.level) {
 		case 1: {
 			switch(r->in.req->req1.format_offered){
-			case DRSUAPI_DS_NAME_FORMAT_UPN_AND_ALTSECID:
 			case DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT_NAME_SANS_DOMAIN_EX:
-			case DRSUAPI_DS_NAME_FORMAT_LIST_GLOBAL_CATALOG_SERVERS:
-			case DRSUAPI_DS_NAME_FORMAT_UPN_FOR_LOGON:
-			case DRSUAPI_DS_NAME_FORMAT_LIST_SERVERS_WITH_DCS_IN_SITE:
+			case DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT_NAME_SANS_DOMAIN:
 			case DRSUAPI_DS_NAME_FORMAT_STRING_SID_NAME:
 			case DRSUAPI_DS_NAME_FORMAT_ALT_SECURITY_IDENTITIES_NAME:
+			case DRSUAPI_DS_NAME_FORMAT_MAP_SCHEMA_GUID:
 			case DRSUAPI_DS_NAME_FORMAT_LIST_NCS:
 			case DRSUAPI_DS_NAME_FORMAT_LIST_DOMAINS:
-			case DRSUAPI_DS_NAME_FORMAT_MAP_SCHEMA_GUID:
-			case DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT_NAME_SANS_DOMAIN:
+			case DRSUAPI_DS_NAME_FORMAT_LIST_GLOBAL_CATALOG_SERVERS:
+			case DRSUAPI_DS_NAME_FORMAT_LIST_SERVERS_WITH_DCS_IN_SITE:
 			case DRSUAPI_DS_NAME_FORMAT_LIST_SERVERS_FOR_DOMAIN_IN_SITE:
 			case DRSUAPI_DS_NAME_FORMAT_LIST_DOMAINS_IN_SITE:
 			case DRSUAPI_DS_NAME_FORMAT_LIST_SERVERS_IN_SITE:
 			case DRSUAPI_DS_NAME_FORMAT_LIST_SITES:
+			case DRSUAPI_DS_NAME_FORMAT_UPN_AND_ALTSECID:
+			case DRSUAPI_DS_NAME_FORMAT_UPN_FOR_LOGON:
 				DEBUG(0, ("DsCrackNames: Unsupported operation requested: %X",
 					  r->in.req->req1.format_offered));
 				return WERR_OK;
diff --git a/source4/rpc_server/drsuapi/updaterefs.c b/source4/rpc_server/drsuapi/updaterefs.c
index 14bd3f6..ae87117 100644
--- a/source4/rpc_server/drsuapi/updaterefs.c
+++ b/source4/rpc_server/drsuapi/updaterefs.c
@@ -160,6 +160,7 @@ WERROR drsuapi_UpdateRefs(struct drsuapi_bind_state *b_state, TALLOC_CTX *mem_ct
 		return WERR_DS_DRA_INVALID_PARAMETER;
 	}
 
+	/* FIXME it seems that we should check the length of the stuff too*/
 	if (req->dest_dsa_dns_name == NULL) {
 		return WERR_DS_DRA_INVALID_PARAMETER;
 	}
diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c
index 5cc3b34..de8f0e5 100644
--- a/source4/rpc_server/netlogon/dcerpc_netlogon.c
+++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c
@@ -1840,7 +1840,9 @@ static WERROR dcesrv_netr_DsRGetDCNameEx2(struct dcesrv_call_state *dce_call,
 
 	info = talloc(mem_ctx, struct netr_DsRGetDCNameInfo);
 	W_ERROR_HAVE_NO_MEMORY(info);
-	info->dc_unc           = talloc_asprintf(mem_ctx, "\\\\%s", dc_name);
+	info->dc_unc = talloc_asprintf(mem_ctx, "%s%s",
+			dc_name[0] == '\\'? "\\\\":"",
+			talloc_strdup(mem_ctx, dc_name));
 	W_ERROR_HAVE_NO_MEMORY(info->dc_unc);
 
 	load_interface_list(mem_ctx, lp_ctx, &ifaces);
@@ -1855,6 +1857,15 @@ static WERROR dcesrv_netr_DsRGetDCNameEx2(struct dcesrv_call_state *dce_call,
 	info->domain_name      = domain_name;
 	info->forest_name      = response.data.nt5_ex.forest;
 	info->dc_flags         = response.data.nt5_ex.server_type;
+	if (r->in.flags & DS_RETURN_DNS_NAME) {
+		/* As MS-NRPC.pdf in 2.2.1.2.1 the DS_DNS_CONTROLLER flag should be
+		 * returned if we are returning info->dc_unc containing a FQDN.
+		 * This attribute is called DomainControllerName in the specs,
+		 * it seems that we decide to return FQDN or netbios depending on
+		 * DS_RETURN_DNS_NAME.
+		 */
+		info->dc_flags |= DS_DNS_CONTROLLER;
+	}
 	info->dc_site_name     = response.data.nt5_ex.server_site;
 	info->client_site_name = response.data.nt5_ex.client_site;
 
diff --git a/source4/torture/rpc/drsuapi.c b/source4/torture/rpc/drsuapi.c
index 86b0d32..1d535ac 100644
--- a/source4/torture/rpc/drsuapi.c
+++ b/source4/torture/rpc/drsuapi.c
@@ -774,7 +774,9 @@ bool torture_rpc_drsuapi_get_dcinfo(struct torture_context *torture,
  */
 bool torture_drsuapi_tcase_setup_common(struct torture_context *tctx, struct DsPrivate *priv)
 {
-        NTSTATUS status;
+	NTSTATUS status;
+	int rnd = rand() % 1000;
+	char *name = talloc_asprintf(tctx, "%s%d", TEST_MACHINE_NAME, rnd);
 	struct cli_credentials *machine_credentials;
 
 	torture_assert(tctx, priv, "Invalid argument");
@@ -785,8 +787,8 @@ bool torture_drsuapi_tcase_setup_common(struct torture_context *tctx, struct DsP
 					&ndr_table_drsuapi);
 	torture_assert(tctx, NT_STATUS_IS_OK(status), "Unable to connect to DRSUAPI pipe");
 
-	torture_comment(tctx, "About to join domain\n");
-	priv->join = torture_join_domain(tctx, TEST_MACHINE_NAME, ACB_SVRTRUST,
+	torture_comment(tctx, "About to join domain with name %s\n", name);
+	priv->join = torture_join_domain(tctx, name, ACB_SVRTRUST,
 					 &machine_credentials);
 	torture_assert(tctx, priv->join, "Failed to join as BDC");
 
@@ -848,7 +850,6 @@ void torture_rpc_drsuapi_tcase(struct torture_suite *suite)
 {
 	typedef bool (*run_func) (struct torture_context *test, void *tcase_data);
 
-	struct torture_test *test;
 	struct torture_tcase *tcase = torture_suite_add_tcase(suite, "drsuapi");
 
 	torture_tcase_set_fixture(tcase, torture_drsuapi_tcase_setup,
@@ -858,17 +859,17 @@ void torture_rpc_drsuapi_tcase(struct torture_suite *suite)
 	test = torture_tcase_add_simple_test(tcase, "QuerySitesByCost", (run_func)test_QuerySitesByCost);
 #endif
 
-	test = torture_tcase_add_simple_test(tcase, "DsGetDomainControllerInfo", (run_func)test_DsGetDomainControllerInfo);
+	torture_tcase_add_simple_test(tcase, "DsGetDomainControllerInfo", (run_func)test_DsGetDomainControllerInfo);
 
-	test = torture_tcase_add_simple_test(tcase, "DsCrackNames", (run_func)test_DsCrackNames);
+	torture_tcase_add_simple_test(tcase, "DsCrackNames", (run_func)test_DsCrackNames);
 
-	test = torture_tcase_add_simple_test(tcase, "DsWriteAccountSpn", (run_func)test_DsWriteAccountSpn);
+	torture_tcase_add_simple_test(tcase, "DsWriteAccountSpn", (run_func)test_DsWriteAccountSpn);
 
-	test = torture_tcase_add_simple_test(tcase, "DsReplicaGetInfo", (run_func)test_DsReplicaGetInfo);
+	torture_tcase_add_simple_test(tcase, "DsReplicaGetInfo", (run_func)test_DsReplicaGetInfo);
 
-	test = torture_tcase_add_simple_test(tcase, "DsReplicaSync", (run_func)test_DsReplicaSync);
+	torture_tcase_add_simple_test(tcase, "DsReplicaSync", (run_func)test_DsReplicaSync);
 
-	test = torture_tcase_add_simple_test(tcase, "DsReplicaUpdateRefs", (run_func)test_DsReplicaUpdateRefs);
+	torture_tcase_add_simple_test(tcase, "DsReplicaUpdateRefs", (run_func)test_DsReplicaUpdateRefs);
 
-	test = torture_tcase_add_simple_test(tcase, "DsGetNCChanges", (run_func)test_DsGetNCChanges);
+	torture_tcase_add_simple_test(tcase, "DsGetNCChanges", (run_func)test_DsGetNCChanges);
 }
diff --git a/source4/torture/rpc/drsuapi_cracknames.c b/source4/torture/rpc/drsuapi_cracknames.c
index 465f6db..ac39d1d 100644
--- a/source4/torture/rpc/drsuapi_cracknames.c
+++ b/source4/torture/rpc/drsuapi_cracknames.c
@@ -199,6 +199,10 @@ static bool test_DsCrackNamesMatrix(struct torture_context *tctx,
 
 	for (i = 0; i < ARRAY_SIZE(formats); i++) {
 		for (j = 0; j < ARRAY_SIZE(formats); j++) {
+			torture_comment(tctx, "Converting %s (format %d)"
+						" to %d gave %s\n",
+						n_from[i], formats[i],
+						formats[j], n_matrix[i][j]);
 			if (n_matrix[i][j] == n_from[j]) {
 				
 			/* We don't have a from name for these yet (and we can't map to them to find it out) */


-- 
Samba Shared Repository


More information about the samba-cvs mailing list