Skip to content
Snippets Groups Projects
Commit f4fe1fe1 authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

Fix a couple FIXMEs: use ldif_put to allow for binary values in

compare and modify. Note that line wrapping is disabled; presumably
existing code expects the compare argument to use only a single line.
The manpage should be updated to note whether standard LDIF with
default line wrapping is expected or not. (Add uses default width already.)
parent a851d3e2
No related branches found
No related tags found
No related merge requests found
......@@ -27,6 +27,7 @@
#include "slap.h"
#include "back-sock.h"
#include "ldif.h"
int
sock_back_compare(
......@@ -37,6 +38,7 @@ sock_back_compare(
AttributeDescription *entry = slap_schema.si_ad_entry;
Entry e;
FILE *fp;
char *text;
e.e_id = NOID;
e.e_name = op->o_req_dn;
......@@ -60,21 +62,23 @@ sock_back_compare(
return( -1 );
}
/*
* FIX ME: This should use LDIF routines so that binary
* values are properly dealt with
*/
/* write out the request to the compare process */
fprintf( fp, "COMPARE\n" );
fprintf( fp, "msgid: %ld\n", (long) op->o_msgid );
sock_print_conn( fp, op->o_conn, si );
sock_print_suffixes( fp, op->o_bd );
fprintf( fp, "dn: %s\n", op->o_req_dn.bv_val );
fprintf( fp, "%s: %s\n\n",
op->oq_compare.rs_ava->aa_desc->ad_cname.bv_val,
op->oq_compare.rs_ava->aa_value.bv_val /* could be binary! */ );
fclose( fp );
/* could be binary */
text = ldif_put_wrap( LDIF_PUT_VALUE,
op->orc_ava->aa_desc->ad_cname.bv_val,
op->orc_ava->aa_value.bv_val,
op->orc_ava->aa_value.bv_len, LDIF_LINE_WIDTH_MAX );
if ( text ) {
fprintf( fp, "%s\n", text );
ber_memfree( text );
} else {
fprintf( fp, "\n\n" );
}
/* read in the result and send it along */
sock_read_and_send_results( op, rs, fp );
......
......@@ -27,6 +27,7 @@
#include "slap.h"
#include "back-sock.h"
#include "ldif.h"
int
sock_back_modify(
......@@ -72,8 +73,6 @@ sock_back_modify(
for ( ; ml != NULL; ml = ml->sml_next ) {
mod = &ml->sml_mod;
/* FIXME: should use LDIF routines to deal with binary data */
switch ( mod->sm_op ) {
case LDAP_MOD_ADD:
fprintf( fp, "add: %s\n", mod->sm_desc->ad_cname.bv_val );
......@@ -90,8 +89,16 @@ sock_back_modify(
if( mod->sm_values != NULL ) {
for ( i = 0; mod->sm_values[i].bv_val != NULL; i++ ) {
fprintf( fp, "%s: %s\n", mod->sm_desc->ad_cname.bv_val,
mod->sm_values[i].bv_val /* binary! */ );
char *text = ldif_put_wrap( LDIF_PUT_VALUE,
mod->sm_desc->ad_cname.bv_val,
mod->sm_values[i].bv_val,
mod->sm_values[i].bv_len, LDIF_LINE_WIDTH_MAX );
if ( text ) {
fprintf( fp, "%s", text );
ber_memfree( text );
} else {
break;
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment