r25702: Clarify comments and make this module more strict on objectclasses.
authorAndrew Bartlett <abartlet@samba.org>
Fri, 19 Oct 2007 03:40:00 +0000 (05:40 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 21 Dec 2007 04:43:21 +0000 (05:43 +0100)
This is becoming the schema module...

Andrew Bartlett
(This used to be commit ecea817a3e793f8ac0187dd83a29e62a7d645868)

source4/dsdb/samdb/ldb_modules/objectclass.c

index f2ca92638d9b032d4086751c4cb1c2d9fde729e1..97eed3fc5b3c983cb3d333a7ab1732cae1457056 100644 (file)
@@ -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;