From 920dca9762edbd9fba1150cfec97033803bf69cc Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Wed, 19 Nov 2008 10:17:27 +0000 Subject: [PATCH] improvements by David Hawes (ITS#5756) --- contrib/slapd-modules/addpartial/Makefile | 3 +- .../addpartial/addpartial-overlay.c | 203 ++++++------------ 2 files changed, 66 insertions(+), 140 deletions(-) diff --git a/contrib/slapd-modules/addpartial/Makefile b/contrib/slapd-modules/addpartial/Makefile index 16eb27a29e..3b68815055 100644 --- a/contrib/slapd-modules/addpartial/Makefile +++ b/contrib/slapd-modules/addpartial/Makefile @@ -1,6 +1,7 @@ # $OpenLDAP$ OPENLDAP_SRC=../../.. -CPPFLAGS+=-I${OPENLDAP_SRC}/include -I${OPENLDAP_SRC}/servers/slapd +OPENLDAP_BLD=../../.. +CPPFLAGS+=-I${OPENLDAP_SRC}/include -I${OPENLDAP_SRC}/servers/slapd -I${OPENLDAP_BLD}/include CC=gcc all: addpartial-overlay.so diff --git a/contrib/slapd-modules/addpartial/addpartial-overlay.c b/contrib/slapd-modules/addpartial/addpartial-overlay.c index 630a30edff..85fb6c3a16 100644 --- a/contrib/slapd-modules/addpartial/addpartial-overlay.c +++ b/contrib/slapd-modules/addpartial/addpartial-overlay.c @@ -16,8 +16,8 @@ * * Author: David H. Hawes, Jr. * Email: dhawes@vt.edu - * Version: $Revision: 6588 $ - * Updated: $Date: 2007-11-07 13:29:25 -0500 (Wed, 07 Nov 2007) $ + * Version: $Revision: 8385 $ + * Updated: $Date: 2008-11-04 12:19:52 -0500 (Tue, 04 Nov 2008) $ * * addpartial-overlay * @@ -33,7 +33,6 @@ #include "portable.h" #include "slap.h" -static int addpartial_search_cb( Operation *op, SlapReply *rs); static int collect_error_msg_cb( Operation *op, SlapReply *rs); static slap_overinst addpartial; @@ -46,10 +45,8 @@ static int addpartial_add( Operation *op, SlapReply *rs) { Operation nop = *op; SlapReply nrs = { REP_RESULT }; - Filter *filter = NULL; Entry *toAdd = NULL; - struct berval fstr = BER_BVNULL; - slap_callback cb = { NULL, addpartial_search_cb, NULL, NULL }; + Entry *found = NULL; slap_overinst *on = (slap_overinst *) op->o_bd->bd_info; int rc; @@ -64,61 +61,20 @@ static int addpartial_add( Operation *op, SlapReply *rs) { return SLAP_CB_CONTINUE; } - - rs->sr_text = NULL; - - nop.o_callback = &cb; - op->o_bd->bd_info = (BackendInfo *) on->on_info; - nop.o_tag = LDAP_REQ_SEARCH; - nop.o_ctrls = NULL; - - filter = str2filter("(objectclass=*)"); - filter2bv(filter, &fstr); - - nop.ors_scope = LDAP_SCOPE_BASE; - nop.ors_deref = LDAP_DEREF_NEVER; - nop.ors_slimit = -1;//SLAP_NO_LIMIT; - nop.ors_tlimit = -1;//SLAP_NO_LIMIT; - nop.ors_attrsonly = 0; - nop.ors_attrs = slap_anlist_no_attrs; - nop.ors_filter = filter; - nop.ors_filterstr = fstr; - - memset(&nrs, 0, sizeof(nrs)); - nrs.sr_type = REP_RESULT; - nrs.sr_err = LDAP_SUCCESS; - nrs.sr_entry = NULL; - nrs.sr_flags |= REP_ENTRY_MUSTBEFREED; - nrs.sr_text = NULL; - - Debug(LDAP_DEBUG_TRACE, "%s: performing search\n", addpartial.on_bi.bi_type, - 0,0); - - if(nop.o_bd->be_search) - { - rc = nop.o_bd->be_search(&nop, &nrs); - Debug(LDAP_DEBUG_TRACE, "%s: search performed\n", - addpartial.on_bi.bi_type,0,0); - } - else - { - Debug(LDAP_DEBUG_TRACE, "%s: backend missing search function\n", - addpartial.on_bi.bi_type,0,0); - } - if(filter) - filter_free(filter); - if(fstr.bv_val) - ch_free(fstr.bv_val); + rc = overlay_entry_get_ov(&nop, &nop.o_req_ndn, NULL, NULL, 0, &found, on); if(rc != LDAP_SUCCESS) + { + Debug(LDAP_DEBUG_TRACE, + "%s: no entry found, falling through to normal add\n", + addpartial.on_bi.bi_type, 0, 0); return SLAP_CB_CONTINUE; + } else { - Entry *found = NULL; Debug(LDAP_DEBUG_TRACE, "%s: found the dn\n", addpartial.on_bi.bi_type, 0,0); - found = (Entry *) cb.sc_private; if(found) { @@ -150,8 +106,7 @@ static int addpartial_add( Operation *op, SlapReply *rs) mod->sml_op &= LDAP_MOD_OP; mod->sml_next = NULL; mod->sml_desc = attr->a_desc; - mod->sml_type.bv_val = attr->a_desc->ad_cname.bv_val; - mod->sml_type.bv_len = strlen(mod->sml_type.bv_val); + mod->sml_type = attr->a_desc->ad_cname; mod->sml_values = attr->a_vals; mod->sml_nvalues = attr->a_nvals; mod->sml_numvals = attr->a_numvals; @@ -190,8 +145,7 @@ static int addpartial_add( Operation *op, SlapReply *rs) mod->sml_op &= LDAP_MOD_OP; mod->sml_next = NULL; mod->sml_desc = attr->a_desc; - mod->sml_type.bv_val = attr->a_desc->ad_cname.bv_val; - mod->sml_type.bv_len = strlen(mod->sml_type.bv_val); + mod->sml_type = attr->a_desc->ad_cname; mod->sml_values = attr->a_vals; mod->sml_nvalues = attr->a_nvals; mod->sml_numvals = attr->a_numvals; @@ -245,9 +199,7 @@ static int addpartial_add( Operation *op, SlapReply *rs) mod->sml_op &= LDAP_MOD_OP; mod->sml_next = NULL; mod->sml_desc = attr->a_desc; - mod->sml_type.bv_val = - attr->a_desc->ad_cname.bv_val; - mod->sml_type.bv_len = strlen(mod->sml_type.bv_val); + mod->sml_type = attr->a_desc->ad_cname; mod->sml_values = attr->a_vals; mod->sml_nvalues = attr->a_nvals; mod->sml_numvals = attr->a_numvals; @@ -278,9 +230,7 @@ static int addpartial_add( Operation *op, SlapReply *rs) mod->sml_op = LDAP_MOD_REPLACE; mod->sml_next = NULL; mod->sml_desc = attr->a_desc; - mod->sml_type.bv_val = - attr->a_desc->ad_cname.bv_val; - mod->sml_type.bv_len = strlen(mod->sml_type.bv_val); + mod->sml_type = attr->a_desc->ad_cname; mod->sml_values = NULL; mod->sml_nvalues = NULL; mod->sml_numvals = 0; @@ -296,71 +246,69 @@ static int addpartial_add( Operation *op, SlapReply *rs) } } + overlay_entry_release_ov(&nop, found, 0, on); + if(mods) { + Modifications *m = NULL; + Modifications *toDel; + int modcount; + slap_callback nullcb = { NULL, collect_error_msg_cb, + NULL, NULL }; + Debug(LDAP_DEBUG_TRACE, "%s: mods to do...\n", addpartial.on_bi.bi_type, 0, 0); - if(nop.o_bd->be_modify) + + memset(&nrs, 0, sizeof(nrs)); + nrs.sr_type = REP_RESULT; + nrs.sr_err = LDAP_SUCCESS; + nrs.sr_entry = NULL; + nrs.sr_text = NULL; + + nop.o_tag = LDAP_REQ_MODIFY; + nop.orm_modlist = mods; + nop.orm_no_opattrs = 0; + nop.o_callback = &nullcb; + nop.o_bd->bd_info = (BackendInfo *) on->on_info; + + for(m = mods, modcount = 0; m; m = m->sml_next, + modcount++) { - Modifications *m = NULL; - int modcount; - slap_callback nullcb = { NULL, collect_error_msg_cb, - NULL, NULL }; - char textbuf[SLAP_TEXT_BUFLEN]; - size_t textlen = sizeof textbuf; - - memset(&nrs, 0, sizeof(nrs)); - nrs.sr_type = REP_RESULT; - nrs.sr_err = LDAP_SUCCESS; - nrs.sr_entry = NULL; - nrs.sr_text = NULL; - - nop.o_tag = LDAP_REQ_MODIFY; - nop.orm_modlist = mods; - nop.o_callback = &nullcb; - nop.o_bd->bd_info = (BackendInfo *) on->on_info; - - for(m = mods, modcount = 0; m; m = m->sml_next, - modcount++) - { - /* count number of mods */ - } + /* count number of mods */ + } - Debug(LDAP_DEBUG_TRACE, "%s: number of mods: %d\n", - addpartial.on_bi.bi_type, modcount, 0); + Debug(LDAP_DEBUG_TRACE, "%s: number of mods: %d\n", + addpartial.on_bi.bi_type, modcount, 0); + if(nop.o_bd->be_modify) + { rc = (nop.o_bd->be_modify)(&nop, &nrs); + } - if(rc == LDAP_SUCCESS) - { - Debug(LDAP_DEBUG_TRACE, - "%s: modify successful\n", - addpartial.on_bi.bi_type, 0, 0); - } - else + if(rc == LDAP_SUCCESS) + { + Debug(LDAP_DEBUG_TRACE, + "%s: modify successful\n", + addpartial.on_bi.bi_type, 0, 0); + } + else + { + Debug(LDAP_DEBUG_TRACE, "%s: modify unsuccessful: %d\n", + addpartial.on_bi.bi_type, rc, 0); + rs->sr_err = rc; + if(nullcb.sc_private) { - Debug(LDAP_DEBUG_TRACE, "%s: modify unsuccessful: %d\n", - addpartial.on_bi.bi_type, rc, 0); - rs->sr_err = rc; - if(nrs.sr_text) - { - rs->sr_text = nullcb.sc_private; - } + rs->sr_text = nullcb.sc_private; } + } - Debug(LDAP_DEBUG_TRACE, "%s: freeing mods...\n", - addpartial.on_bi.bi_type, 0, 0); - - if(mods != NULL) - { - Modifications *toDel; + Debug(LDAP_DEBUG_TRACE, "%s: freeing mods...\n", + addpartial.on_bi.bi_type, 0, 0); - for(toDel = mods; toDel; toDel = mods) - { - mods = mods->sml_next; - ch_free(toDel); - } - } + for(toDel = mods; toDel; toDel = mods) + { + mods = mods->sml_next; + ch_free(toDel); } } else @@ -368,9 +316,6 @@ static int addpartial_add( Operation *op, SlapReply *rs) Debug(LDAP_DEBUG_TRACE, "%s: no mods to process\n", addpartial.on_bi.bi_type, 0, 0); } - - if(found != NULL) - entry_free(found); } else { @@ -387,26 +332,6 @@ static int addpartial_add( Operation *op, SlapReply *rs) } } -static int addpartial_search_cb( Operation *op, SlapReply *rs) -{ - Entry *entry = NULL; - - if(rs->sr_type != REP_SEARCH) return 0; - - Debug(LDAP_DEBUG_TRACE, "%s: addpartial_search_cb\n", - addpartial.on_bi.bi_type, 0, 0); - - if(rs->sr_entry) - { - Debug(LDAP_DEBUG_TRACE, "%s: dn found: %s\n", - addpartial.on_bi.bi_type, rs->sr_entry->e_nname.bv_val, 0); - entry = rs->sr_entry; - op->o_callback->sc_private = (void *) entry_dup(entry); - } - - return 0; -} - static int collect_error_msg_cb( Operation *op, SlapReply *rs) { if(rs->sr_text) @@ -427,5 +352,5 @@ int addpartial_init() int init_module(int argc, char *argv[]) { - return addpartial_init(); + return addpartial_init(); } -- 2.39.5