*
* 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
*
#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;
{
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;
{
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)
{
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;
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;
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;
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;
}
}
+ 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
Debug(LDAP_DEBUG_TRACE, "%s: no mods to process\n",
addpartial.on_bi.bi_type, 0, 0);
}
-
- if(found != NULL)
- entry_free(found);
}
else
{
}
}
-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)
int init_module(int argc, char *argv[])
{
- return addpartial_init();
+ return addpartial_init();
}