]> git.sur5r.net Git - openldap/commitdiff
ITS#7377 Catch mdb_put() to blocked/read-only txns
authorHallvard Furuseth <hallvard@openldap.org>
Sun, 19 Jul 2015 19:44:02 +0000 (21:44 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Sun, 25 Oct 2015 09:55:22 +0000 (10:55 +0100)
...early enough that txn state is left unchanged.

libraries/liblmdb/mdb.c

index 4a2dd0a51dd0bef378c55a3ffba928b1e1f9631f..b78178e4c33c3c8fc3efa513f51ea9cf1481c296 100644 (file)
@@ -8564,6 +8564,9 @@ mdb_put(MDB_txn *txn, MDB_dbi dbi,
        if (flags & ~(MDB_NOOVERWRITE|MDB_NODUPDATA|MDB_RESERVE|MDB_APPEND|MDB_APPENDDUP))
                return EINVAL;
 
+       if (txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_BLOCKED))
+               return (txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN;
+
        mdb_cursor_init(&mc, txn, dbi, &mx);
        return mdb_cursor_put(&mc, key, data, flags);
 }