}\
} 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);
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",
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;
{
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 */
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");
struct dsdb_schema *schema = talloc_get_type(ptr, struct dsdb_schema);
WERROR status;
- status = dsdb_attribute_from_ldb(ldb, schema, msg);
+ status = dsdb_set_attribute_from_ldb(ldb, schema, msg);
if (!W_ERROR_IS_OK(status)) {
goto failed;
}
struct dsdb_schema *schema = talloc_get_type(ptr, struct dsdb_schema);
WERROR status;
- status = dsdb_class_from_ldb(schema, msg);
+ status = dsdb_set_class_from_ldb(schema, msg);
if (!W_ERROR_IS_OK(status)) {
goto failed;
}