mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-12 10:54:48 +08:00
ITS#7445 fix deref control exposure
do not expose control until deref overlay is actually instantiated at least once (see also ITS#6647)
This commit is contained in:
parent
7c97c036c8
commit
be781ab808
@ -139,6 +139,7 @@ typedef struct deref_cb_t {
|
||||
|
||||
static int deref_cid;
|
||||
static slap_overinst deref;
|
||||
static int ov_count;
|
||||
|
||||
static int
|
||||
deref_parseCtrl (
|
||||
@ -516,6 +517,29 @@ deref_op_search( Operation *op, SlapReply *rs )
|
||||
return SLAP_CB_CONTINUE;
|
||||
}
|
||||
|
||||
static int
|
||||
deref_db_init( BackendDB *be, ConfigReply *cr)
|
||||
{
|
||||
if ( ov_count == 0 ) {
|
||||
int rc;
|
||||
|
||||
rc = register_supported_control2( LDAP_CONTROL_X_DEREF,
|
||||
SLAP_CTRL_SEARCH,
|
||||
NULL,
|
||||
deref_parseCtrl,
|
||||
1, /* replace */
|
||||
&deref_cid );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
Debug( LDAP_DEBUG_ANY,
|
||||
"deref_init: Failed to register control (%d)\n",
|
||||
rc, 0, 0 );
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
ov_count++;
|
||||
return LDAP_SUCCESS;
|
||||
}
|
||||
|
||||
static int
|
||||
deref_db_open( BackendDB *be, ConfigReply *cr)
|
||||
{
|
||||
@ -524,9 +548,13 @@ deref_db_open( BackendDB *be, ConfigReply *cr)
|
||||
|
||||
#ifdef SLAP_CONFIG_DELETE
|
||||
static int
|
||||
deref_db_close( BackendDB *be, ConfigReply *cr)
|
||||
deref_db_destroy( BackendDB *be, ConfigReply *cr)
|
||||
{
|
||||
ov_count--;
|
||||
overlay_unregister_control( be, LDAP_CONTROL_X_DEREF );
|
||||
if ( ov_count == 0 ) {
|
||||
unregister_supported_control( LDAP_CONTROL_X_DEREF );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* SLAP_CONFIG_DELETE */
|
||||
@ -534,22 +562,11 @@ deref_db_close( BackendDB *be, ConfigReply *cr)
|
||||
int
|
||||
deref_initialize(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = register_supported_control( LDAP_CONTROL_X_DEREF,
|
||||
SLAP_CTRL_SEARCH, NULL,
|
||||
deref_parseCtrl, &deref_cid );
|
||||
if ( rc != LDAP_SUCCESS ) {
|
||||
Debug( LDAP_DEBUG_ANY,
|
||||
"deref_init: Failed to register control (%d)\n",
|
||||
rc, 0, 0 );
|
||||
return -1;
|
||||
}
|
||||
|
||||
deref.on_bi.bi_type = "deref";
|
||||
deref.on_bi.bi_db_init = deref_db_init;
|
||||
deref.on_bi.bi_db_open = deref_db_open;
|
||||
#ifdef SLAP_CONFIG_DELETE
|
||||
deref.on_bi.bi_db_close = deref_db_close;
|
||||
deref.on_bi.bi_db_destroy = deref_db_destroy;
|
||||
#endif /* SLAP_CONFIG_DELETE */
|
||||
deref.on_bi.bi_op_search = deref_op_search;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user