From 49f8684a7ce9c0b84df52631cc61b8186ab48a94 Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Mon, 10 Dec 2007 18:51:41 +0000 Subject: [PATCH] ITS#5267 slapo-dds fixes --- CHANGES | 1 + servers/slapd/overlays/dds.c | 46 +++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index a2c1995881..ec2ea4513b 100644 --- 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) diff --git a/servers/slapd/overlays/dds.c b/servers/slapd/overlays/dds.c index ebf70ec878..d21876e8b6 100644 --- a/servers/slapd/overlays/dds.c +++ b/servers/slapd/overlays/dds.c @@ -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_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; -- 2.39.5