for ( i = 0, ml = op->orm_modlist; ml; i++ ,ml = ml->sml_next )
;
- if (i > 0) {
- mods = op->o_tmpalloc( sizeof( LDAPMod )*i, op->o_tmpmemctx );
- }
- if ( mods == NULL ) {
- rs->sr_err = LDAP_OTHER;
- retcode = META_SEARCH_ERR;
- goto doreturn;
- }
- modv = ( LDAPMod ** )op->o_tmpalloc( ( i + 1 )*sizeof( LDAPMod * ), op->o_tmpmemctx );
+ modv = op->o_tmpalloc( ( i + 1 )*sizeof( LDAPMod * ) + i*sizeof( LDAPMod ),
+ op->o_tmpmemctx );
if ( modv == NULL ) {
rs->sr_err = LDAP_OTHER;
retcode = META_SEARCH_ERR;
goto doreturn;
}
+ mods = (LDAPMod *)&modv[ i + 1 ];
isupdate = be_shadow_update( op );
for ( i = 0, ml = op->orm_modlist; ml; ml = ml->sml_next ) {
op->o_tmpfree( mdn.bv_val, op->o_tmpmemctx );
}
+ op->o_tmpfree( modv, op->o_tmpmemctx );
+
doreturn:;
Debug( LDAP_DEBUG_TRACE, "%s <<< asyncmeta_back_modify_start[%p]=%d\n", op->o_log_prefix, msc, candidates[candidate].sr_msgid );
return retcode;
for ( i = 0, ml = op->orm_modlist; ml; i++ ,ml = ml->sml_next )
;
- mods = ch_malloc( sizeof( LDAPMod )*i );
- if ( mods == NULL ) {
- rs->sr_err = LDAP_OTHER;
- send_ldap_result( op, rs );
- goto cleanup;
- }
- modv = ( LDAPMod ** )ch_malloc( ( i + 1 )*sizeof( LDAPMod * ) );
- if ( modv == NULL ) {
- rs->sr_err = LDAP_OTHER;
- send_ldap_result( op, rs );
- goto cleanup;
- }
+ modv = ch_malloc( ( i + 1 )*sizeof( LDAPMod * ) + i*sizeof( LDAPMod ) );
+ mods = (LDAPMod *)&modv[ i + 1 ];
dc.ctx = "modifyAttrDN";
isupdate = be_shadow_update( op );
}
if ( modv != NULL ) {
for ( i = 0; modv[ i ]; i++ ) {
- free( modv[ i ]->mod_bvalues );
+ ch_free( modv[ i ]->mod_bvalues );
}
}
- free( mods );
- free( modv );
+ ch_free( modv );
if ( mc ) {
meta_back_release_conn( mi, mc );