ITS#7598 mdb_dbi_open(named DB): Check mainDB flags.
authorHallvard Furuseth <hallvard@openldap.org>
Tue, 21 May 2013 17:04:52 +0000 (19:04 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Tue, 21 May 2013 17:04:52 +0000 (19:04 +0200)
Reject attempts to open named databases if the main
database has flag MDB_DUPSORT or MDB_INTEGERKEY.

DUPSORT would require an xcursor for the DB, INTEGERKEY
would expect the DB name to be a binary integer.

libraries/liblmdb/mdb.c

index acf8338..4c85d67 100644 (file)
@@ -7226,6 +7226,10 @@ int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *db
        if (!unused && txn->mt_numdbs >= txn->mt_env->me_maxdbs)
                return MDB_DBS_FULL;
 
+       /* Cannot mix named databases with some mainDB flags */
+       if (txn->mt_dbs[MAIN_DBI].md_flags & (MDB_DUPSORT|MDB_INTEGERKEY))
+               return (flags & MDB_CREATE) ? MDB_INCOMPATIBLE : MDB_NOTFOUND;
+
        /* Find the DB info */
        dbflag = DB_NEW|DB_VALID;
        exact = 0;