Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
HAMANO Tsukasa
OpenLDAP
Commits
19d1e72b
Commit
19d1e72b
authored
Sep 29, 2011
by
Howard Chu
Browse files
Make sure mdb_open actually got a sub-db record
parent
fa0d6424
Changes
1
Hide whitespace changes
Inline
Side-by-side
libraries/libmdb/mdb.c
View file @
19d1e72b
...
...
@@ -5642,7 +5642,8 @@ int mdb_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi)
{
MDB_val
key
,
data
;
MDB_dbi
i
;
int
rc
,
dbflag
=
0
;
MDB_cursor
mc
;
int
rc
,
dbflag
,
exact
;
size_t
len
;
if
(
txn
->
mt_dbxs
[
FREE_DBI
].
md_cmp
==
NULL
)
{
...
...
@@ -5676,20 +5677,25 @@ int mdb_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi)
return
ENFILE
;
/* Find the DB info */
dbflag
=
0
;
exact
=
0
;
key
.
mv_size
=
len
;
key
.
mv_data
=
(
void
*
)
name
;
rc
=
mdb_get
(
txn
,
MAIN_DBI
,
&
key
,
&
data
);
/* Create if requested */
if
(
rc
==
MDB_NOTFOUND
&&
(
flags
&
MDB_CREATE
))
{
MDB_cursor
mc
;
mdb_cursor_init
(
&
mc
,
txn
,
MAIN_DBI
,
NULL
);
rc
=
mdb_cursor_set
(
&
mc
,
&
key
,
&
data
,
MDB_SET
,
&
exact
);
if
(
rc
==
MDB_SUCCESS
)
{
/* make sure this is actually a DB */
MDB_node
*
node
=
NODEPTR
(
mc
.
mc_pg
[
mc
.
mc_top
],
mc
.
mc_ki
[
mc
.
mc_top
]);
if
(
!
(
node
->
mn_flags
&
F_SUBDATA
))
return
EINVAL
;
}
else
if
(
rc
==
MDB_NOTFOUND
&&
(
flags
&
MDB_CREATE
))
{
/* Create if requested */
MDB_db
dummy
;
data
.
mv_size
=
sizeof
(
MDB_db
);
data
.
mv_data
=
&
dummy
;
memset
(
&
dummy
,
0
,
sizeof
(
dummy
));
dummy
.
md_root
=
P_INVALID
;
dummy
.
md_flags
=
flags
&
0xffff
;
mdb_cursor_init
(
&
mc
,
txn
,
MAIN_DBI
,
NULL
);
rc
=
mdb_cursor_put
(
&
mc
,
&
key
,
&
data
,
F_SUBDATA
);
dbflag
=
DB_DIRTY
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment