implement unload_extop for symmetry (needs test)

This commit is contained in:
Pierangelo Masarati 2010-06-30 00:22:01 +00:00
parent f12290c64f
commit 14fcbf4cfc
2 changed files with 56 additions and 0 deletions

View file

@ -324,6 +324,57 @@ load_extop2(
return(0);
}
int
unload_extop(
const struct berval *ext_oid,
SLAP_EXTOP_MAIN_FN *ext_main,
unsigned flags )
{
struct berval oidm = BER_BVNULL;
struct extop_list *ext, **extp;
/* oid must be given */
if ( ext_oid == NULL || BER_BVISNULL( ext_oid ) ||
BER_BVISEMPTY( ext_oid ) )
{
return -1;
}
/* if it's not an oid, check if it's a macto */
if ( numericoidValidate( NULL, (struct berval *)ext_oid ) !=
LDAP_SUCCESS )
{
oidm.bv_val = oidm_find( ext_oid->bv_val );
if ( oidm.bv_val == NULL ) {
return -1;
}
oidm.bv_len = strlen( oidm.bv_val );
ext_oid = &oidm;
}
/* lookup the oid */
for ( extp = &supp_ext_list; *extp; extp = &(*extp)->next ) {
if ( bvmatch( ext_oid, &(*extp)->oid ) ) {
/* if ext_main is given, only remove if it matches */
if ( ext_main != NULL && (*extp)->ext_main != ext_main ) {
return -1;
}
break;
}
}
if ( *extp == NULL ) {
return -1;
}
ext = *extp;
*extp = (*extp)->next;
ch_free( ext );
return 0;
}
int
extops_init (void)
{
@ -334,6 +385,7 @@ extops_init (void)
builtin_extops[i].flags,
builtin_extops[i].ext_main );
}
return(0);
}

View file

@ -1035,6 +1035,10 @@ LDAP_SLAPD_F (int) load_extop2 LDAP_P((
unsigned tmpflags ));
#define load_extop(ext_oid, flags, ext_main) \
load_extop2((ext_oid), (flags), (ext_main), 0)
LDAP_SLAPD_F (int) unload_extop LDAP_P((
const struct berval *ext_oid,
SLAP_EXTOP_MAIN_FN *ext_main,
unsigned tmpflags ));
LDAP_SLAPD_F (int) extops_init LDAP_P(( void ));