Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Дилян Палаузов
OpenLDAP
Commits
a54f9985
Commit
a54f9985
authored
Jul 27, 2021
by
Howard Chu
Committed by
Quanah Gibson-Mount
Aug 03, 2021
Browse files
ITS#6138 let frontend handle all exop responses
parent
66ed15a2
Changes
1
Hide whitespace changes
Inline
Side-by-side
servers/slapd/back-ldap/extended.c
View file @
a54f9985
...
...
@@ -54,18 +54,15 @@ ldap_back_extended_one( Operation *op, SlapReply *rs, ldap_back_exop_f exop )
* called twice; maybe we could avoid the
* ldap_back_dobind() call inside each extended()
* call ... */
if
(
!
ldap_back_dobind
(
&
lc
,
op
,
rs
,
LDAP_BACK_SEND
ERR
)
)
{
return
-
1
;
if
(
!
ldap_back_dobind
(
&
lc
,
op
,
rs
,
LDAP_BACK_
DONT
SEND
)
)
{
return
rs
->
sr_err
;
}
ctrls
=
oldctrls
=
op
->
o_ctrls
;
if
(
ldap_back_controls_add
(
op
,
rs
,
lc
,
&
ctrls
)
)
{
op
->
o_ctrls
=
oldctrls
;
send_ldap_extended
(
op
,
rs
);
rs
->
sr_text
=
NULL
;
/* otherwise frontend resends result */
rc
=
rs
->
sr_err
=
SLAPD_ABANDON
;
rc
=
rs
->
sr_err
;
goto
done
;
}
...
...
@@ -242,11 +239,22 @@ retry:
}
}
if
(
text
)
{
/* copy to tmpmem, doesn't need to be freed */
rs
->
sr_text
=
op
->
o_tmpalloc
(
strlen
(
text
)
+
1
,
op
->
o_tmpmemctx
);
strcpy
(
rs
->
sr_text
,
text
);
ch_free
(
text
);
}
if
(
rs
->
sr_matched
)
rs
->
sr_flags
|=
REP_MATCHED_MUSTBEFREED
;
if
(
rs
->
sr_ctrls
)
rs
->
sr_flags
|=
REP_CTRLS_MUSTBEFREED
;
if
(
rc
!=
LDAP_SUCCESS
)
{
rs
->
sr_err
=
slap_map_api2result
(
rs
);
if
(
rs
->
sr_err
==
LDAP_UNAVAILABLE
&&
do_retry
)
{
do_retry
=
0
;
if
(
ldap_back_retry
(
&
lc
,
op
,
rs
,
LDAP_BACK_SEND
ERR
)
)
{
if
(
ldap_back_retry
(
&
lc
,
op
,
rs
,
LDAP_BACK_
DONT
SEND
)
)
{
goto
retry
;
}
}
...
...
@@ -255,11 +263,6 @@ retry:
ldap_back_quarantine
(
op
,
rs
);
}
if
(
text
)
rs
->
sr_text
=
text
;
send_ldap_extended
(
op
,
rs
);
/* otherwise frontend resends result */
rc
=
rs
->
sr_err
=
SLAPD_ABANDON
;
}
else
if
(
LDAP_BACK_QUARANTINE
(
li
)
)
{
ldap_back_quarantine
(
op
,
rs
);
}
...
...
@@ -273,22 +276,6 @@ retry:
op
->
o_tmpfree
(
ndn
.
bv_val
,
op
->
o_tmpmemctx
);
}
/* these have to be freed anyway... */
if
(
rs
->
sr_matched
)
{
free
(
(
char
*
)
rs
->
sr_matched
);
rs
->
sr_matched
=
NULL
;
}
if
(
rs
->
sr_ctrls
)
{
ldap_controls_free
(
rs
->
sr_ctrls
);
rs
->
sr_ctrls
=
NULL
;
}
if
(
text
)
{
free
(
text
);
rs
->
sr_text
=
NULL
;
}
/* in case, cleanup handler */
if
(
lc
==
NULL
)
{
*
lcp
=
NULL
;
...
...
@@ -363,7 +350,7 @@ retry:
rs
->
sr_err
=
slap_map_api2result
(
rs
);
if
(
rs
->
sr_err
==
LDAP_UNAVAILABLE
&&
do_retry
)
{
do_retry
=
0
;
if
(
ldap_back_retry
(
&
lc
,
op
,
rs
,
LDAP_BACK_SEND
ERR
)
)
{
if
(
ldap_back_retry
(
&
lc
,
op
,
rs
,
LDAP_BACK_
DONT
SEND
)
)
{
goto
retry
;
}
}
...
...
@@ -371,12 +358,6 @@ retry:
if
(
LDAP_BACK_QUARANTINE
(
li
)
)
{
ldap_back_quarantine
(
op
,
rs
);
}
if
(
text
)
rs
->
sr_text
=
text
;
send_ldap_extended
(
op
,
rs
);
/* otherwise frontend resends result */
rc
=
rs
->
sr_err
=
SLAPD_ABANDON
;
}
else
if
(
LDAP_BACK_QUARANTINE
(
li
)
)
{
ldap_back_quarantine
(
op
,
rs
);
}
...
...
@@ -385,21 +366,16 @@ retry:
ldap_pvt_mp_add
(
li
->
li_ops_completed
[
SLAP_OP_EXTENDED
],
1
);
ldap_pvt_thread_mutex_unlock
(
&
li
->
li_counter_mutex
);
/* these have to be freed anyway... */
if
(
rs
->
sr_matched
)
{
free
(
(
char
*
)
rs
->
sr_matched
);
rs
->
sr_matched
=
NULL
;
}
if
(
rs
->
sr_ctrls
)
{
ldap_controls_free
(
rs
->
sr_ctrls
);
rs
->
sr_ctrls
=
NULL
;
}
if
(
text
)
{
free
(
text
);
rs
->
sr_text
=
NULL
;
/* copy to tmpmem, doesn't need to be freed */
rs
->
sr_text
=
op
->
o_tmpalloc
(
strlen
(
text
)
+
1
,
op
->
o_tmpmemctx
);
strcpy
(
rs
->
sr_text
,
text
);
ch_free
(
text
);
}
if
(
rs
->
sr_matched
)
rs
->
sr_flags
|=
REP_MATCHED_MUSTBEFREED
;
if
(
rs
->
sr_ctrls
)
rs
->
sr_flags
|=
REP_CTRLS_MUSTBEFREED
;
/* in case, cleanup handler */
if
(
lc
==
NULL
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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