|
|
7db20e |
From b224c49b8f0a9cdf343a443fdf2190dc6f047508 Mon Sep 17 00:00:00 2001
|
|
|
7db20e |
From: Jakub Hrozek <jhrozek@redhat.com>
|
|
|
7db20e |
Date: Wed, 20 Aug 2014 14:00:38 +0200
|
|
|
7db20e |
Subject: [PATCH 128/130] LDAP: Ignore returned referrals if referral support
|
|
|
7db20e |
is disabled
|
|
|
7db20e |
|
|
|
7db20e |
Reviewed-by: Pavel Reichl <preichl@redhat.com>
|
|
|
7db20e |
(cherry picked from commit a2ea3f5d9ef9f17efbb61e942c2bc6cff7d1ebf2)
|
|
|
7db20e |
---
|
|
|
7db20e |
src/providers/ldap/sdap_async.c | 18 +++++++++++++++---
|
|
|
7db20e |
src/util/util_errors.c | 1 +
|
|
|
7db20e |
src/util/util_errors.h | 2 ++
|
|
|
7db20e |
3 files changed, 18 insertions(+), 3 deletions(-)
|
|
|
7db20e |
|
|
|
7db20e |
diff --git a/src/providers/ldap/sdap_async.c b/src/providers/ldap/sdap_async.c
|
|
|
7db20e |
index 1022a093f06ec7e9a50b13160fc9a4660a255e92..7db01d979ee81a3707126a4c3eb1f36006e8b392 100644
|
|
|
7db20e |
--- a/src/providers/ldap/sdap_async.c
|
|
|
7db20e |
+++ b/src/providers/ldap/sdap_async.c
|
|
|
7db20e |
@@ -1404,6 +1404,10 @@ static void sdap_get_generic_ext_done(struct sdap_op *op,
|
|
|
7db20e |
ldap_memfree(errmsg);
|
|
|
7db20e |
tevent_req_error(req, ENOTSUP);
|
|
|
7db20e |
return;
|
|
|
7db20e |
+ } else if (result == LDAP_REFERRAL) {
|
|
|
7db20e |
+ ldap_memfree(errmsg);
|
|
|
7db20e |
+ tevent_req_error(req, ERR_REFERRAL);
|
|
|
7db20e |
+ return;
|
|
|
7db20e |
} else if (result != LDAP_SUCCESS && result != LDAP_NO_SUCH_OBJECT) {
|
|
|
7db20e |
DEBUG(SSSDBG_OP_FAILURE,
|
|
|
7db20e |
("Unexpected result from ldap: %s(%d), %s\n",
|
|
|
7db20e |
@@ -1565,13 +1569,21 @@ static void sdap_get_generic_done(struct tevent_req *subreq)
|
|
|
7db20e |
{
|
|
|
7db20e |
struct tevent_req *req = tevent_req_callback_data(subreq,
|
|
|
7db20e |
struct tevent_req);
|
|
|
7db20e |
+ struct sdap_get_generic_state *state =
|
|
|
7db20e |
+ tevent_req_data(req, struct sdap_get_generic_state);
|
|
|
7db20e |
int ret;
|
|
|
7db20e |
|
|
|
7db20e |
ret = sdap_get_generic_ext_recv(subreq);
|
|
|
7db20e |
talloc_zfree(subreq);
|
|
|
7db20e |
- if (ret) {
|
|
|
7db20e |
- DEBUG(4, ("sdap_get_generic_ext_recv failed [%d]: %s\n",
|
|
|
7db20e |
- ret, sss_strerror(ret)));
|
|
|
7db20e |
+ if (ret == ERR_REFERRAL) {
|
|
|
7db20e |
+ if (dp_opt_get_bool(state->opts->basic, SDAP_REFERRALS)) {
|
|
|
7db20e |
+ tevent_req_error(req, ret);
|
|
|
7db20e |
+ return;
|
|
|
7db20e |
+ }
|
|
|
7db20e |
+ } else if (ret) {
|
|
|
7db20e |
+ DEBUG(SSSDBG_CONF_SETTINGS,
|
|
|
7db20e |
+ ("sdap_get_generic_ext_recv failed [%d]: %s\n",
|
|
|
7db20e |
+ ret, sss_strerror(ret)));
|
|
|
7db20e |
tevent_req_error(req, ret);
|
|
|
7db20e |
return;
|
|
|
7db20e |
}
|
|
|
7db20e |
diff --git a/src/util/util_errors.c b/src/util/util_errors.c
|
|
|
7db20e |
index c9b507557da07555c719bb0dd18145e6799a53eb..eb7b1aec7b388e2509471cce8322cf38f9388151 100644
|
|
|
7db20e |
--- a/src/util/util_errors.c
|
|
|
7db20e |
+++ b/src/util/util_errors.c
|
|
|
7db20e |
@@ -53,6 +53,7 @@ struct err_string error_to_str[] = {
|
|
|
7db20e |
{ "Missing configuration file" }, /* ERR_MISSING_CONF */
|
|
|
7db20e |
{ "Malformed search filter" }, /* ERR_INVALID_FILTER, */
|
|
|
7db20e |
{ "No POSIX attributes detected" }, /* ERR_NO_POSIX */
|
|
|
7db20e |
+ { "LDAP search returned a referral" }, /* ERR_REFERRAL */
|
|
|
7db20e |
};
|
|
|
7db20e |
|
|
|
7db20e |
|
|
|
7db20e |
diff --git a/src/util/util_errors.h b/src/util/util_errors.h
|
|
|
7db20e |
index 3dd94af1f304d65e22515c859c6f69a021fa7e92..2858311dec90ae0ea57dbcd7b6de4beb9fb19c50 100644
|
|
|
7db20e |
--- a/src/util/util_errors.h
|
|
|
7db20e |
+++ b/src/util/util_errors.h
|
|
|
7db20e |
@@ -75,6 +75,8 @@ enum sssd_errors {
|
|
|
7db20e |
ERR_MISSING_CONF,
|
|
|
7db20e |
ERR_INVALID_FILTER,
|
|
|
7db20e |
ERR_NO_POSIX,
|
|
|
7db20e |
+ ERR_NO_SYSBUS,
|
|
|
7db20e |
+ ERR_REFERRAL,
|
|
|
7db20e |
ERR_LAST /* ALWAYS LAST */
|
|
|
7db20e |
};
|
|
|
7db20e |
|
|
|
7db20e |
--
|
|
|
7db20e |
1.9.3
|
|
|
7db20e |
|