diff --git a/servers/slapd/back-mdb/dn2id.c b/servers/slapd/back-mdb/dn2id.c index 1ac804f227bafe9390a6bf3ab2e81e9b0c0d8fea..bdb3086df75c210f0441f5eb705976ee93cc0fa4 100644 --- a/servers/slapd/back-mdb/dn2id.c +++ b/servers/slapd/back-mdb/dn2id.c @@ -641,6 +641,22 @@ mdb_idscope( rc = mdb_cursor_open( txn, dbi, &cursor ); if ( rc ) return rc; + /* first see if base has any children at all */ + key.mv_data = &base; + rc = mdb_cursor_get( cursor, &key, &data, MDB_SET ); + if ( rc ) { + goto leave; + } + { + size_t dkids; + rc = mdb_cursor_count( cursor, &dkids ); + if ( rc == 0 ) { + if ( dkids < 2 ) { + goto leave; + } + } + } + ida = mdb_idl_first( ids, &cid ); /* Don't bother moving out of ids if it's a range */