From: Pierangelo Masarati Date: Sun, 18 Jul 2004 08:35:46 +0000 (+0000) Subject: import fix to ITS#3244 X-Git-Tag: OPENLDAP_REL_ENG_2_2_15~21 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=1fc32fe055bed8cb6f1e3656785897f548d9ae4d;p=openldap import fix to ITS#3244 --- diff --git a/CHANGES b/CHANGES index 198a77cd43..99057dac10 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,7 @@ OpenLDAP 2.2.15 Engineering Fixed slapd abandon/cancel pending bug Fixed slapd attribute description syntax bug Fixed slapd ACI caching bug (caching disabled, ITS#3215) + Fixed slapadd dryrun mode (ITS#3244) Fixed libldap SASL re-encode bug Fixed libldap sasl_encode 64-bit bug (ITS#3054,3212) Fixed libldap matchedValues parsing bug (ITS#3208,3216) diff --git a/servers/slapd/slapadd.c b/servers/slapd/slapadd.c index 54421f5fba..a0db92e24d 100644 --- a/servers/slapd/slapadd.c +++ b/servers/slapd/slapadd.c @@ -94,13 +94,15 @@ slapadd( int argc, char **argv ) { fprintf( stderr, "%s: database doesn't support necessary operations.\n", progname ); - exit( EXIT_FAILURE ); + if ( !dryrun ) { + exit( EXIT_FAILURE ); + } } lmax = 0; lineno = 0; - if( be->be_entry_open( be, 1 ) != 0 ) { + if( !dryrun && be->be_entry_open( be, 1 ) != 0 ) { fprintf( stderr, "%s: could not open database.\n", progname ); exit( EXIT_FAILURE ); @@ -308,6 +310,13 @@ slapadd( int argc, char **argv ) } } + if ( dryrun ) { + if ( verbose ) { + fprintf( stderr, "(dry) added: \"%s\"\n", e->e_dn ); + } + goto done; + } + if ( update_ctxcsn == SLAP_TOOL_CTXCSN_KEEP && ( replica_promotion || replica_demotion )) { if ( is_entry_syncProviderSubentry( e )) { @@ -404,8 +413,12 @@ slapadd( int argc, char **argv ) } if (( !is_entry_syncProviderSubentry( e ) && - !is_entry_syncConsumerSubentry( e )) || - ( !replica_promotion && !replica_demotion )) { + !is_entry_syncConsumerSubentry( e )) || + ( !replica_promotion && !replica_demotion )) + { + /* dryrun moved earlier */ + assert( !dryrun ); + if (!dryrun) { ID id = be->be_entry_put( be, e, &bvtext ); if( id == NOID ) { @@ -429,6 +442,7 @@ slapadd( int argc, char **argv ) } } +done:; entry_free( e ); } @@ -471,6 +485,10 @@ slapadd( int argc, char **argv ) if ( ctxcsn_id == NOID ) { ctxcsn_e = slap_create_context_csn_entry( be, &maxcsn ); + + /* dryrun moved earlier */ + assert( !dryrun ); + if ( !dryrun ) { ctxcsn_id = be->be_entry_put( be, ctxcsn_e, &bvtext ); if( ctxcsn_id == NOID ) { @@ -496,6 +514,10 @@ slapadd( int argc, char **argv ) AC_MEMCPY( attr->a_vals[0].bv_val, maxcsn.bv_val, maxcsn.bv_len ); attr->a_vals[0].bv_val[maxcsn.bv_len] = '\0'; attr->a_vals[0].bv_len = maxcsn.bv_len; + + /* dryrun moved earlier */ + assert( !dryrun ); + if ( !dryrun ) { ctxcsn_id = be->be_entry_modify( be, ctxcsn_e, &bvtext ); if( ctxcsn_id == NOID ) { @@ -547,8 +569,12 @@ slapadd( int argc, char **argv ) if ( ctxcsn_id == NOID ) { ctxcsn_e = slap_create_syncrepl_entry( be, &mc, - &slap_syncrepl_cn_bv, - &slap_syncrepl_bv ); + &slap_syncrepl_cn_bv, + &slap_syncrepl_bv ); + + /* dryrun moved earlier */ + assert( !dryrun ); + if ( !dryrun ) { ctxcsn_id = be->be_entry_put( be, ctxcsn_e, &bvtext ); if( ctxcsn_id == NOID ) { @@ -575,6 +601,10 @@ slapadd( int argc, char **argv ) AC_MEMCPY( attr->a_vals[0].bv_val, mc.bv_val, mc.bv_len ); attr->a_vals[0].bv_val[maxcsn.bv_len] = '\0'; attr->a_vals[0].bv_len = maxcsn.bv_len; + + /* dryrun moved earlier */ + assert( !dryrun ); + if ( !dryrun ) { ctxcsn_id = be->be_entry_modify( be, ctxcsn_e, &bvtext ); @@ -615,7 +645,11 @@ slapadd( int argc, char **argv ) if ( ctxcsn_id == NOID ) { ctxcsn_e = slap_create_syncrepl_entry( be, &sei->cookie, - &sei->rdn, &sei->cn ); + &sei->rdn, &sei->cn ); + + /* dryrun moved earlier */ + assert( !dryrun ); + if ( !dryrun ) { ctxcsn_id = be->be_entry_put( be, ctxcsn_e, &bvtext ); if( ctxcsn_id == NOID ) { @@ -642,6 +676,10 @@ slapadd( int argc, char **argv ) AC_MEMCPY( attr->a_vals[0].bv_val, sei->cookie.bv_val, sei->cookie.bv_len ); attr->a_vals[0].bv_val[sei->cookie.bv_len] = '\0'; attr->a_vals[0].bv_len = sei->cookie.bv_len; + + /* dryrun moved earlier */ + assert( !dryrun ); + if ( !dryrun ) { ctxcsn_id = be->be_entry_modify( be, ctxcsn_e, &bvtext ); @@ -689,10 +727,14 @@ slapadd( int argc, char **argv ) ch_free( buf ); - if( be->be_entry_close( be )) rc = EXIT_FAILURE; + if ( !dryrun ) { + if( be->be_entry_close( be ) ) { + rc = EXIT_FAILURE; + } - if( be->be_sync ) { - be->be_sync( be ); + if( be->be_sync ) { + be->be_sync( be ); + } } slap_tool_destroy(); diff --git a/servers/slapd/slapcommon.c b/servers/slapd/slapcommon.c index a04be91af6..b81566e0b6 100644 --- a/servers/slapd/slapcommon.c +++ b/servers/slapd/slapcommon.c @@ -448,7 +448,7 @@ slap_tool_init( mal_leaktrace(1); #endif - if ( slap_startup( be ) ) { + if ( !dryrun && slap_startup( be ) ) { fprintf( stderr, "slap_startup failed\n" ); exit( EXIT_FAILURE ); } @@ -456,7 +456,9 @@ slap_tool_init( void slap_tool_destroy( void ) { - slap_shutdown( be ); + if ( !dryrun ) { + slap_shutdown( be ); + } slap_destroy(); #ifdef SLAPD_MODULES if ( slapMode == SLAP_SERVER_MODE ) {