X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foverlays%2Fdds.c;h=f8b2dab5140d297b194522eef4bb88ad68fdc426;hb=b8bbe985b8a3f03c0531744d6ddcd2ee43a9db1e;hp=f4347209338c23eb5df55d9391d4eb7541fca400;hpb=ff98f4abc5e1f9fe74b71c834270441a583768b0;p=openldap diff --git a/servers/slapd/overlays/dds.c b/servers/slapd/overlays/dds.c index f434720933..f8b2dab514 100644 --- a/servers/slapd/overlays/dds.c +++ b/servers/slapd/overlays/dds.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2005-2009 The OpenLDAP Foundation. + * Copyright 2005-2012 The OpenLDAP Foundation. * Portions Copyright 2005-2006 SysNet s.n.c. * All rights reserved. * @@ -156,7 +156,7 @@ dds_expire( void *ctx, dds_info_t *di ) op->ors_slimit = SLAP_NO_LIMIT; op->ors_attrs = slap_anlist_no_attrs; - expire = slap_get_time() + di->di_tolerance; + expire = slap_get_time() - di->di_tolerance; ts.bv_val = tsbuf; ts.bv_len = sizeof( tsbuf ); slap_timestamp( &expire, &ts ); @@ -587,6 +587,7 @@ dds_op_modify( Operation *op, SlapReply *rs ) switch ( mod->sml_op ) { case LDAP_MOD_DELETE: + case SLAP_MOD_SOFTDEL: /* FIXME? */ if ( mod->sml_values != NULL ) { if ( BER_BVISEMPTY( &bv_entryTtl ) || !bvmatch( &bv_entryTtl, &mod->sml_values[ 0 ] ) ) @@ -611,8 +612,9 @@ dds_op_modify( Operation *op, SlapReply *rs ) entryTtl = -1; /* fallthru */ - case SLAP_MOD_SOFTADD: /* FIXME? */ case LDAP_MOD_ADD: + case SLAP_MOD_SOFTADD: /* FIXME? */ + case SLAP_MOD_ADD_IF_NOT_PRESENT: /* FIXME? */ assert( mod->sml_values != NULL ); assert( BER_BVISNULL( &mod->sml_values[ 1 ] ) ); @@ -1706,6 +1708,9 @@ dds_db_open( int rc = 0; void *thrctx = ldap_pvt_thread_pool_context(); + if ( slapMode & SLAP_TOOL_MODE ) + return 0; + if ( DDS_OFF( di ) ) { goto done; } @@ -1821,6 +1826,12 @@ slap_exop_refresh( op->o_req_dn = op->o_req_ndn; op->o_bd = select_backend( &op->o_req_ndn, 0 ); + if ( op->o_bd == NULL ) { + send_ldap_error( op, rs, LDAP_NO_SUCH_OBJECT, + "no global superior knowledge" ); + goto done; + } + if ( !SLAP_DYNAMIC( op->o_bd ) ) { send_ldap_error( op, rs, LDAP_UNAVAILABLE_CRITICAL_EXTENSION, "backend does not support dynamic directory services" );