+ int rc, i;
+ char **refs = NULL;
+
+ if( ldif == 1 ) {
+ printf("# search reference\n");
+ }
+
+ rc = ldap_parse_reference( ld, reference, &refs, NULL, 0 );
+
+ for( i=0; refs[i] != NULL; i++ ) {
+ write_ldif( LDIF_PUT_VALUE, "ref", refs[i], strlen(refs[i]) );
+ }
+
+ ber_memvfree( (void **) refs );
+
+ if( rc != LDAP_SUCCESS ) {
+ ldap_perror(ld, "ldap_parse_reference");
+ exit( EXIT_FAILURE );
+ }
+}
+
+static void print_extended(
+ LDAP *ld,
+ LDAPMessage *extended )
+{
+ char rst[16];
+ int rc;
+ char *retoid = NULL;
+ struct berval *retdata = NULL;
+
+ if( ldif == 1 ) {
+ printf("# extended result response\n");
+ }
+
+ rc = ldap_parse_extended_result( ld, extended,
+ &retoid, &retdata, 0 );
+
+ write_ldif( LDIF_PUT_VALUE, "extended",
+ retoid, retoid ? strlen(retoid) : 0 );
+
+ if(retdata) {
+ write_ldif( LDIF_PUT_BINARY, "data",
+ retdata->bv_val, retdata->bv_len );
+ }
+
+ sprintf( rst, "%ld", (long) rst );
+ write_ldif( LDIF_PUT_VALUE, "result", rst, strlen(rst));
+
+ if( rc != LDAP_SUCCESS ) {
+ ldap_perror(ld, "ldap_parse_extended_result");
+ exit( EXIT_FAILURE );
+ }
+}
+
+static void print_partial(
+ LDAP *ld,
+ LDAPMessage *partial )
+{
+ int rc;
+ char *retoid = NULL;
+ struct berval *retdata = NULL;
+
+ if( ldif == 1 ) {
+ printf("# extended partial response\n");
+ }
+
+ rc = ldap_parse_extended_partial( ld, partial,
+ &retoid, &retdata, NULL, 0 );
+
+ write_ldif( LDIF_PUT_VALUE, "partial",
+ retoid, retoid ? strlen(retoid) : 0 );
+
+ if(retdata) {
+ write_ldif( LDIF_PUT_BINARY, "data",
+ retdata->bv_val, retdata->bv_len );
+ }
+
+ if( rc != LDAP_SUCCESS ) {
+ ldap_perror(ld, "ldap_parse_extended_partial");
+ exit( EXIT_FAILURE );
+ }
+}
+
+static void
+print_entry(
+ LDAP *ld,
+ LDAPMessage *entry,
+ int attrsonly)
+{
+ char *a, *dn, *ufn;
+ char tmpfname[ 256 ];
+ char url[ 256 ];
+ int i;
+ BerElement *ber = NULL;
+ struct berval **bvals;
+ FILE *tmpfp;
+
+ dn = ldap_get_dn( ld, entry );
+ ufn = NULL;
+
+ if ( ldif == 1 ) {
+ ufn = ldap_dn2ufn( dn );
+ write_ldif( LDIF_PUT_COMMENT, NULL, ufn, ufn ? strlen( ufn ) : 0 );
+ }