diff options
Diffstat (limited to 'source4/dsdb/schema')
-rw-r--r-- | source4/dsdb/schema/schema_init.c | 35 | ||||
-rw-r--r-- | source4/dsdb/schema/schema_set.c | 4 | ||||
-rw-r--r-- | source4/dsdb/schema/tests/schema_syntax.c | 4 |
3 files changed, 32 insertions, 11 deletions
diff --git a/source4/dsdb/schema/schema_init.c b/source4/dsdb/schema/schema_init.c index 93070503c7..2db708d2df 100644 --- a/source4/dsdb/schema/schema_init.c +++ b/source4/dsdb/schema/schema_init.c @@ -614,14 +614,17 @@ static int dsdb_schema_setup_ldb_schema_attribute(struct ldb_context *ldb, }\ } while (0) -WERROR dsdb_attribute_from_ldb(struct ldb_context *ldb, - struct dsdb_schema *schema, - struct ldb_message *msg) +/** Create an dsdb_attribute out of ldb message, attr must be already talloced + */ + +WERROR dsdb_attribute_from_ldb(const struct dsdb_schema *schema, + struct ldb_message *msg, + struct dsdb_attribute *attr) { WERROR status; - struct dsdb_attribute *attr = talloc_zero(schema, struct dsdb_attribute); - if (!attr) { - return WERR_NOMEM; + if (attr == NULL) { + DEBUG(0, ("%s: attr is null, it's expected not to be so\n", __location__)); + return WERR_INVALID_PARAM; } GET_STRING_LDB(msg, "cn", attr, attr, cn, false); @@ -690,6 +693,24 @@ WERROR dsdb_attribute_from_ldb(struct ldb_context *ldb, GET_BOOL_LDB(msg, "isDefunct", attr, isDefunct, false); GET_BOOL_LDB(msg, "systemOnly", attr, systemOnly, false); + return WERR_OK; +} + +WERROR dsdb_set_attribute_from_ldb(struct ldb_context *ldb, + struct dsdb_schema *schema, + struct ldb_message *msg) +{ + WERROR status; + struct dsdb_attribute *attr = talloc_zero(schema, struct dsdb_attribute); + if (!attr) { + return WERR_NOMEM; + } + + status = dsdb_attribute_from_ldb(schema, msg, attr); + if (!W_ERROR_IS_OK(status)) { + return status; + } + attr->syntax = dsdb_syntax_for_attribute(attr); if (!attr->syntax) { DEBUG(0,(__location__ ": Unknown schema syntax for %s\n", @@ -709,7 +730,7 @@ WERROR dsdb_attribute_from_ldb(struct ldb_context *ldb, return WERR_OK; } -WERROR dsdb_class_from_ldb(struct dsdb_schema *schema, +WERROR dsdb_set_class_from_ldb(struct dsdb_schema *schema, struct ldb_message *msg) { WERROR status; diff --git a/source4/dsdb/schema/schema_set.c b/source4/dsdb/schema/schema_set.c index 4142842eee..8a4361058b 100644 --- a/source4/dsdb/schema/schema_set.c +++ b/source4/dsdb/schema/schema_set.c @@ -667,10 +667,10 @@ WERROR dsdb_schema_set_el_from_ldb_msg(struct ldb_context *ldb, struct dsdb_sche { if (samdb_find_attribute(ldb, msg, "objectclass", "attributeSchema") != NULL) { - return dsdb_attribute_from_ldb(ldb, schema, msg); + return dsdb_set_attribute_from_ldb(ldb, schema, msg); } else if (samdb_find_attribute(ldb, msg, "objectclass", "classSchema") != NULL) { - return dsdb_class_from_ldb(schema, msg); + return dsdb_set_class_from_ldb(schema, msg); } /* Don't fail on things not classes or attributes */ diff --git a/source4/dsdb/schema/tests/schema_syntax.c b/source4/dsdb/schema/tests/schema_syntax.c index 9127d08120..419dc3dc4c 100644 --- a/source4/dsdb/schema/tests/schema_syntax.c +++ b/source4/dsdb/schema/tests/schema_syntax.c @@ -74,9 +74,9 @@ static bool torture_syntax_add_OR_Name(struct torture_context *tctx, ldif = ldb_ldif_read_string(ldb, &ldif_str); torture_assert(tctx, ldif, "Failed to parse LDIF for authOrig"); - werr = dsdb_attribute_from_ldb(ldb, schema, ldif->msg); + werr = dsdb_set_attribute_from_ldb(ldb, schema, ldif->msg); ldb_ldif_read_free(ldb, ldif); - torture_assert_werr_ok(tctx, werr, "dsdb_attribute_from_ldb() failed!"); + torture_assert_werr_ok(tctx, werr, "dsdb_set_attribute_from_ldb() failed!"); ldb_res = dsdb_set_schema(ldb, schema); torture_assert_int_equal(tctx, ldb_res, LDB_SUCCESS, "dsdb_set_schema() failed"); |