summaryrefslogtreecommitdiffstats
path: root/src/providers/ldap/sdap_async.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/providers/ldap/sdap_async.c')
-rw-r--r--src/providers/ldap/sdap_async.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/providers/ldap/sdap_async.c b/src/providers/ldap/sdap_async.c
index 039510777..876fe74ed 100644
--- a/src/providers/ldap/sdap_async.c
+++ b/src/providers/ldap/sdap_async.c
@@ -1420,6 +1420,10 @@ static void sdap_get_generic_ext_done(struct sdap_op *op,
ldap_memfree(errmsg);
tevent_req_error(req, ENOTSUP);
return;
+ } else if (result == LDAP_REFERRAL) {
+ ldap_memfree(errmsg);
+ tevent_req_error(req, ERR_REFERRAL);
+ return;
} else if (result != LDAP_SUCCESS && result != LDAP_NO_SUCH_OBJECT) {
DEBUG(SSSDBG_OP_FAILURE,
"Unexpected result from ldap: %s(%d), %s\n",
@@ -1582,11 +1586,18 @@ static void sdap_get_generic_done(struct tevent_req *subreq)
{
struct tevent_req *req = tevent_req_callback_data(subreq,
struct tevent_req);
+ struct sdap_get_generic_state *state =
+ tevent_req_data(req, struct sdap_get_generic_state);
int ret;
ret = sdap_get_generic_ext_recv(subreq);
talloc_zfree(subreq);
- if (ret) {
+ if (ret == ERR_REFERRAL) {
+ if (dp_opt_get_bool(state->opts->basic, SDAP_REFERRALS)) {
+ tevent_req_error(req, ret);
+ return;
+ }
+ } else if (ret) {
DEBUG(SSSDBG_CONF_SETTINGS,
"sdap_get_generic_ext_recv failed [%d]: %s\n",
ret, sss_strerror(ret));