]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ldb_mdb: Don't allow modify operations on a read only db
authorGary Lockyer <gary@catalyst.net.nz>
Tue, 6 Mar 2018 23:05:34 +0000 (12:05 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 23 May 2018 00:27:11 +0000 (02:27 +0200)
Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
lib/ldb/ldb_mdb/ldb_mdb.c

index e073e17da3cf5a35d2709b7742c844accaa80579..20315dfa557e661479fbb7937766a3272bc3e916 100644 (file)
@@ -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);