Commit dc23771b authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

ITS#5772

parent 423096b6
......@@ -31,6 +31,7 @@ OpenLDAP 2.4.13 Engineering
Fixed slapo-ppolicy unaligned BerElement (ITS#5770)
Fixed slapo-rwm objectClass preservation (ITS#5760)
Fixed slapo-rwm rewriting undefined filter (ITS#5731)
Fixed slapo-rwm rewritten DN-valued attrs (ITS#5772)
Fixed slapo-rwm reusing freed filter (ITS#5732)
Added slapo-translucent try local bind when remote fails (ITS#5656)
Added slapo-translucent support for PasswordModify exop (ITS#5656)
......
......@@ -1225,7 +1225,7 @@ remove_oc:;
|| ( mapping != NULL && mapping->m_src_ad->ad_type->sat_syntax == slap_schema.si_syn_distinguishedName ) )
{
dc.ctx = "searchAttrDN";
rc = rwm_dnattr_result_rewrite( &dc, (*ap)->a_vals );
rc = rwm_dnattr_result_rewrite( &dc, (*ap)->a_vals, (*ap)->a_nvals );
if ( rc != LDAP_SUCCESS ) {
goto cleanup_attr;
}
......
......@@ -175,7 +175,7 @@ rwm_referral_rewrite(
void *cookie,
BerVarray a_vals,
BerVarray *pa_nvals );
extern int rwm_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals );
extern int rwm_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals, BerVarray a_nvals );
extern int rwm_referral_result_rewrite( dncookie *dc, BerVarray a_vals );
LDAP_END_DECL
......
......@@ -1178,7 +1178,8 @@ rwm_referral_result_rewrite(
int
rwm_dnattr_result_rewrite(
dncookie *dc,
BerVarray a_vals )
BerVarray a_vals,
BerVarray a_nvals )
{
int i, last;
......@@ -1186,11 +1187,11 @@ rwm_dnattr_result_rewrite(
last--;
for ( i = 0; !BER_BVISNULL( &a_vals[i] ); i++ ) {
struct berval dn;
struct berval pdn, ndn;
int rc;
dn = a_vals[i];
rc = rwm_dn_massage_pretty( dc, &a_vals[i], &dn );
pdn = a_vals[i];
rc = rwm_dn_massage_pretty_normalize( dc, &a_vals[i], &pdn, &ndn );
switch ( rc ) {
case LDAP_UNWILLING_TO_PERFORM:
/*
......@@ -1198,19 +1199,27 @@ rwm_dnattr_result_rewrite(
* legal to trim values when adding/modifying;
* it should be when searching (e.g. ACLs).
*/
assert( a_vals[i].bv_val != a_nvals[i].bv_val );
ch_free( a_vals[i].bv_val );
ch_free( a_nvals[i].bv_val );
if ( last > i ) {
a_vals[i] = a_vals[last];
a_nvals[i] = a_nvals[last];
}
BER_BVZERO( &a_vals[last] );
BER_BVZERO( &a_nvals[last] );
last--;
break;
default:
/* leave attr untouched if massage failed */
if ( !BER_BVISNULL( &dn ) && a_vals[i].bv_val != dn.bv_val ) {
if ( !BER_BVISNULL( &pdn ) && a_vals[i].bv_val != pdn.bv_val ) {
ch_free( a_vals[i].bv_val );
a_vals[i] = dn;
a_vals[i] = pdn;
}
if ( !BER_BVISNULL( &ndn ) && a_nvals[i].bv_val != ndn.bv_val ) {
ch_free( a_nvals[i].bv_val );
a_nvals[i] = ndn;
}
break;
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment