From: Ralf Haferkamp Date: Wed, 30 Jun 2010 12:38:01 +0000 (+0000) Subject: new call unregister_supported_control(), will be X-Git-Tag: MIGRATION_CVS2GIT~557 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b435efa6940ef71a6f0e2e5e5a0e091b4d36d585;p=openldap new call unregister_supported_control(), will be needed for cn=config delete support --- diff --git a/servers/slapd/controls.c b/servers/slapd/controls.c index 8467ff8536..8b31e2a677 100644 --- a/servers/slapd/controls.c +++ b/servers/slapd/controls.c @@ -344,6 +344,38 @@ register_supported_control2(const char *controloid, return LDAP_SUCCESS; } +#ifdef SLAP_CONFIG_DELETE +int +unregister_supported_control( const char *controloid ) +{ + struct slap_control *sc; + int i; + + if ( controloid == NULL || (sc = find_ctrl( controloid )) == NULL ){ + return -1; + } + + for ( i = 0; slap_known_controls[ i ]; i++ ) { + if ( strcmp( controloid, slap_known_controls[ i ] ) == 0 ) { + while ( slap_known_controls[i] ) { + slap_known_controls[i++] = slap_known_controls[i]; + } + num_known_controls--; + break; + } + } + + LDAP_SLIST_REMOVE(&controls_list, sc, slap_control, sc_next); + ch_free( sc->sc_oid ); + if ( sc->sc_extendedopsbv != NULL ) { + ber_bvarray_free( sc->sc_extendedopsbv ); + } + ch_free( sc ); + + return 0; +} +#endif /* SLAP_CONFIG_DELETE */ + /* * One-time initialization of internal controls. */ diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 666354ada0..b49181d675 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -647,6 +647,10 @@ LDAP_SLAPD_F (int) register_supported_control2 LDAP_P(( int *controlcid )); #define register_supported_control(oid, mask, exops, fn, cid) \ register_supported_control2((oid), (mask), (exops), (fn), 0, (cid)) +#ifdef SLAP_CONFIG_DELETE +LDAP_SLAPD_F (int) unregister_supported_control LDAP_P(( + const char* controloid )); +#endif /* SLAP_CONFIG_DELETE */ LDAP_SLAPD_F (int) slap_controls_init LDAP_P ((void)); LDAP_SLAPD_F (void) controls_destroy LDAP_P ((void)); LDAP_SLAPD_F (int) controls_root_dse_info LDAP_P ((Entry *e));