From: Gary Lockyer Date: Tue, 6 Mar 2018 23:05:34 +0000 (+1300) Subject: ldb_mdb: Don't allow modify operations on a read only db X-Git-Tag: ldb-1.4.0~107 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0d2d1e5bf07bb6c4f2ac741e0a0287a4eab523a7;p=thirdparty%2Fsamba.git ldb_mdb: Don't allow modify operations on a read only db Signed-off-by: Gary Lockyer Reviewed-by: Andrew Bartlett Reviewed-by: Stefan Metzmacher Reviewed-by: Garming Sam --- diff --git a/lib/ldb/ldb_mdb/ldb_mdb.c b/lib/ldb/ldb_mdb/ldb_mdb.c index e073e17da3c..20315dfa557 100644 --- a/lib/ldb/ldb_mdb/ldb_mdb.c +++ b/lib/ldb/ldb_mdb/ldb_mdb.c @@ -162,6 +162,10 @@ static int lmdb_store(struct ltdb_private *ltdb, MDB_txn *txn = NULL; MDB_dbi dbi = 0; + if (ltdb->read_only) { + return LDB_ERR_UNWILLING_TO_PERFORM; + } + txn = lmdb_trans_get_tx(lmdb_private_trans_head(lmdb)); if (txn == NULL) { ldb_debug(lmdb->ldb, LDB_DEBUG_FATAL, "No transaction"); @@ -216,6 +220,10 @@ static int lmdb_delete(struct ltdb_private *ltdb, struct ldb_val key) MDB_txn *txn = NULL; MDB_dbi dbi = 0; + if (ltdb->read_only) { + return LDB_ERR_UNWILLING_TO_PERFORM; + } + txn = lmdb_trans_get_tx(lmdb_private_trans_head(lmdb)); if (txn == NULL) { ldb_debug(lmdb->ldb, LDB_DEBUG_FATAL, "No transaction"); @@ -472,6 +480,11 @@ static int lmdb_transaction_start(struct ltdb_private *ltdb) struct lmdb_trans *ltx_head; MDB_txn *tx_parent; + /* Do not take out the transaction lock on a read-only DB */ + if (ltdb->read_only) { + return LDB_ERR_UNWILLING_TO_PERFORM; + } + ltx = talloc_zero(lmdb, struct lmdb_trans); if (ltx == NULL) { return ldb_oom(lmdb->ldb);