From: Gary Lockyer Date: Tue, 6 Feb 2018 22:10:34 +0000 (+1300) Subject: dsdb: add lmdbLevelOne as a required feature. X-Git-Tag: ldb-1.4.0~696 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a98568397d37a2dc9d20f20a5bc1f5b81c5f4b4d;p=thirdparty%2Fsamba.git dsdb: add lmdbLevelOne as a required feature. Signed-off-by: Gary Lockyer Reviewed-by: Andrew Bartlett --- diff --git a/python/samba/provision/__init__.py b/python/samba/provision/__init__.py index aaf839cc3f8..dcdb2b7bd20 100644 --- a/python/samba/provision/__init__.py +++ b/python/samba/provision/__init__.py @@ -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") diff --git a/source4/dsdb/samdb/ldb_modules/samba_dsdb.c b/source4/dsdb/samdb/ldb_modules/samba_dsdb.c index e0acb4e371a..2605c1e511e 100644 --- a/source4/dsdb/samdb/ldb_modules/samba_dsdb.c +++ b/source4/dsdb/samdb/ldb_modules/samba_dsdb.c @@ -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; } } diff --git a/source4/dsdb/samdb/samdb.h b/source4/dsdb/samdb/samdb.h index eb527402806..a095858d572 100644 --- a/source4/dsdb/samdb/samdb.h +++ b/source4/dsdb/samdb/samdb.h @@ -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__ */