From 2a96981a0ac781d01e5bba473409ed2bdf4cd4e0 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Jan 09 2014 11:08:57 +0000 Subject: LDAP: Add a new error code for malformed access control filter https://fedorahosted.org/sssd/ticket/2164 The patch adds a new error code and special cases the new code so that access is denied and a nicer log message is shown. --- diff --git a/src/providers/ldap/sdap_access.c b/src/providers/ldap/sdap_access.c index 91a1807..e361cc3 100644 --- a/src/providers/ldap/sdap_access.c +++ b/src/providers/ldap/sdap_access.c @@ -854,9 +854,15 @@ static void sdap_access_filter_get_access_done(struct tevent_req *subreq) } } else if (dp_error == DP_ERR_OFFLINE) { ret = sdap_access_filter_decide_offline(req); + } else if (ret == ERR_INVALID_FILTER) { + sss_log(SSS_LOG_ERR, + "Malformed access control filter [%s]\n", state->filter); + DEBUG(SSSDBG_CRIT_FAILURE, + ("Malformed access control filter [%s]\n", state->filter)); + ret = ERR_ACCESS_DENIED; } else { DEBUG(1, ("sdap_get_generic_send() returned error [%d][%s]\n", - ret, strerror(ret))); + ret, sss_strerror(ret))); } goto done; diff --git a/src/providers/ldap/sdap_async.c b/src/providers/ldap/sdap_async.c index e905d2d..367007b 100644 --- a/src/providers/ldap/sdap_async.c +++ b/src/providers/ldap/sdap_async.c @@ -1306,9 +1306,9 @@ static errno_t sdap_get_generic_ext_step(struct tevent_req *req) sss_log(SSS_LOG_ERR, "LDAP connection error, %s", sss_ldap_err2string(lret)); } - } - - else { + } else if (lret == LDAP_FILTER_ERROR) { + ret = ERR_INVALID_FILTER; + } else { ret = EIO; } goto done; @@ -1570,7 +1570,7 @@ static void sdap_get_generic_done(struct tevent_req *subreq) talloc_zfree(subreq); if (ret) { DEBUG(4, ("sdap_get_generic_ext_recv failed [%d]: %s\n", - ret, strerror(ret))); + ret, sss_strerror(ret))); tevent_req_error(req, ret); return; } @@ -1790,7 +1790,7 @@ static void sdap_x_deref_search_done(struct tevent_req *subreq) talloc_zfree(subreq); if (ret) { DEBUG(4, ("sdap_get_generic_ext_recv failed [%d]: %s\n", - ret, strerror(ret))); + ret, sss_strerror(ret))); tevent_req_error(req, ret); return; } @@ -2049,7 +2049,7 @@ static void sdap_asq_search_done(struct tevent_req *subreq) talloc_zfree(subreq); if (ret) { DEBUG(4, ("sdap_get_generic_ext_recv failed [%d]: %s\n", - ret, strerror(ret))); + ret, sss_strerror(ret))); tevent_req_error(req, ret); return; } diff --git a/src/providers/ldap/sdap_async_groups_ad.c b/src/providers/ldap/sdap_async_groups_ad.c index 9b61c69..6a8a4fd 100644 --- a/src/providers/ldap/sdap_async_groups_ad.c +++ b/src/providers/ldap/sdap_async_groups_ad.c @@ -183,7 +183,7 @@ sdap_get_ad_match_rule_members_step(struct tevent_req *subreq) talloc_zfree(subreq); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, - ("LDAP search failed: [%s]\n", strerror(ret))); + ("LDAP search failed: [%s]\n", sss_strerror(ret))); tevent_req_error(req, ret); return; } diff --git a/src/providers/ldap/sdap_async_initgroups_ad.c b/src/providers/ldap/sdap_async_initgroups_ad.c index a3d3ff4..047ddfe 100644 --- a/src/providers/ldap/sdap_async_initgroups_ad.c +++ b/src/providers/ldap/sdap_async_initgroups_ad.c @@ -208,7 +208,7 @@ sdap_get_ad_match_rule_initgroups_step(struct tevent_req *subreq) talloc_zfree(subreq); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, - ("LDAP search failed: [%s]\n", strerror(ret))); + ("LDAP search failed: [%s]\n", sss_strerror(ret))); goto error; } @@ -383,7 +383,7 @@ static void sdap_get_ad_tokengroups_done(struct tevent_req *subreq) talloc_zfree(subreq); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, - ("LDAP search failed: [%s]\n", strerror(ret))); + ("LDAP search failed: [%s]\n", sss_strerror(ret))); goto done; } diff --git a/src/util/util_errors.c b/src/util/util_errors.c index 114c8b0..633257e 100644 --- a/src/util/util_errors.c +++ b/src/util/util_errors.c @@ -51,6 +51,7 @@ struct err_string error_to_str[] = { { "Entry not found" }, /* ERR_NOT_FOUND */ { "Domain not found" }, /* ERR_DOMAIN_NOT_FOUND */ { "Missing configuration file" }, /* ERR_MISSING_CONF */ + { "Malformed search filter" }, /* ERR_INVALID_FILTER, */ }; diff --git a/src/util/util_errors.h b/src/util/util_errors.h index bca45f3..1332085 100644 --- a/src/util/util_errors.h +++ b/src/util/util_errors.h @@ -73,6 +73,7 @@ enum sssd_errors { ERR_NOT_FOUND, ERR_DOMAIN_NOT_FOUND, ERR_MISSING_CONF, + ERR_INVALID_FILTER, ERR_LAST /* ALWAYS LAST */ };