diff options
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/objectclass.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/objectclass.c b/source4/dsdb/samdb/ldb_modules/objectclass.c index 2df809701c..e5769a63dd 100644 --- a/source4/dsdb/samdb/ldb_modules/objectclass.c +++ b/source4/dsdb/samdb/ldb_modules/objectclass.c @@ -414,57 +414,52 @@ static int objectclass_do_add(struct oc_context *ac) { struct ldb_context *ldb; struct ldb_request *add_req; - char *value; struct ldb_message_element *objectclass_element, *el; struct ldb_message *msg; TALLOC_CTX *mem_ctx; struct class_list *sorted, *current; - int ret; + const char *rdn_name = NULL; + char *value; const struct dsdb_class *objectclass; int32_t systemFlags = 0; - const char *rdn_name = NULL; + int ret; ldb = ldb_module_get_ctx(ac->module); - mem_ctx = talloc_new(ac); - if (mem_ctx == NULL) { - ldb_oom(ldb); - return LDB_ERR_OPERATIONS_ERROR; - } - msg = ldb_msg_copy_shallow(ac, ac->req->op.add.message); /* Check if we have a valid parent - this check is needed since * we don't get a LDB_ERR_NO_SUCH_OBJECT error. */ if (ac->search_res == NULL) { if (ldb_dn_compare(ldb_get_root_basedn(ldb), msg->dn) == 0) { - /* Allow the tree to be started */ - - /* but don't keep any error string, it's meaningless */ + /* Allow the tree to be started but don't keep any + * error strings - they're meaningless. */ ldb_set_errstring(ldb, NULL); } else { ldb_asprintf_errstring(ldb, "objectclass: Cannot add %s, parent does not exist!", ldb_dn_get_linearized(msg->dn)); - talloc_free(mem_ctx); return LDB_ERR_NO_SUCH_OBJECT; } } else { - /* Fix up the DN to be in the standard form, taking * particular care to match the parent DN */ ret = fix_dn(msg, ac->req->op.add.message->dn, ac->search_res->message->dn, &msg->dn); - if (ret != LDB_SUCCESS) { ldb_asprintf_errstring(ldb, "objectclass: Could not munge DN %s into normal form", ldb_dn_get_linearized(ac->req->op.add.message->dn)); - talloc_free(mem_ctx); return ret; } + } + mem_ctx = talloc_new(ac); + if (mem_ctx == NULL) { + ldb_oom(ldb); + return LDB_ERR_OPERATIONS_ERROR; } + if (ac->schema != NULL) { /* This is now the objectClass list from the database */ objectclass_element = ldb_msg_find_element(msg, "objectClass"); |