dsdb: add lmdbLevelOne as a required feature.
authorGary Lockyer <gary@catalyst.net.nz>
Tue, 6 Feb 2018 22:10:34 +0000 (11:10 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 6 Apr 2018 00:08:45 +0000 (02:08 +0200)
Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/provision/__init__.py
source4/dsdb/samdb/ldb_modules/samba_dsdb.c
source4/dsdb/samdb/samdb.h

index aaf839cc3f8159a09707f2874c93761e218d70c8..dcdb2b7bd207d68f50514e7ffe16540fa28038ac 100644 (file)
@@ -845,7 +845,7 @@ def setup_samdb_partitions(samdb_path, logger, lp, session_info,
     if provision_backend.type != "ldb":
         ldap_backend_line = "ldapBackend: %s" % provision_backend.ldap_uri
 
-    required_features = "# No required features"
+    required_features = None
     if not plaintext_secrets:
         required_features = "requiredFeatures: encryptedSecrets"
 
@@ -853,6 +853,16 @@ def setup_samdb_partitions(samdb_path, logger, lp, session_info,
         backend_store = get_default_backend_store()
     backend_store_line = "backendStore: %s" % backend_store
 
+    if backend_store == "mdb":
+        if required_features is not None:
+            required_features += "\n"
+        else:
+            required_features = ""
+        required_features += "requiredFeatures: lmdbLevelOne"
+
+    if required_features is None:
+        required_features = "# No required features"
+
     samdb.transaction_start()
     try:
         logger.info("Setting up sam.ldb partitions and settings")
index e0acb4e371a9d63b838afca27334981f057a358a..2605c1e511e12cc4d82a43a5bc21e72c07df9ae4 100644 (file)
@@ -234,8 +234,11 @@ static bool check_required_features(struct ldb_message_element *el)
                int k;
                DATA_BLOB esf = data_blob_string_const(
                        SAMBA_ENCRYPTED_SECRETS_FEATURE);
+               DATA_BLOB lmdbl1 = data_blob_string_const(
+                       SAMBA_LMDB_LEVEL_ONE_FEATURE);
                for (k = 0; k < el->num_values; k++) {
-                       if (data_blob_cmp(&esf, &el->values[k]) != 0) {
+                       if ((data_blob_cmp(&esf, &el->values[k]) != 0) &&
+                           (data_blob_cmp(&lmdbl1, &el->values[k]) != 0)) {
                                return false;
                        }
                }
index eb52740280681adb5facd5464fca7a8f47867531..a095858d572fa1d2970e059391be272bae861ab9 100644 (file)
@@ -342,5 +342,14 @@ struct dsdb_extended_sec_desc_propagation_op {
 
 #define SAMBA_SORTED_LINKS_FEATURE "sortedLinks"
 #define SAMBA_ENCRYPTED_SECRETS_FEATURE "encryptedSecrets"
+/*
+ * lmdb level one feature is an experimental release with basic support
+ * for lmdb database files, instead of tdb.
+ * - Keys are limited to 511 bytes long so GUID indexes are required
+ * - Currently only the:
+ *     partition data files
+ *   are in lmdb format.
+ */
+#define SAMBA_LMDB_LEVEL_ONE_FEATURE "lmdbLevelOne"
 
 #endif /* __SAMDB_H__ */