+
+ case LDAP_RES_EXTENDED:
+ nextended++;
+ print_extended( ld, msg );
+
+ if( ldap_msgid( msg ) == 0 ) {
+ /* unsolicited extended operation */
+ goto done;
+ }
+ break;
+
+ case LDAP_RES_EXTENDED_PARTIAL:
+ npartial++;
+ print_partial( ld, msg );
+ break;
+
+ case LDAP_RES_SEARCH_RESULT:
+ rc = print_result( ld, msg, 1 );
+ goto done;
+ }
+ }
+
+ ldap_msgfree( res );
+ }
+
+ if ( rc == -1 ) {
+ ldap_perror( ld, "ldap_result" );
+ return( rc );
+ }
+
+done:
+ if ( ldif < 2 ) {
+ printf( "\n# numResponses: %d\n", nresponses );
+ if( nentries ) printf( "# numEntries: %d\n", nentries );
+ if( nextended ) printf( "# numExtended: %d\n", nextended );
+ if( npartial ) printf( "# numPartial: %d\n", npartial );
+ if( nreferences ) printf( "# numReferences: %d\n", nreferences );
+ }
+
+ return( rc );
+}
+
+static void
+print_entry(
+ LDAP *ld,
+ LDAPMessage *entry,
+ int attrsonly)
+{
+ char *a, *dn, *ufn;
+ char tmpfname[ 256 ];
+ char url[ 256 ];
+ int i, rc;
+ BerElement *ber = NULL;
+ struct berval **bvals;
+ LDAPControl **ctrls = NULL;
+ FILE *tmpfp;
+
+ dn = ldap_get_dn( ld, entry );
+ ufn = NULL;
+
+ if ( ldif < 2 ) {
+ ufn = ldap_dn2ufn( dn );
+ write_ldif( LDIF_PUT_COMMENT, NULL, ufn, ufn ? strlen( ufn ) : 0 );
+ }
+ write_ldif( LDIF_PUT_VALUE, "dn", dn, dn ? strlen( dn ) : 0);
+
+ rc = ldap_get_entry_controls( ld, entry, &ctrls );
+
+ if( rc != LDAP_SUCCESS ) {
+ fprintf(stderr, "print_entry: %d\n", rc );
+ ldap_perror( ld, "ldap_get_entry_controls" );
+ exit( EXIT_FAILURE );
+ }
+
+ if( ctrls ) {
+ print_ctrls( ctrls );
+ ldap_controls_free( ctrls );
+ }
+
+ if ( includeufn ) {
+ if( ufn == NULL ) {
+ ufn = ldap_dn2ufn( dn );
+ }
+ write_ldif( LDIF_PUT_VALUE, "ufn", ufn, ufn ? strlen( ufn ) : 0 );
+ }
+
+ if( ufn != NULL ) ldap_memfree( ufn );
+ ldap_memfree( dn );
+
+ for ( a = ldap_first_attribute( ld, entry, &ber ); a != NULL;
+ a = ldap_next_attribute( ld, entry, ber ) )
+ {
+ if ( attrsonly ) {
+ write_ldif( LDIF_PUT_NOVALUE, a, NULL, 0 );
+
+ } else if (( bvals = ldap_get_values_len( ld, entry, a )) != NULL ) {
+ for ( i = 0; bvals[i] != NULL; i++ ) {
+ if ( vals2tmp > 1 || ( vals2tmp
+ && ldif_is_not_printable( bvals[i]->bv_val, bvals[i]->bv_len ) ))
+ {
+ int tmpfd;
+ /* write value to file */
+ sprintf( tmpfname, "%s" LDAP_DIRSEP "ldapsearch-%s-XXXXXX",
+ tmpdir, a );
+ tmpfp = NULL;
+
+ if ( mktemp( tmpfname ) == NULL ) {
+ perror( tmpfname );
+ continue;
+ }
+
+ if (( tmpfd = open( tmpfname, O_WRONLY|O_CREAT|O_EXCL, 0600 )) == -1 ) {
+ perror( tmpfname );
+ continue;
+ }
+
+ if (( tmpfp = fdopen( tmpfd, "w")) == NULL ) {
+ perror( tmpfname );
+ continue;
+ }
+
+ if ( fwrite( bvals[ i ]->bv_val,
+ bvals[ i ]->bv_len, 1, tmpfp ) == 0 )
+ {
+ perror( tmpfname );
+ fclose( tmpfp );
+ continue;
+ }
+
+ fclose( tmpfp );
+
+ sprintf( url, "%s%s", urlpre,
+ &tmpfname[strlen(tmpdir) + sizeof(LDAP_DIRSEP) - 1] );
+
+ write_ldif( LDIF_PUT_URL, a, url, strlen( url ));
+
+ } else {
+ write_ldif( LDIF_PUT_VALUE, a,
+ bvals[ i ]->bv_val, bvals[ i ]->bv_len );
+ }