]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/refint.c
ITS#4134 additional fix
[openldap] / servers / slapd / overlays / refint.c
index 991b82b28fb5cb02320ce77698327c8f0f41eee1..9004f902f971aff10053b3fb89a9c42d33535a12 100644 (file)
@@ -291,6 +291,7 @@ refint_delete_cb(
                                mp->sml_values[1].bv_val = mp->sml_nvalues[1].bv_val = NULL;
 
                                mp->sml_op = LDAP_MOD_ADD;
+                               mp->sml_flags = 0;
                                ber_dupbv(&mp->sml_values[0],  &dd->nothing);
                                ber_dupbv(&mp->sml_nvalues[0], &dd->nnothing);
                                mp->sml_next = ma;
@@ -305,6 +306,7 @@ refint_delete_cb(
                        mp->sml_values[1].bv_len = mp->sml_nvalues[1].bv_len = 0;
                        mp->sml_values[1].bv_val = mp->sml_nvalues[1].bv_val = NULL;
                        mp->sml_op = LDAP_MOD_DELETE;
+                       mp->sml_flags = 0;
                        ber_dupbv(&mp->sml_values[0], &dd->dn);
                        ber_dupbv(&mp->sml_nvalues[0], &mp->sml_values[0]);
                        mp->sml_next = ma;
@@ -389,6 +391,7 @@ refint_modrdn_cb(
                        }
                        mp = ch_malloc(sizeof(Modifications));
                        mp->sml_op = LDAP_MOD_ADD;
+                       mp->sml_flags = 0;
                        mp->sml_desc = ia->attr;                /* XXX */
                        mp->sml_type = ia->attr->ad_cname;
                        mp->sml_values  = ch_malloc(2 * sizeof(BerValue));
@@ -401,6 +404,7 @@ refint_modrdn_cb(
                        ip->mm = mp;
                        mp = ch_malloc(sizeof(Modifications));
                        mp->sml_op = LDAP_MOD_DELETE;
+                       mp->sml_flags = 0;
                        mp->sml_desc = ia->attr;                /* XXX */
                        mp->sml_type = ia->attr->ad_cname;
                        mp->sml_values  = ch_malloc(2 * sizeof(BerValue));
@@ -566,7 +570,7 @@ refint_response(
        rc = nop.o_bd->be_search(&nop, &nrs);
 
        ch_free( nop.ors_filterstr.bv_val );
-       while ( fptr = ftop.f_or ) {
+       while ( (fptr = ftop.f_or) != NULL ) {
                ftop.f_or = fptr->f_next;
                ch_free( fptr );
        }
@@ -617,10 +621,6 @@ refint_response(
        */
 
        for(dp = dd.mods; dp; dp = dp->next) {
-               Modifications **tail, *m;
-
-               for(m = dp->mm; m && m->sml_next; m = m->sml_next);
-               tail = &m->sml_next;
                nop.o_req_dn    = dp->dn;
                nop.o_req_ndn   = dp->dn;
                nop.o_bd = select_backend(&dp->dn, 0, 1);
@@ -633,8 +633,6 @@ refint_response(
                nop.orm_modlist = dp->mm;       /* callback did all the work */
                nop.o_dn = refint_dn;
                nop.o_ndn = refint_dn;
-               rs->sr_err = slap_mods_opattrs( &nop, nop.orm_modlist,
-                       tail, &rs->sr_text, NULL, 0, 1 );
                nop.o_dn = nop.o_bd->be_rootdn;
                nop.o_ndn = nop.o_bd->be_rootndn;
                if(rs->sr_err != LDAP_SUCCESS) goto done;
@@ -649,7 +647,7 @@ done:
        for(dp = dd.mods; dp; dp = dd.mods) {
                dd.mods = dp->next;
                ch_free(dp->dn.bv_val);
-               slap_mods_free(dp->mm);
+               slap_mods_free(dp->mm, 1);
        }
        dd.mods = NULL;