[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Jan 12 03:10:02 UTC 2022


The branch, master has been updated
       via  8c0391d38e5 dsdb/schema: let dsdb_syntax_DN_BINARY_drsuapi_to_ldb return WERR_DS_INVALID_ATTRIBUTE_SYNTAX
       via  8026efd6479 dsdb/schema: add no memory checks for {ldb,dsdb}_dn_get_extended_linearized()
       via  15f332a1c03 dsdb/common: dsdb_dn_construct_internal() more strict checking
       via  8115fb03b6a dsdb/schema: fix Object(OR-Name) syntax definition
       via  e16d29f719f dsdb/schema/tests: let samba4.local.dsdb.syntax call the validate_dn() hook
      from  1243f52f7ae s4:rpc_server/netlogon: let CSDVersion="" wipe operatingSystemServicePack

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


- Log -----------------------------------------------------------------
commit 8c0391d38e53a356aabc6e2c9fdf747a1f1f16d5
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Dec 20 17:48:44 2021 +0100

    dsdb/schema: let dsdb_syntax_DN_BINARY_drsuapi_to_ldb return WERR_DS_INVALID_ATTRIBUTE_SYNTAX
    
    When Object(OR-Name) uses dsdb_syntax_DN_BINARY_drsuapi_to_ldb() it
    should genrate WERR_DS_INVALID_ATTRIBUTE_SYNTAX if the binary part
    is not empty.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Jan 12 03:09:52 UTC 2022 on sn-devel-184

commit 8026efd647957bdb63e2ba98ea736ccaf3a71f4c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Dec 20 17:46:47 2021 +0100

    dsdb/schema: add no memory checks for {ldb,dsdb}_dn_get_extended_linearized()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 15f332a1c0340b808730427e482e374c96e2cd20
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jun 5 23:12:50 2021 +0200

    dsdb/common: dsdb_dn_construct_internal() more strict checking
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 8115fb03b6ade8d99c8acd459fc94dab5413a211
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Dec 20 17:50:07 2021 +0100

    dsdb/schema: fix Object(OR-Name) syntax definition
    
    This is a strange one, it uses DN_BINARY in the drsuapi
    representation, while the binary part must be 0 bytes.
    and the LDAP/ldb representation is a plain DN (without 'B:').
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit e16d29f719f8268b244cf7c6b20ade5d829669aa
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jun 5 23:12:20 2021 +0200

    dsdb/schema/tests: let samba4.local.dsdb.syntax call the validate_dn() hook
    
    This demonstrates that our OR-Name syntax is wrong,
    which wasn't noticed yet as it's not used in the AD-Schema.
    
    I noticed it by installing the Exchange-Schema on a Samba DC.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 source4/dsdb/common/dsdb_dn.c             | 26 ++++++++++++++++++++------
 source4/dsdb/schema/schema_syntax.c       | 16 +++++++++++++---
 source4/dsdb/schema/tests/schema_syntax.c |  2 ++
 3 files changed, 35 insertions(+), 9 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/common/dsdb_dn.c b/source4/dsdb/common/dsdb_dn.c
index 856b3048771..e348ab6aa94 100644
--- a/source4/dsdb/common/dsdb_dn.c
+++ b/source4/dsdb/common/dsdb_dn.c
@@ -47,18 +47,32 @@ static struct dsdb_dn *dsdb_dn_construct_internal(TALLOC_CTX *mem_ctx,
 						  enum dsdb_dn_format dn_format, 
 						  const char *oid) 
 {
-	struct dsdb_dn *dsdb_dn = talloc(mem_ctx, struct dsdb_dn);
+	struct dsdb_dn *dsdb_dn = NULL;
+
+	switch (dn_format) {
+	case DSDB_BINARY_DN:
+	case DSDB_STRING_DN:
+		break;
+	case DSDB_NORMAL_DN:
+		if (extra_part.length != 0) {
+			errno = EINVAL;
+			return NULL;
+		}
+		break;
+	case DSDB_INVALID_DN:
+	default:
+		errno = EINVAL;
+		return NULL;
+	}
+
+	dsdb_dn = talloc(mem_ctx, struct dsdb_dn);
 	if (!dsdb_dn) {
+		errno = ENOMEM;
 		return NULL;
 	}
 	dsdb_dn->dn = talloc_steal(dsdb_dn, dn);
 	dsdb_dn->extra_part = extra_part;
 	dsdb_dn->dn_format = dn_format;
-	/* Look to see if this attributeSyntax is a DN */
-	if (dsdb_dn->dn_format == DSDB_INVALID_DN) {
-		talloc_free(dsdb_dn);
-		return NULL;
-	}
 
 	dsdb_dn->oid = oid;
 	talloc_steal(dsdb_dn, extra_part.data);
diff --git a/source4/dsdb/schema/schema_syntax.c b/source4/dsdb/schema/schema_syntax.c
index fcf9ca4ce3c..b3df10a0217 100644
--- a/source4/dsdb/schema/schema_syntax.c
+++ b/source4/dsdb/schema/schema_syntax.c
@@ -1726,6 +1726,7 @@ static WERROR dsdb_syntax_one_DN_drsuapi_to_ldb(TALLOC_CTX *mem_ctx, struct ldb_
 
 	*out = data_blob_string_const(ldb_dn_get_extended_linearized(mem_ctx, dn, 1));
 	talloc_free(tmp_ctx);
+	W_ERROR_HAVE_NO_MEMORY(out->data);
 	return WERR_OK;
 }
 
@@ -2054,12 +2055,21 @@ static WERROR dsdb_syntax_DN_BINARY_drsuapi_to_ldb(const struct dsdb_syntax_ctx
 		/* set binary stuff */
 		dsdb_dn = dsdb_dn_construct(tmp_ctx, dn, id3.binary, attr->syntax->ldap_oid);
 		if (!dsdb_dn) {
-			/* If this fails, it must be out of memory, we know the ldap_oid is valid */
+			if (errno == EINVAL) {
+				/*
+				 * This might be Object(OR-Name)
+				 * failing because of a non empty
+				 * binary part.
+				 */
+				talloc_free(tmp_ctx);
+				return WERR_DS_INVALID_ATTRIBUTE_SYNTAX;
+			}
 			talloc_free(tmp_ctx);
 			W_ERROR_HAVE_NO_MEMORY(dsdb_dn);
 		}
 		out->values[i] = data_blob_string_const(dsdb_dn_get_extended_linearized(out->values, dsdb_dn, 1));
 		talloc_free(tmp_ctx);
+		W_ERROR_HAVE_NO_MEMORY(out->values[i].data);
 	}
 
 	return WERR_OK;
@@ -2584,8 +2594,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
 		.attributeSyntax_oid	= "2.5.5.7",
 		.drsuapi_to_ldb		= dsdb_syntax_DN_BINARY_drsuapi_to_ldb,
 		.ldb_to_drsuapi		= dsdb_syntax_DN_BINARY_ldb_to_drsuapi,
-		.validate_ldb		= dsdb_syntax_DN_BINARY_validate_ldb,
-		.equality		= "caseIgnoreMatch",
+		.validate_ldb		= dsdb_syntax_DN_validate_ldb,
+		.equality               = "distinguishedNameMatch",
 		.ldb_syntax		= LDB_SYNTAX_DN,
 	},{
 	/*
diff --git a/source4/dsdb/schema/tests/schema_syntax.c b/source4/dsdb/schema/tests/schema_syntax.c
index b22e110db52..7eba1029164 100644
--- a/source4/dsdb/schema/tests/schema_syntax.c
+++ b/source4/dsdb/schema/tests/schema_syntax.c
@@ -119,6 +119,8 @@ static bool torture_test_syntax(struct torture_context *torture,
 
 	torture_assert_data_blob_equal(torture, el.values[0], ldb_blob, "Incorrect conversion from DRS to ldb format");
 
+	torture_assert_werr_ok(torture, syntax->validate_ldb(&syntax_ctx, attr, &el), "Failed to validate ldb format");
+
 	torture_assert_werr_ok(torture, syntax->ldb_to_drsuapi(&syntax_ctx, attr, &el, tmp_ctx, &drs2), "Failed to convert from ldb to DRS format");
 	
 	torture_assert(torture, drs2.value_ctr.values[0].blob, "No blob returned from conversion");


-- 
Samba Shared Repository



More information about the samba-cvs mailing list