diff options
author | Andrew Bartlett <abartlet@samba.org> | 2014-03-26 12:46:57 +1300 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2014-07-15 12:46:15 +0200 |
commit | 87b40d4861719fa4848dd7f71ffd7f5afd2d0516 (patch) | |
tree | cb994c6ca4d25ba784605576ffe253e361c68e60 | |
parent | 56caec5a068510287dfdc2f975b20581a2810212 (diff) | |
download | samba-87b40d4861719fa4848dd7f71ffd7f5afd2d0516.tar.gz |
dsdb: Improve missing objectClass handling
This attempts to permit deletion of objects that have no objectClass
to allow dbcheck to clean up a corrupt database. It is not complete,
the replmd_replPropertyMetaDataCtr1_sort_and_verify() call will still
fail, but this is as much as is safe to do without a way to replicate
the original issue.
Andrew Bartlett
Change-Id: If0b6c7f18e8aee587e6b3b4af878a0145f5eac37
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
(cherry picked from commit 74a83be540c8fa0dd0f91da25b1f9d7ccc4ec568)
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/repl_meta_data.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c index 18c6f037218..b01c956d1c3 100644 --- a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c +++ b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c @@ -1523,19 +1523,19 @@ static int replmd_update_rpmd(struct ldb_module *module, * corruption if we don't have this! */ objectclass_el = ldb_msg_find_element(res->msgs[0], "objectClass"); - if (objectclass_el == NULL) { - ldb_debug_set(ldb, LDB_DEBUG_FATAL, - __location__ ": objectClass missing on %s\n", - ldb_dn_get_linearized(msg->dn)); - return LDB_ERR_OPERATIONS_ERROR; - } - - /* - * Now check if this objectClass means we need to do urgent replication - */ - if (!*is_urgent && replmd_check_urgent_objectclass(objectclass_el, - situation)) { - *is_urgent = true; + if (objectclass_el != NULL) { + /* + * Now check if this objectClass means we need to do urgent replication + */ + if (!*is_urgent && replmd_check_urgent_objectclass(objectclass_el, + situation)) { + *is_urgent = true; + } + } else if (!ldb_request_get_control(req, DSDB_CONTROL_DBCHECK)) { + ldb_asprintf_errstring(ldb, __location__ + ": objectClass missing on %s\n", + ldb_dn_get_linearized(msg->dn)); + return LDB_ERR_OBJECT_CLASS_VIOLATION; } /* |