From c4ebf9587f66ce171f0c4778921c358eb5b94da3 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 19 Oct 2007 05:40:00 +0200 Subject: [PATCH] r25702: Clarify comments and make this module more strict on objectclasses. This is becoming the schema module... Andrew Bartlett (This used to be commit ecea817a3e793f8ac0187dd83a29e62a7d645868) --- source4/dsdb/samdb/ldb_modules/objectclass.c | 23 +++++++++++--------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/source4/dsdb/samdb/ldb_modules/objectclass.c b/source4/dsdb/samdb/ldb_modules/objectclass.c index f2ca92638d9..97eed3fc5b3 100644 --- a/source4/dsdb/samdb/ldb_modules/objectclass.c +++ b/source4/dsdb/samdb/ldb_modules/objectclass.c @@ -217,16 +217,14 @@ static int objectclass_sort(struct ldb_module *module, * the bottom here */ } while (parent_class); - /* This shouldn't happen, and would break MMC, but we can't - * afford to loose objectClasses. Perhaps there was no 'top', - * or some other schema error? - * - * Detecting schema errors is the job of the schema module, so - * at this layer we just try not to loose data - */ - DLIST_CONCATENATE(sorted, unsorted, struct class_list *); - - *sorted_out = sorted; + if (unsorted) { + /* This shouldn't happen, and would break MMC, but we can't + * afford to loose objectClasses. Perhaps there was no 'top', + * or some other schema error? + */ + ldb_asprintf_errstring(module->ldb, "objectclass %s is not a valid objectClass in objectClass chain", unsorted->objectclass); + return LDB_ERR_OBJECT_CLASS_VIOLATION; + } return LDB_SUCCESS; } @@ -397,6 +395,7 @@ static int objectclass_modify(struct ldb_module *module, struct ldb_request *req case LDB_FLAG_MOD_DELETE: /* Delete everything? Probably totally illigal, but hey! */ if (objectclass_element->num_values == 0) { + return ldb_next_request(module, req); } break; @@ -474,6 +473,10 @@ static int objectclass_modify(struct ldb_module *module, struct ldb_request *req } } + /* This isn't the default branch of the switch, but a 'in any + * other case'. When a delete isn't for all objectClasses for + * example + */ { struct ldb_handle *h; struct oc_context *ac;