]> git.sur5r.net Git - openldap/commitdiff
New call to unregister controls registered form overlays
authorRalf Haferkamp <ralf@openldap.org>
Thu, 1 Jul 2010 11:28:47 +0000 (11:28 +0000)
committerRalf Haferkamp <ralf@openldap.org>
Thu, 1 Jul 2010 11:28:47 +0000 (11:28 +0000)
servers/slapd/backover.c
servers/slapd/proto-slap.h

index 8fff96cbe9fe483c8d4a2db4ec0805c6b7abf920..e95b192d0ba65ffc6a991b5ae4e2058806cec016 100644 (file)
@@ -1088,6 +1088,36 @@ overlay_register_control( BackendDB *be, const char *oid )
        return 0;
 }
 
+#ifdef SLAP_CONFIG_DELETE
+void
+overlay_unregister_control( BackendDB *be, const char *oid )
+{
+       int             gotit = 0;
+       int             cid;
+
+       if ( slap_find_control_id( oid, &cid ) == LDAP_CONTROL_NOT_FOUND ) {
+               return;
+       }
+
+       if ( SLAP_ISGLOBALOVERLAY( be ) ) {
+               BackendDB *bd;
+
+               /* remove from all backends... */
+               LDAP_STAILQ_FOREACH( bd, &backendDB, be_next ) {
+                       if ( bd == be->bd_self ) {
+                               gotit = 1;
+                       }
+
+                       bd->be_ctrls[ cid ] = 0;
+               }
+       }
+
+       if ( !gotit ) {
+               be->bd_self->be_ctrls[ cid ] = 0;
+       }
+}
+#endif /* SLAP_CONFIG_DELETE */
+
 void
 overlay_destroy_one( BackendDB *be, slap_overinst *on )
 {
index b49181d675b941edf17a041301c94b9a333eb5ed..f55d870dcf6f633d911d707b5e9df593a441d54e 100644 (file)
@@ -483,6 +483,9 @@ LDAP_SLAPD_F (void) overlay_move LDAP_P((
 #ifdef SLAP_CONFIG_DELETE
 LDAP_SLAPD_F (void) overlay_remove LDAP_P((
        BackendDB *be, slap_overinst *on ));
+LDAP_SLAPD_F (void) overlay_unregister_control LDAP_P((
+       BackendDB *be,
+       const char *oid ));
 #endif /* SLAP_CONFIG_DELETE */
 LDAP_SLAPD_F (int) overlay_callback_after_backover LDAP_P((
        Operation *op, slap_callback *sc, int append ));