]> git.sur5r.net Git - openldap/commitdiff
ITS#5267 slapo-dds fixes
authorQuanah Gibson-Mount <quanah@openldap.org>
Mon, 10 Dec 2007 18:51:41 +0000 (18:51 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 10 Dec 2007 18:51:41 +0000 (18:51 +0000)
CHANGES
servers/slapd/overlays/dds.c

diff --git a/CHANGES b/CHANGES
index a2c19958819d3d64554a1dc192170c17c58dcb40..ec2ea4513bd43cad7deef4b11ebbd473eba6fb16 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -17,6 +17,7 @@ OpenLDAP 2.4.7 Release (2007/12/01)
        Fixed slapd-bdb/hdb dn2id lock bug (ITS#5262)
        Fixed slapd-hdb caching on rename ops (ITS#5221)
        Fixed slapo-accesslog abandoned op cleanup (ITS#5161)
+       Fixed slapo-dds deleting from nonexistent db (ITS#5267)
        Fixed slapo-memberOf deleted values saving (ITS#5258)
        Fixed slapo-pcache op->o_abandon handling (ITS#5187)
        Fixed slapo-ppolicy single password check on modify (ITS#5146)
index ebf70ec878b8fde65af3d5032a01f13a42fbc799..d21876e8b62a5440f0b9fe88d90fdd35d976f117 100644 (file)
@@ -134,6 +134,9 @@ dds_expire( void *ctx, dds_info_t *di )
 
        int             ndeletes, ntotdeletes;
 
+       int             rc;
+       char            *extra = "";
+
        connection_fake_init( &conn, &opbuf, ctx );
        op = &opbuf.ob_op;
 
@@ -184,10 +187,21 @@ done_search:;
        op->o_tmpfree( op->ors_filterstr.bv_val, op->o_tmpmemctx );
        filter_free_x( op, op->ors_filter );
 
-       if ( rs.sr_err != LDAP_SUCCESS ) {
-               Log1( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
-                       "DDS expired objects lookup failed err=%d\n",
-                       rs.sr_err );
+       rc = rs.sr_err;
+       switch ( rs.sr_err ) {
+       case LDAP_SUCCESS:
+               break;
+
+       case LDAP_NO_SUCH_OBJECT:
+               /* (ITS#5267) database not created yet? */
+               rs.sr_err = LDAP_SUCCESS;
+               extra = " (ignored)";
+               /* fallthru */
+
+       default:
+               Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
+                       "DDS expired objects lookup failed err=%d%s\n",
+                       rc, extra );
                goto done;
        }
 
@@ -1609,6 +1623,9 @@ dds_count( void *ctx, BackendDB *be )
        slap_callback   sc = { 0 };
        SlapReply       rs = { REP_RESULT };
 
+       int             rc;
+       char            *extra = "";
+
        connection_fake_init( &conn, &opbuf, ctx );
        op = &opbuf.ob_op;
 
@@ -1644,6 +1661,7 @@ dds_count( void *ctx, BackendDB *be )
        op->o_callback = &sc;
        sc.sc_response = dds_count_cb;
        sc.sc_private = &di->di_num_dynamicObjects;
+       di->di_num_dynamicObjects = 0;
 
        op->o_bd->bd_info = (BackendInfo *)on->on_info;
        (void)op->o_bd->bd_info->bi_op_search( op, &rs );
@@ -1653,15 +1671,25 @@ done_search:;
        op->o_tmpfree( op->ors_filterstr.bv_val, op->o_tmpmemctx );
        filter_free_x( op, op->ors_filter );
 
-       if ( rs.sr_err == LDAP_SUCCESS ) {
+       rc = rs.sr_err;
+       switch ( rs.sr_err ) {
+       case LDAP_SUCCESS:
                Log1( LDAP_DEBUG_STATS, LDAP_LEVEL_INFO,
                        "DDS non-expired=%d\n",
                        di->di_num_dynamicObjects );
+               break;
 
-       } else {
-               Log1( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
-                       "DDS non-expired objects lookup failed err=%d\n",
-                       rs.sr_err );
+       case LDAP_NO_SUCH_OBJECT:
+               /* (ITS#5267) database not created yet? */
+               rs.sr_err = LDAP_SUCCESS;
+               extra = " (ignored)";
+               /* fallthru */
+
+       default:
+               Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
+                       "DDS non-expired objects lookup failed err=%d%s\n",
+                       rc, extra );
+               break;
        }
 
        return rs.sr_err;