From 6dead6e8a80949d30b79a6b71557114cc58b8d2a Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Mon, 11 Feb 2008 23:45:52 +0000
Subject: [PATCH] attribute values mucking

---
 servers/slapd/back-monitor/database.c | 8 ++++++++
 servers/slapd/back-monitor/log.c      | 3 +++
 2 files changed, 11 insertions(+)

diff --git a/servers/slapd/back-monitor/database.c b/servers/slapd/back-monitor/database.c
index 5bbbbbfbef..0ed080cb89 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 8f6d07d29f..fedc10ff48 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;
 		
-- 
GitLab