- ldap_add_s(lc->ld, e->e_dn, attrs);
- for (--i; i>= 0; --i)
- free(attrs[i]);
- free(attrs);
- return( ldap_back_op_result( lc, op ));
+ ctrls = op->o_ctrls;
+#ifdef LDAP_BACK_PROXY_AUTHZ
+ rc = ldap_back_proxy_authz_ctrl( lc, op, rs, &ctrls );
+ if ( rc != LDAP_SUCCESS ) {
+ goto cleanup;
+ }
+#endif /* LDAP_BACK_PROXY_AUTHZ */
+
+ rs->sr_err = ldap_add_ext(lc->ld, mdn.bv_val, attrs,
+ ctrls, NULL, &msgid);
+
+#ifdef LDAP_BACK_PROXY_AUTHZ
+cleanup:
+ if ( ctrls && ctrls != op->o_ctrls ) {
+ free( ctrls[ 0 ] );
+ free( ctrls );
+ }
+#endif /* LDAP_BACK_PROXY_AUTHZ */
+
+ for (--i; i>= 0; --i) {
+ ch_free(attrs[i]->mod_vals.modv_bvals);
+ ch_free(attrs[i]);
+ }
+ ch_free(attrs);
+ if ( mdn.bv_val != op->o_req_dn.bv_val ) {
+ free( mdn.bv_val );
+ }
+#ifdef LDAP_BACK_PROXY_AUTHZ
+ if ( rc != LDAP_SUCCESS ) {
+ send_ldap_result( op, rs );
+ return -1;
+ }
+#endif /* LDAP_BACK_PROXY_AUTHZ */
+ return ldap_back_op_result( lc, op, rs, msgid, 1 ) != LDAP_SUCCESS;