]> git.sur5r.net Git - openldap/commitdiff
attribute values mucking
authorQuanah Gibson-Mount <quanah@openldap.org>
Mon, 11 Feb 2008 23:45:52 +0000 (23:45 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 11 Feb 2008 23:45:52 +0000 (23:45 +0000)
servers/slapd/back-monitor/database.c
servers/slapd/back-monitor/log.c

index 5bbbbbfbefaf09a21a15ecae834329057dd973a5..0ed080cb8976f70db99e2ee59c61bd93ffc42d46 100644 (file)
@@ -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 );
+                               }
                        }
                }
 
index 8f6d07d29f75b595daa825a5de82ea10fc8127bc..fedc10ff4835bca802a6b55969114dd1802af126 100644 (file)
@@ -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;