X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldap%2Fmodify.c;h=f76e75f7a6f5d1fa7a1be0180ac231166fc9b92e;hb=06d63200e45686355acfb49aceff6b56857bbb40;hp=c1b7df03376e710b1ba2b7e00cb0c03c8664742d;hpb=403f4479bc9f9a864122d4aeecf7284408918302;p=openldap diff --git a/servers/slapd/back-ldap/modify.c b/servers/slapd/back-ldap/modify.c index c1b7df0337..f76e75f7a6 100644 --- a/servers/slapd/back-ldap/modify.c +++ b/servers/slapd/back-ldap/modify.c @@ -37,14 +37,16 @@ ldap_back_modify( Backend *be, Connection *conn, Operation *op, - char *dn, - LDAPModList *ml + const char *dn, + const char *ndn, + Modifications *modlist ) { struct ldapinfo *li = (struct ldapinfo *) be->be_private; struct ldapconn *lc; - LDAPMod **mods; - LDAPModList *m; + LDAPMod **modv; + LDAPMod *mods; + Modifications *ml; int i; lc = ldap_back_getconn(li, conn, op); @@ -57,15 +59,29 @@ ldap_back_modify( return( -1 ); } - for (i=1, m=ml->ml_next; m; i++,m=m->ml_next) + for (i=0, ml=modlist; ml; i++,ml=ml->sml_next) ; - mods = (LDAPMod **)ch_malloc((i+1)*sizeof(LDAPMod *)); - mods[i] = 0; - for (i=0, m=ml; m; i++, m=m->ml_next) - mods[i] = &m->ml_mod; + mods = (LDAPMod *)ch_malloc(i*sizeof(LDAPMod)); + if (mods == NULL) + return( -1 ); + modv = (LDAPMod **)ch_malloc((i+1)*sizeof(LDAPMod *)); + if (modv == NULL) { + free(mods); + return( -1 ); + } + + modv[i] = 0; + + for (i=0, ml=modlist; ml; i++, ml=ml->sml_next) { + modv[i] = &mods[i]; + mods[i].mod_op = ml->sml_op; + mods[i].mod_type = ml->sml_desc->ad_cname->bv_val; + mods[i].mod_bvalues = ml->sml_bvalues; + } - ldap_modify_s( lc->ld, dn, mods ); + ldap_modify_s( lc->ld, dn, modv ); free(mods); + free(modv); return( ldap_back_op_result( lc, op )); }