diff --git a/servers/slapd/back-monitor/database.c b/servers/slapd/back-monitor/database.c index 5bbbbbfbefaf09a21a15ecae834329057dd973a5..0ed080cb8976f70db99e2ee59c61bd93ffc42d46 100644 --- a/servers/slapd/back-monitor/database.c +++ b/servers/slapd/back-monitor/database.c @@ -835,6 +835,7 @@ monitor_subsys_database_modify( BER_BVZERO( &a->a_vals[ k - 1 ] ); BER_BVZERO( &a->a_nvals[ k - 1 ] ); + a->a_numvals--; } } } @@ -860,9 +861,16 @@ monitor_subsys_database_modify( BER_BVZERO( &a->a_vals[ k - 1 ] ); BER_BVZERO( &a->a_nvals[ k - 1 ] ); + a->a_numvals--; } } } + + if ( a->a_vals == NULL ) { + assert( a->a_numvals == 0 ); + + attr_delete( &e->e_attrs, mi->mi_ad_restrictedOperation ); + } } } diff --git a/servers/slapd/back-monitor/log.c b/servers/slapd/back-monitor/log.c index 8f6d07d29f75b595daa825a5de82ea10fc8127bc..fedc10ff4835bca802a6b55969114dd1802af126 100644 --- a/servers/slapd/back-monitor/log.c +++ b/servers/slapd/back-monitor/log.c @@ -395,6 +395,7 @@ delete_values( Operation *op, Entry *e, Modification *mod, int *newlevel ) a->a_vals[ k - 1 ] = a->a_vals[ k ]; } BER_BVZERO( &a->a_vals[ k - 1 ] ); + a->a_numvals--; break; } @@ -409,6 +410,8 @@ delete_values( Operation *op, Entry *e, Modification *mod, int *newlevel ) /* if no values remain, delete the entire attribute */ if ( BER_BVISNULL( &a->a_vals[ 0 ] ) ) { + assert( a->a_numvals == 0 ); + /* should already be zero */ *newlevel = 0;