diff --git a/servers/slapd/back-mdb/id2entry.c b/servers/slapd/back-mdb/id2entry.c index b6898d3707c44b303341e43d7f6893d185abf523..0caaf4f028b1ac94dbda112c2789449d1a299fdc 100644 --- a/servers/slapd/back-mdb/id2entry.c +++ b/servers/slapd/back-mdb/id2entry.c @@ -121,12 +121,17 @@ int mdb_id2edata( MDB_val *data ) { MDB_val key; + int rc; key.mv_data = &id; key.mv_size = sizeof(ID); /* fetch it */ - return mdb_cursor_get( mc, &key, data, MDB_SET ); + rc = mdb_cursor_get( mc, &key, data, MDB_SET ); + /* stubs from missing parents - DB is actually invalid */ + if ( rc == MDB_SUCCESS && !data.mv_size ) + rc = MDB_NOTFOUND; + return rc; } int mdb_id2entry( @@ -178,6 +183,9 @@ int mdb_id2entry( return MDB_SUCCESS; } } + /* stubs from missing parents - DB is actually invalid */ + if ( rc == MDB_SUCCESS && !data.mv_size ) + rc = MDB_NOTFOUND; if ( rc ) return rc; rc = mdb_entry_decode( op, &data, e );