case 0:
break;
case LDAP_BUSY:
- send_ldap_error( op, rs, LDAP_BUSY, "ldap server busy" );
LOCK_ID_FREE ( bdb->bi_dbenv, locker );
+ rs->sr_text = "ldap server busy";
return LDAP_BUSY;
case DB_LOCK_DEADLOCK:
case DB_LOCK_NOTGRANTED:
LDAP_XSTRING(bdb_referrals)
": dn2entry failed: %s (%d)\n",
db_strerror(rc), rc, 0 );
- send_ldap_error( op, rs, LDAP_OTHER, "internal error" );
LOCK_ID_FREE ( bdb->bi_dbenv, locker );
- return rs->sr_err;
+ rs->sr_text = "internal error";
+ return LDAP_OTHER;
}
if ( rc == DB_NOTFOUND ) {
- rc = 0;
+ rc = LDAP_SUCCESS;
rs->sr_matched = NULL;
if ( e != NULL ) {
Debug( LDAP_DEBUG_TRACE,
ber_bvarray_free( rs->sr_ref );
rs->sr_ref = NULL;
} else if ( rc != LDAP_SUCCESS ) {
- rs->sr_err = rc;
rs->sr_text = rs->sr_matched ? "bad referral object" : NULL;
- send_ldap_result( op, rs );
}
LOCK_ID_FREE ( bdb->bi_dbenv, locker );
ber_bvarray_free( rs->sr_ref );
rs->sr_ref = NULL;
} else {
- send_ldap_error( op, rs, LDAP_OTHER, "bad referral object" );
- rc = rs->sr_err;
+ rc = LDAP_OTHER;
+ rs->sr_text = "bad referral object";
}
rs->sr_matched = NULL;
* database. This fix is likely to intercept also entries
* generated by back-perl and so. */
if ( rs->sr_entry->e_private == NULL ) {
- return 0;
+ return LDAP_SUCCESS;
}
return SLAP_CB_CONTINUE;
rs->sr_ref = NULL;
} else if ( rc != LDAP_SUCCESS ) {
- rs->sr_err = rc;
rs->sr_text = rs->sr_matched ? "bad referral object" : NULL;
- send_ldap_result( op, rs );
}
if ( rs->sr_matched ) {
rs->sr_ref = NULL;
} else {
- send_ldap_error( op, rs, LDAP_OTHER, "bad referral object" );
- rc = rs->sr_err;
+ rc = LDAP_OTHER;
+ rs->sr_text = "bad referral object";
}
rs->sr_matched = NULL;
{
struct ldif_info *li = (struct ldif_info *) op->o_bd->be_private;
struct berval op_dn = op->o_req_dn, op_ndn = op->o_req_ndn;
+ int rc = LDAP_NO_SUCH_OBJECT;
assert( ndn != NULL );
assert( !BER_BVISNULL( ndn ) );
op->o_req_ndn = op_ndn;
ldap_pvt_thread_rdwr_runlock( &li->li_rdwr );
- if ( *ent && oc && !is_entry_objectclass_or_sub( *ent, oc ) ) {
- entry_free( *ent );
- *ent = NULL;
+ if ( *ent ) {
+ rc = LDAP_SUCCESS;
+ if ( oc && !is_entry_objectclass_or_sub( *ent, oc ) ) {
+ rc = LDAP_NO_SUCH_ATTRIBUTE;
+ entry_free( *ent );
+ *ent = NULL;
+ }
}
- return ( *ent == NULL ? 1 : 0 );
+ return rc;
}
static int ldif_tool_entry_open(BackendDB *be, int mode) {
ap = &(*ap)->a_next;
}
- return 0;
+ return LDAP_SUCCESS;
}
/* for overlays */
-int null_back_entry_get(
+static int
+null_back_entry_get(
Operation *op,
struct berval *ndn,
ObjectClass *oc,
int rw,
Entry **ent )
{
- *ent = NULL;
- return 1;
+ assert( *ent == NULL );
+
+ /* don't admit the object isn't there */
+ return oc || at ? LDAP_NO_SUCH_ATTRIBUTE : LDAP_BUSY;
}
}
}
- return relay_back_op( op, rs, bd, bd->be_chk_referrals, 0 );
+ return relay_back_op( op, rs, bd, bd->be_chk_referrals, LDAP_SUCCESS );
}
int
SlapReply *rs )
{
Attribute **ap;
- int rc = 0;
+ int rc = LDAP_SUCCESS;
for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next )
/* just count them */ ;
{
CfBackInfo *cfb;
CfEntryInfo *ce, *last;
+ int rc = LDAP_NO_SUCH_OBJECT;
cfb = (CfBackInfo *)op->o_bd->be_private;
ce = config_find_base( cfb->cb_root, ndn, &last );
if ( ce ) {
*ent = ce->ce_entry;
- if ( *ent && oc && !is_entry_objectclass_or_sub( *ent, oc ) ) {
- *ent = NULL;
+ if ( *ent ) {
+ rc = LDAP_SUCCESS;
+ if ( oc && !is_entry_objectclass_or_sub( *ent, oc ) ) {
+ rc = LDAP_NO_SUCH_ATTRIBUTE;
+ *ent = NULL;
+ }
}
}
- return ( *ent == NULL ? 1 : 0 );
+ return rc;
}
static void