* Return nonzero if rs->sr_entry was replaced.
*/
int
-rs_ensure_entry_modifiable( Operation *op, SlapReply *rs, slap_overinst *on )
+rs_entry2modifiable( Operation *op, SlapReply *rs, slap_overinst *on )
{
if ( rs->sr_flags & REP_ENTRY_MODIFIABLE ) {
rs_assert_ok( rs );
*/
char **e_flags = NULL;
+ rs->sr_type = REP_SEARCH;
+
if ( op->ors_slimit >= 0 && rs->sr_nentries >= op->ors_slimit ) {
- return LDAP_SIZELIMIT_EXCEEDED;
+ rc = LDAP_SIZELIMIT_EXCEEDED;
+ goto error_return;
}
/* Every 64 entries, check for thread pool pause */
if ( ( ( rs->sr_nentries & 0x3f ) == 0x3f ) &&
ldap_pvt_thread_pool_pausing( &connection_pool ) > 0 )
{
- return LDAP_BUSY;
+ rc = LDAP_BUSY;
+ goto error_return;
}
- rs->sr_type = REP_SEARCH;
-
/* eventually will loop through generated operational attribute types
* currently implemented types include:
* entryDN, subschemaSubentry, and hasSubordinates */
#endif
if ( op->o_res_ber ) {
/* read back control */
- rc = ber_printf( ber, "{O{" /*}}*/, &rs->sr_entry->e_name );
+ rc = ber_printf( ber, "t{O{" /*}}*/,
+ LDAP_RES_SEARCH_ENTRY, &rs->sr_entry->e_name );
} else {
rc = ber_printf( ber, "{it{O{" /*}}}*/, op->o_msgid,
LDAP_RES_SEARCH_ENTRY, &rs->sr_entry->e_name );
Debug( LDAP_DEBUG_TRACE, "<= send_search_reference\n", 0, 0, 0 );
+ if ( 0 ) {
rel:
+ rs_flush_entry( op, rs, NULL );
+ }
+
if ( op->o_callback ) {
(void)slap_cleanup_play( op, rs );
}
myop.o_res_ber = ber;
myop.o_callback = NULL;
myop.ors_slimit = 1;
+ myop.ors_attrsonly = 0;
rc = slap_send_search_entry( &myop, rs );
if( rc ) return rc;