]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/dds.c
Merge remote-tracking branch 'origin/mdb.master' into OPENLDAP_REL_ENG_2_4
[openldap] / servers / slapd / overlays / dds.c
index 6b579b9b07df17db40068f4eb729c15d6fcc8ac7..900c6fd3e356a3dd633af0057995774544403350 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2005-2010 The OpenLDAP Foundation.
+ * Copyright 2005-2013 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" );