schema_set: Add comment about set schema from ldif in a transaction
authorGarming Sam <garming@catalyst.net.nz>
Tue, 21 Nov 2017 23:46:31 +0000 (12:46 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 24 Nov 2017 00:13:14 +0000 (01:13 +0100)
This is normally called with a transaction or before access is shared.
The python code and some tests may also cause an issue, but as these are
fixed at runtime, this is only a temporary issue that resolves itself.

Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/dsdb/schema/schema_set.c

index 32cdd7192d68b27b32c40c3b117ab1b4b68dc986..226e31e40198cb9931d4e3bf9328c128bc473b3f 100644 (file)
@@ -892,6 +892,9 @@ WERROR dsdb_schema_set_el_from_ldb_msg(struct ldb_context *ldb,
  * Rather than read a schema from the LDB itself, read it from an ldif
  * file.  This allows schema to be loaded and used while adding the
  * schema itself to the directory.
+ *
+ * Should be called with a transaction (or failing that, have no concurrent
+ * access while called).
  */
 
 WERROR dsdb_set_schema_from_ldif(struct ldb_context *ldb,
@@ -977,6 +980,13 @@ WERROR dsdb_set_schema_from_ldif(struct ldb_context *ldb,
                }
        }
 
+       /*
+        * TODO We may need a transaction here, otherwise this causes races.
+        *
+        * To do so may require an ldb_in_transaction function. In the
+        * meantime, assume that this is always called with a transaction or in
+        * isolation.
+        */
        ret = dsdb_set_schema(ldb, schema, SCHEMA_WRITE);
        if (ret != LDB_SUCCESS) {
                status = WERR_FOOBAR;