]> git.sur5r.net Git - openldap/blobdiff - clients/tools/ldapsearch.c
further cleanup of ldapsearch response
[openldap] / clients / tools / ldapsearch.c
index fe83db5a0ae12efca5bdb7c020172766a40f39dc..0eb1922a90f13a1fe3cb674c7ac3fa4fd617ae41 100644 (file)
@@ -1366,7 +1366,7 @@ static int dosearch(
        int sizelimit )
 {
        char                    *filter;
-       int                     rc;
+       int                     rc, rc2 = LDAP_OTHER;
        int                     nresponses;
        int                     nentries;
        int                     nreferences;
@@ -1429,8 +1429,7 @@ static int dosearch(
        }
 
        if( rc != LDAP_SUCCESS ) {
-               fprintf( stderr, _("%s: ldap_search_ext: %s (%d)\n"),
-                       prog, ldap_err2string( rc ), rc );
+               tool_perror( "ldap_search_ext", rc, NULL, NULL, NULL, NULL );
                return( rc );
        }
 
@@ -1449,9 +1448,8 @@ static int dosearch(
                sortattr ? LDAP_MSG_ALL : LDAP_MSG_ONE,
                tvp, &res )) > 0 )
        {
-               rc = tool_check_abandon( ld, msgid );
-               if ( rc ) {
-                       return rc;
+               if ( tool_check_abandon( ld, msgid ) ) {
+                       return -1;
                }
 
                if( sortattr ) {
@@ -1499,7 +1497,7 @@ static int dosearch(
                                /* pagedResults stuff is dealt with
                                 * in tool_print_ctrls(), called by
                                 * print_results(). */
-                               rc = print_result( ld, msg, 1 );
+                               rc2 = print_result( ld, msg, 1 );
                                if ( ldapsync == LDAP_SYNC_REFRESH_AND_PERSIST ) {
                                        break;
                                }
@@ -1543,18 +1541,8 @@ static int dosearch(
        }
 
 done:
-       if ( tvp == NULL && rc == 0 ) {
-               ldap_get_option( ld, LDAP_OPT_RESULT_CODE, (void *)&rc );
-       }
-
-       switch ( rc ) {
-       case LDAP_SUCCESS:
-       case LDAP_REFERRAL:
-               break;
-
-       default:
-               tool_perror( "ldap_result", rc, NULL, NULL, NULL, NULL );
-               return( rc );
+       if ( tvp == NULL && rc != LDAP_RES_SEARCH_RESULT ) {
+               ldap_get_option( ld, LDAP_OPT_RESULT_CODE, (void *)&rc2 );
        }
 
        ldap_msgfree( res );
@@ -1588,7 +1576,11 @@ done:
                if( nreferences ) printf( _("# numReferences: %d\n"), nreferences );
        }
 
-       return( rc );
+       if ( rc != LDAP_RES_SEARCH_RESULT ) {
+               tool_perror( "ldap_result", rc2, NULL, NULL, NULL, NULL );
+       }
+
+       return( rc2 );
 }
 
 /* This is the proposed new way of doing things.