Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joe Martin
OpenLDAP
Commits
1a7b18bc
Commit
1a7b18bc
authored
Dec 10, 2009
by
Hallvard Furuseth
Browse files
ITS#5340: REP_ENTRY_MUSTFLUSH, rs_replace_entry(), rs_ensure_entry_modifiable()
parent
f3342dcb
Changes
3
Hide whitespace changes
Inline
Side-by-side
servers/slapd/proto-slap.h
View file @
1a7b18bc
...
...
@@ -1514,6 +1514,10 @@ LDAP_SLAPD_F (int) get_alias_dn LDAP_P((
/*
* result.c
*/
LDAP_SLAPD_F
(
void
)
rs_replace_entry
LDAP_P
((
Operation
*
op
,
SlapReply
*
rs
,
slap_overinst
*
on
,
Entry
*
e
));
LDAP_SLAPD_F
(
int
)
rs_ensure_entry_modifiable
LDAP_P
((
Operation
*
op
,
SlapReply
*
rs
,
slap_overinst
*
on
));
LDAP_SLAPD_F
(
void
)
slap_send_ldap_result
LDAP_P
((
Operation
*
op
,
SlapReply
*
rs
));
LDAP_SLAPD_F
(
void
)
send_ldap_sasl
LDAP_P
((
Operation
*
op
,
SlapReply
*
rs
));
LDAP_SLAPD_F
(
void
)
send_ldap_disconnect
LDAP_P
((
Operation
*
op
,
SlapReply
*
rs
));
...
...
servers/slapd/result.c
View file @
1a7b18bc
...
...
@@ -132,6 +132,50 @@ slap_req2res( ber_tag_t tag )
return
tag
;
}
#ifdef RS_ASSERT
#elif 0 && defined LDAP_DEVEL
/* FIXME: this should not crash. ITS#5340. */
#define RS_ASSERT assert
#else
#define RS_ASSERT(cond) ((void) 0)
#endif
/* Set rs->sr_entry after obyeing and clearing sr_flags & REP_ENTRY_MASK. */
void
rs_replace_entry
(
Operation
*
op
,
SlapReply
*
rs
,
slap_overinst
*
on
,
Entry
*
e
)
{
slap_mask_t
e_flags
=
rs
->
sr_flags
&
REP_ENTRY_MUSTFLUSH
;
if
(
e_flags
&&
rs
->
sr_entry
!=
NULL
)
{
RS_ASSERT
(
e_flags
!=
REP_ENTRY_MUSTFLUSH
);
if
(
!
(
e_flags
&
REP_ENTRY_MUSTRELEASE
)
)
{
entry_free
(
rs
->
sr_entry
);
}
else
if
(
on
!=
NULL
)
{
overlay_entry_release_ov
(
op
,
rs
->
sr_entry
,
0
,
on
);
}
else
{
be_entry_release_rw
(
op
,
rs
->
sr_entry
,
0
);
}
}
rs
->
sr_flags
&=
~
REP_ENTRY_MASK
;
rs
->
sr_entry
=
e
;
}
/*
* Ensure rs->sr_entry is modifiable, by duplicating it if necessary.
* Obey sr_flags. Set REP_ENTRY_<MODIFIABLE, and MUSTBEFREED if duplicated>.
* Return nonzero if rs->sr_entry was replaced.
*/
int
rs_ensure_entry_modifiable
(
Operation
*
op
,
SlapReply
*
rs
,
slap_overinst
*
on
)
{
if
(
rs
->
sr_flags
&
REP_ENTRY_MODIFIABLE
)
{
RS_ASSERT
((
rs
->
sr_flags
&
REP_ENTRY_MUSTFLUSH
)
==
REP_ENTRY_MUSTBEFREED
);
return
0
;
}
rs_replace_entry
(
op
,
rs
,
on
,
entry_dup
(
rs
->
sr_entry
));
rs
->
sr_flags
|=
REP_ENTRY_MODIFIABLE
|
REP_ENTRY_MUSTBEFREED
;
return
1
;
}
static
long
send_ldap_ber
(
Operation
*
op
,
BerElement
*
ber
)
...
...
servers/slapd/slap.h
View file @
1a7b18bc
...
...
@@ -2097,6 +2097,7 @@ struct SlapReply {
#define REP_ENTRY_MUSTBEFREED 0x0002U
#define REP_ENTRY_MUSTRELEASE 0x0004U
#define REP_ENTRY_MASK (REP_ENTRY_MODIFIABLE|REP_ENTRY_MUSTBEFREED|REP_ENTRY_MUSTRELEASE)
#define REP_ENTRY_MUSTFLUSH (REP_ENTRY_MODIFIABLE|REP_ENTRY_MUSTBEFREED)
#define REP_MATCHED_MUSTBEFREED 0x0010U
#define REP_MATCHED_MASK (REP_MATCHED_MUSTBEFREED)
...
...
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