Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
openldap
OpenLDAP
Commits
41352ea3
Commit
41352ea3
authored
Feb 04, 2011
by
Ralf Haferkamp
Browse files
Fixed the overlay delete code to allow removing
cn=config overlays again.
parent
95f014d0
Changes
3
Hide whitespace changes
Inline
Side-by-side
servers/slapd/backover.c
View file @
41352ea3
...
...
@@ -1148,39 +1148,72 @@ overlay_destroy_one( BackendDB *be, slap_overinst *on )
}
#ifdef SLAP_CONFIG_DELETE
typedef
struct
ov_remove_ctx
{
BackendDB
*
be
;
slap_overinst
*
on
;
}
ov_remove_ctx
;
int
overlay_remove_cb
(
Operation
*
op
,
SlapReply
*
rs
)
{
ov_remove_ctx
*
rm_ctx
=
(
ov_remove_ctx
*
)
op
->
o_callback
->
sc_private
;
BackendInfo
*
bi_orig
=
rm_ctx
->
be
->
bd_info
;
rm_ctx
->
be
->
bd_info
=
(
BackendInfo
*
)
rm_ctx
->
on
;
if
(
rm_ctx
->
on
->
on_bi
.
bi_db_close
)
{
rm_ctx
->
on
->
on_bi
.
bi_db_close
(
rm_ctx
->
be
,
NULL
);
}
if
(
rm_ctx
->
on
->
on_bi
.
bi_db_destroy
)
{
rm_ctx
->
on
->
on_bi
.
bi_db_destroy
(
rm_ctx
->
be
,
NULL
);
}
/* clean up after removing last overlay */
if
(
!
rm_ctx
->
on
->
on_info
->
oi_list
)
{
/* reset db flags and bd_info to orig */
SLAP_DBFLAGS
(
rm_ctx
->
be
)
&=
~
SLAP_DBFLAG_GLOBAL_OVERLAY
;
rm_ctx
->
be
->
bd_info
=
rm_ctx
->
on
->
on_info
->
oi_orig
;
ch_free
(
rm_ctx
->
on
->
on_info
);
}
else
{
rm_ctx
->
be
->
bd_info
=
bi_orig
;
}
free
(
rm_ctx
->
on
);
op
->
o_tmpfree
(
rm_ctx
,
op
->
o_tmpmemctx
);
return
SLAP_CB_CONTINUE
;
}
void
overlay_remove
(
BackendDB
*
be
,
slap_overinst
*
on
)
overlay_remove
(
BackendDB
*
be
,
slap_overinst
*
on
,
Operation
*
op
)
{
slap_overinfo
*
oi
=
on
->
on_info
;
slap_overinst
**
oidx
;
BackendInfo
*
bi_orig
;
ov_remove_ctx
*
rm_ctx
;
slap_callback
*
rm_cb
,
*
cb
;
/* remove overlay from oi_list an call db_close and db_destroy
* handlers */
/* remove overlay from oi_list */
for
(
oidx
=
&
oi
->
oi_list
;
*
oidx
;
oidx
=
&
(
*
oidx
)
->
on_next
)
{
if
(
*
oidx
==
on
)
{
*
oidx
=
on
->
on_next
;
bi_orig
=
be
->
bd_info
;
be
->
bd_info
=
(
BackendInfo
*
)
on
;
if
(
on
->
on_bi
.
bi_db_close
)
{
on
->
on_bi
.
bi_db_close
(
be
,
NULL
);
}
if
(
on
->
on_bi
.
bi_db_destroy
)
{
on
->
on_bi
.
bi_db_destroy
(
be
,
NULL
);
}
be
->
bd_info
=
bi_orig
;
free
(
on
);
break
;
}
}
/* clean up after removing last overlay */
if
(
!
oi
->
oi_list
)
{
/* reset db flags and bd_info to orig */
be
->
bd_info
=
oi
->
oi_orig
;
ch_free
(
oi
);
}
/* The db_close and db_destroy handlers to cleanup a release
* the overlay's resources are called from the cleanup callback
*/
rm_ctx
=
op
->
o_tmpalloc
(
sizeof
(
ov_remove_ctx
),
op
->
o_tmpmemctx
);
rm_ctx
->
be
=
be
;
rm_ctx
->
on
=
on
;
rm_cb
=
op
->
o_tmpalloc
(
sizeof
(
slap_callback
),
op
->
o_tmpmemctx
);
rm_cb
->
sc_next
=
NULL
;
rm_cb
->
sc_cleanup
=
overlay_remove_cb
;
rm_cb
->
sc_response
=
NULL
;
rm_cb
->
sc_private
=
(
void
*
)
rm_ctx
;
/* Append callback to the end of the list */
for
(
cb
=
op
->
o_callback
;
cb
->
sc_next
;
cb
=
cb
->
sc_next
);
cb
->
sc_next
=
rm_cb
;
}
#endif
/* SLAP_CONFIG_DELETE */
...
...
servers/slapd/bconfig.c
View file @
41352ea3
...
...
@@ -6176,13 +6176,8 @@ config_back_delete( Operation *op, SlapReply *rs )
rs
->
sr_text
=
"Cannot delete global overlays"
;
ldap_pvt_thread_pool_resume
(
&
connection_pool
);
goto
out
;
}
else
if
(
ce
->
ce_be
==
op
->
o_bd
->
bd_self
)
{
rs
->
sr_err
=
LDAP_UNWILLING_TO_PERFORM
;
rs
->
sr_text
=
"Cannot delete cn=config overlays"
;
ldap_pvt_thread_pool_resume
(
&
connection_pool
);
goto
out
;
}
else
{
overlay_remove
(
ce
->
ce_be
,
(
slap_overinst
*
)
ce
->
ce_bi
);
overlay_remove
(
ce
->
ce_be
,
(
slap_overinst
*
)
ce
->
ce_bi
,
op
);
}
}
else
{
/* Cft_Database*/
if
(
ce
->
ce_be
==
frontendDB
||
ce
->
ce_be
==
op
->
o_bd
){
...
...
servers/slapd/proto-slap.h
View file @
41352ea3
...
...
@@ -483,7 +483,7 @@ LDAP_SLAPD_F (void) overlay_move LDAP_P((
BackendDB
*
be
,
slap_overinst
*
on
,
int
idx
));
#ifdef SLAP_CONFIG_DELETE
LDAP_SLAPD_F
(
void
)
overlay_remove
LDAP_P
((
BackendDB
*
be
,
slap_overinst
*
on
));
BackendDB
*
be
,
slap_overinst
*
on
,
Operation
*
op
));
LDAP_SLAPD_F
(
void
)
overlay_unregister_control
LDAP_P
((
BackendDB
*
be
,
const
char
*
oid
));
...
...
Howard Chu
@hyc
mentioned in merge request
!126 (merged)
·
Aug 29, 2020
mentioned in merge request
!126 (merged)
mentioned in merge request !126
Toggle commit list
Howard Chu
@hyc
mentioned in commit
edc94862
·
Aug 31, 2020
mentioned in commit
edc94862
mentioned in commit edc94862b7f9ea6673ade95bbab22865cbbb8894
Toggle commit list
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment