/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2002-2004 The OpenLDAP Foundation.
+ * Copyright 2002-2005 The OpenLDAP Foundation.
* Portions Copyright 1997,2002-2003 IBM Corporation.
* All rights reserved.
*
int OpType )
{
Connection *pConn;
- ber_len_t max = SLAPD_GLOBAL(sockbuf_max_incoming);
+ ber_len_t max = sockbuf_max_incoming;
pConn = (Connection *) slapi_ch_calloc(1, sizeof(Connection));
if (pConn == NULL) {
} else {
int repl_user = be_isupdate_dn( op->o_bd, &op->o_bd->be_rootdn );
if ( !op->o_bd->be_update_ndn.bv_len || repl_user ) {
- int update = op->o_bd->be_update_ndn.bv_len;
- char textbuf[SLAP_TEXT_BUFLEN];
- size_t textlen = sizeof textbuf;
+ int update = !BER_BVISNULL( &op->o_bd->be_update_ndn );
+ char textbuf[ SLAP_TEXT_BUFLEN ];
+ size_t textlen = sizeof( textbuf );
- rc = slap_mods_check( modlist, update, &text,
+ rc = slap_mods_check( modlist, &text,
textbuf, textlen, NULL );
if ( rc != LDAP_SUCCESS) {
goto cleanup;
}
+ if ( !update ) {
+ rc = slap_mods_no_update_check( modlist,
+ &text, textbuf, textlen );
+ if ( rc != LDAP_SUCCESS) {
+ goto cleanup;
+ }
+ }
+
if ( !repl_user ) {
rc = slap_mods_opattrs( op,
modlist, modtail, &text,
SlapReply rs = { REP_RESULT };
struct berval dn = BER_BVNULL;
- int manageDsaIt = 0;
+ int manageDsaIt = SLAP_CONTROL_NONE;
int isCritical;
if ( ldn == NULL ) {
if ( slapi_control_present( controls,
SLAPI_CONTROL_MANAGEDSAIT_OID, NULL, &isCritical) ) {
- manageDsaIt = 1;
+ manageDsaIt = isCritical ? SLAP_CONTROL_CRITICAL : SLAP_CONTROL_NONCRITICAL;
}
- op->o_bd = select_backend( &op->o_req_ndn, manageDsaIt, 0 );
+ op->o_bd = select_backend( &op->o_req_ndn, manageDsaIt, 1 );
if ( op->o_bd == NULL ) {
rs.sr_err = LDAP_PARTIAL_RESULTS;
goto cleanup;
Operation *op = NULL;
Slapi_PBlock *pPB = NULL;
- int manageDsaIt = 0;
+ int manageDsaIt = SLAP_CONTROL_NONE;
int isCritical;
SlapReply rs = { REP_RESULT };
if ( slapi_control_present( controls, LDAP_CONTROL_MANAGEDSAIT,
NULL, &isCritical ) ) {
- manageDsaIt = 1;
+ manageDsaIt = isCritical ? SLAP_CONTROL_CRITICAL : SLAP_CONTROL_NONCRITICAL;
}
op = (Operation *)pConn->c_pending_ops.stqh_first;
pPB = (Slapi_PBlock *)op->o_pb;
op->o_ctrls = controls;
- op->o_bd = select_backend( &((*e)->e_nname), manageDsaIt, 0 );
+ op->o_bd = select_backend( &((*e)->e_nname), manageDsaIt, 1 );
if ( op->o_bd == NULL ) {
rs.sr_err = LDAP_PARTIAL_RESULTS;
goto cleanup;
Connection *pConn = NULL;
Operation *op = NULL;
Slapi_PBlock *pPB = NULL;
- int manageDsaIt = 0;
+ int manageDsaIt = SLAP_CONTROL_NONE;
int isCritical;
SlapReply rs = { REP_RESULT };
if ( slapi_control_present( controls,
SLAPI_CONTROL_MANAGEDSAIT_OID, NULL, &isCritical ) ) {
- manageDsaIt = 1;
+ manageDsaIt = isCritical ? SLAP_CONTROL_CRITICAL : SLAP_CONTROL_NONCRITICAL;
}
- op->o_bd = select_backend( &op->o_req_ndn, manageDsaIt, 0 );
+ op->o_bd = select_backend( &op->o_req_ndn, manageDsaIt, 1 );
if ( op->o_bd == NULL ) {
rs.sr_err = LDAP_PARTIAL_RESULTS;
goto cleanup;
struct berval dn = BER_BVNULL;
- int manageDsaIt = 0;
+ int manageDsaIt = SLAP_CONTROL_NONE;
int isCritical;
struct berval *bv;
LDAPMod *pMod;
if ( slapi_control_present( controls,
SLAPI_CONTROL_MANAGEDSAIT_OID, NULL, &isCritical ) ) {
- manageDsaIt = 1;
+ manageDsaIt = isCritical ? SLAP_CONTROL_CRITICAL : SLAP_CONTROL_NONCRITICAL;
}
- op->o_bd = select_backend( &op->o_req_ndn, manageDsaIt, 0 );
+ op->o_bd = select_backend( &op->o_req_ndn, manageDsaIt, 1 );
if ( op->o_bd == NULL ) {
rs.sr_err = LDAP_PARTIAL_RESULTS;
goto cleanup;
/* fall through */
case LDAP_MOD_DELETE:
case LDAP_MOD_REPLACE:
+ case LDAP_MOD_INCREMENT:
break;
default:
if ( op->o_bd->be_modify ) {
int repl_user = be_isupdate( op );
if ( !op->o_bd->be_update_ndn.bv_len || repl_user ) {
- int update = op->o_bd->be_update_ndn.bv_len;
- const char *text = NULL;
- char textbuf[SLAP_TEXT_BUFLEN];
- size_t textlen = sizeof( textbuf );
- slap_callback cb = { NULL, slap_replog_cb, NULL, NULL };
+ int update = !BER_BVISEMPTY( &op->o_bd->be_update_ndn );
+ const char *text = NULL;
+ char textbuf[ SLAP_TEXT_BUFLEN ];
+ size_t textlen = sizeof( textbuf );
+ slap_callback cb = { NULL, slap_replog_cb, NULL, NULL };
- rs.sr_err = slap_mods_check( modlist, update,
+ rs.sr_err = slap_mods_check( modlist,
&text, textbuf, textlen, NULL );
if ( rs.sr_err != LDAP_SUCCESS ) {
goto cleanup;
}
+ if ( !update ) {
+ rs.sr_err = slap_mods_no_update_check( modlist,
+ &text, textbuf, textlen );
+ if ( rs.sr_err != LDAP_SUCCESS ) {
+ goto cleanup;
+ }
+ }
+
if ( !repl_user ) {
rs.sr_err = slap_mods_opattrs( op, modlist,
modtail, &text, textbuf,
AttributeName *an = NULL;
const char *text = NULL;
- int manageDsaIt = 0;
+ int manageDsaIt = SLAP_CONTROL_NONE;
int isCritical;
int i;
}
}
- if ( !op->o_req_ndn.bv_len && !BER_BVISNULL( &SLAPD_GLOBAL(default_search_nbase) ) ) {
+ if ( !op->o_req_ndn.bv_len && default_search_nbase.bv_len ) {
slapi_ch_free( (void **)&op->o_req_dn.bv_val );
slapi_ch_free( (void **)&op->o_req_ndn.bv_val );
- ber_dupbv( &op->o_req_dn, &SLAPD_GLOBAL(default_search_base) );
- ber_dupbv( &op->o_req_ndn, &SLAPD_GLOBAL(default_search_nbase) );
+ ber_dupbv( &op->o_req_dn, &default_search_base );
+ ber_dupbv( &op->o_req_ndn, &default_search_nbase );
}
if ( slapi_control_present( controls,
LDAP_CONTROL_MANAGEDSAIT, NULL, &isCritical ) ) {
- manageDsaIt = 1;
+ manageDsaIt = isCritical ? SLAP_CONTROL_CRITICAL : SLAP_CONTROL_NONCRITICAL;
}
- op->o_bd = select_backend( &op->o_req_ndn, manageDsaIt, 0 );
+ op->o_bd = select_backend( &op->o_req_ndn, manageDsaIt, 1 );
if ( op->o_bd == NULL ) {
- if ( manageDsaIt == 1 ) {
+ if ( manageDsaIt > SLAP_CONTROL_NONE ) {
rs.sr_err = LDAP_NO_SUCH_OBJECT;
} else {
rs.sr_err = LDAP_PARTIAL_RESULTS;