]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldap/search.c
clarify generated password issue
[openldap] / servers / slapd / back-ldap / search.c
index e1a88800860ed110c88f5ffa43f288d2cc833e3c..166e360d71e3ccc922d81d8a813f2f832363c4c0 100644 (file)
@@ -258,7 +258,7 @@ retry:
         * but this is necessary for version matching, and for ACL processing.
         */
 
-       for ( rc = 0; rc != -1; rc = ldap_result( lc->lc_ld, msgid, 0, &tv, &res ) )
+       for ( rc = 0; rc != -1; rc = ldap_result( lc->lc_ld, msgid, LDAP_MSG_ONE, &tv, &res ) )
        {
                /* check for abandon */
                if ( op->o_abandon ) {
@@ -286,7 +286,6 @@ retry:
                } else if ( rc == LDAP_RES_SEARCH_ENTRY ) {
                        Entry           ent = { 0 };
                        struct berval   bdn = BER_BVNULL;
-                       int             abort = 0;
 
                        do_retry = 0;
 
@@ -297,21 +296,25 @@ retry:
                                rs->sr_attrs = op->ors_attrs;
                                rs->sr_operational_attrs = NULL;
                                rs->sr_flags = 0;
-                               abort = send_search_entry( op, rs );
+                               rc = rs->sr_err = send_search_entry( op, rs );
                                if ( !BER_BVISNULL( &ent.e_name ) ) {
                                        assert( ent.e_name.bv_val != bdn.bv_val );
-                                       free( ent.e_name.bv_val );
+                                       op->o_tmpfree( ent.e_name.bv_val, op->o_tmpmemctx );
                                        BER_BVZERO( &ent.e_name );
                                }
                                if ( !BER_BVISNULL( &ent.e_nname ) ) {
-                                       free( ent.e_nname.bv_val );
+                                       op->o_tmpfree( ent.e_nname.bv_val, op->o_tmpmemctx );
                                        BER_BVZERO( &ent.e_nname );
                                }
                                entry_clean( &ent );
                        }
                        ldap_msgfree( res );
-                       if ( abort ) {
-                               ldap_abandon_ext( lc->lc_ld, msgid, NULL, NULL );
+                       if ( rc != LDAP_SUCCESS ) {
+                               if ( rc == LDAP_UNAVAILABLE ) {
+                                       rc = rs->sr_err = LDAP_OTHER;
+                               } else {
+                                       ldap_abandon_ext( lc->lc_ld, msgid, NULL, NULL );
+                               }
                                goto finish;
                        }