]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/translucent.c
Fix void* pointer arithmetic from ber_bvchr()
[openldap] / servers / slapd / overlays / translucent.c
index ba948e6193c5fc467462671e41be443e6a0f3cc3..49f1ff0e672fa572e9ed00749266b94bf96851f3 100644 (file)
@@ -63,18 +63,12 @@ void glue_parent(Operation *op) {
        Operation nop = *op;
        slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
        struct berval dn = { 0, NULL };
-       char *odn = op->o_req_ndn.bv_val;
        Attribute *a;
        Entry *e;
-       int idn, ldn;
+       struct berval   pdn;
 
-       /* tis more work to use strchr() for a berval... */
-       for(idn = 0; odn[idn] && odn[idn] != ','; idn++);
-       if(!idn || !odn[idn]) return;   /* because you never know */
-       idn++;
-       ldn = dn.bv_len = op->o_req_ndn.bv_len - idn;
-       dn.bv_val = ch_malloc(ldn + 1);
-       strcpy(dn.bv_val, odn + idn);
+       dnParent( &op->o_req_ndn, &pdn );
+       ber_dupbv( &dn, &pdn );
 
        Debug(LDAP_DEBUG_TRACE, "=> glue_parent: fabricating glue for <%s>\n", dn.bv_val, 0, 0);
 
@@ -221,7 +215,6 @@ static int translucent_modify(Operation *op, SlapReply *rs) {
 
        slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
        overlay_stack *ov = on->on_bi.bi_private;
-       translucent_configuration *cf = ov->config;
        void *private = op->o_bd->be_private;
        Entry ne, *e, *re = NULL;
        Attribute *a, *ax;
@@ -291,7 +284,7 @@ static int translucent_modify(Operation *op, SlapReply *rs) {
                                mm = m;
                                m = m->sml_next;
                                mm->sml_next = NULL;            /* hack */
-                               slap_mods_free(mm);
+                               slap_mods_free(mm, 1);
                                if(m) continue;
                        }
                        m->sml_op = LDAP_MOD_ADD;
@@ -393,11 +386,9 @@ static int translucent_compare(Operation *op, SlapReply *rs) {
        slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
        overlay_stack *ov = on->on_bi.bi_private;
        void *private = op->o_bd->be_private;
-       translucent_configuration *cf = ov->config;
 
        AttributeAssertion *ava = op->orc_ava;
-       Attribute *a, *an, *ra, *as = NULL;
-       Entry *e, *ee, *re;
+       Entry *e;
        int rc;
 
        Debug(LDAP_DEBUG_TRACE, "==> translucent_compare: <%s> %s:%s\n",
@@ -440,9 +431,8 @@ static int translucent_search_cb(Operation *op, SlapReply *rs) {
        slap_overinst *on;
        Entry *e, *re = NULL;
        Attribute *a, *ax, *an, *as = NULL;
-       BerVarray b, bx;
        void *private;
-       int i, rc, size;
+       int rc;
 
        if(!op || !rs || rs->sr_type != REP_SEARCH || !rs->sr_entry)
                return(SLAP_CB_CONTINUE);
@@ -525,7 +515,6 @@ static int translucent_search(Operation *op, SlapReply *rs) {
        slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
        slap_callback cb = { NULL, NULL, NULL, NULL };
        overlay_stack *ov = on->on_bi.bi_private;
-       translucent_configuration *cf = ov->config;
        void *private = op->o_bd->be_private;
        int rc;
 
@@ -708,7 +697,6 @@ static int translucent_open(BackendDB *be) {
 static int translucent_close(BackendDB *be) {
        slap_overinst *on = (slap_overinst *) be->bd_info;
        overlay_stack *ov = on->on_bi.bi_private;
-       translucent_configuration *cf = ov->config;
        void *private = be->be_private;
        int rc;