]> git.sur5r.net Git - openldap/commitdiff
Forgot the OC delete handler
authorHoward Chu <hyc@openldap.org>
Thu, 14 Sep 2006 00:09:46 +0000 (00:09 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 14 Sep 2006 00:09:46 +0000 (00:09 +0000)
servers/slapd/bconfig.c

index da5986fc589a7706e78c16ca30cb05c50ca9825b..3b2c0cedda9195093db727a3fca321b6b3c0f639 100644 (file)
@@ -1114,6 +1114,33 @@ config_generic(ConfigArgs *c) {
                        if ( ce->ce_parent->ce_type == Cft_Global )
                                return 1;
                        }
+                       cfn = c->private;
+                       if ( c->valx < 0 ) {
+                               ObjectClass *oc;
+
+                               for( oc = cfn->c_oc_head; oc; oc_next( &oc )) {
+                                       oc_delete( oc );
+                                       if ( oc  == cfn->c_oc_tail )
+                                               break;
+                               }
+                               cfn->c_oc_head = cfn->c_oc_tail = NULL;
+                       } else {
+                               ObjectClass *oc, *prev = NULL;
+                               int i;
+
+                               for ( i=0, oc=cfn->c_oc_head; i<c->valx; i++) {
+                                       prev = oc;
+                                       oc_next( &oc );
+                               }
+                               oc_delete( oc );
+                               if ( cfn->c_oc_tail == oc ) {
+                                       cfn->c_oc_tail = prev;
+                               }
+                               if ( cfn->c_oc_head == oc ) {
+                                       oc_next( &oc );
+                                       cfn->c_oc_head = oc;
+                               }
+                       }
                        break;
 
                case CFG_ATTR: {