X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foverlays%2Frwmdn.c;h=9af52112c6142cfb97e3fdaeb6391eab0eb270e7;hb=c6b5abbfd20567116846ebc38f0005c429284c98;hp=500993b3fcbfa73599fa098a78d169c823c88579;hpb=3aefa9434d2be838aa32a1824fc5b13bab35b0f5;p=openldap diff --git a/servers/slapd/overlays/rwmdn.c b/servers/slapd/overlays/rwmdn.c index 500993b3fc..9af52112c6 100644 --- a/servers/slapd/overlays/rwmdn.c +++ b/servers/slapd/overlays/rwmdn.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1999-2007 The OpenLDAP Foundation. + * Copyright 1999-2012 The OpenLDAP Foundation. * Portions Copyright 1999-2003 Howard Chu. * Portions Copyright 2000-2003 Pierangelo Masarati. * All rights reserved. @@ -157,27 +157,31 @@ rwm_dn_massage( int rc = 0; struct berval mdn; static char *dmy = ""; + char *in_val; assert( dc != NULL ); assert( in != NULL ); assert( dn != NULL ); + /* protect from NULL berval */ + in_val = in->bv_val ? in->bv_val : dmy; + rc = rewrite_session( dc->rwmap->rwm_rw, dc->ctx, - ( in->bv_val ? in->bv_val : dmy ), - dc->conn, &mdn.bv_val ); + in_val, dc->conn, &mdn.bv_val ); switch ( rc ) { case REWRITE_REGEXEC_OK: - if ( !BER_BVISNULL( &mdn ) && mdn.bv_val != in->bv_val ) { + if ( !BER_BVISNULL( &mdn ) && mdn.bv_val != in_val ) { mdn.bv_len = strlen( mdn.bv_val ); *dn = mdn; } else { - *dn = *in; + dn->bv_len = in->bv_len; + dn->bv_val = in_val; } rc = LDAP_SUCCESS; Debug( LDAP_DEBUG_ARGS, "[rw] %s: \"%s\" -> \"%s\"\n", - dc->ctx, in->bv_val, dn->bv_val ); + dc->ctx, in_val, dn->bv_val ); break; case REWRITE_REGEXEC_UNWILLING: