summaryrefslogtreecommitdiffstats
path: root/src/providers/ldap/ldap_id.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/providers/ldap/ldap_id.c')
-rw-r--r--src/providers/ldap/ldap_id.c48
1 files changed, 19 insertions, 29 deletions
diff --git a/src/providers/ldap/ldap_id.c b/src/providers/ldap/ldap_id.c
index 724990653..8ccb36092 100644
--- a/src/providers/ldap/ldap_id.c
+++ b/src/providers/ldap/ldap_id.c
@@ -1358,6 +1358,20 @@ void sdap_account_info_handler(struct be_req *breq)
return sdap_handle_account_info(breq, ctx, ctx->conn);
}
+bool sdap_is_enum_request(struct be_acct_req *ar)
+{
+ switch (ar->entry_type & BE_REQ_TYPE_MASK) {
+ case BE_REQ_USER:
+ case BE_REQ_GROUP:
+ case BE_REQ_SERVICES:
+ if (ar->filter_type == BE_FILTER_ENUM) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
/* A generic LDAP account info handler */
struct sdap_handle_acct_req_state {
struct be_acct_req *ar;
@@ -1398,16 +1412,6 @@ sdap_handle_acct_req_send(TALLOC_CTX *mem_ctx,
switch (ar->entry_type & BE_REQ_TYPE_MASK) {
case BE_REQ_USER: /* user */
-
- /* skip enumerations on demand */
- if (ar->filter_type == BE_FILTER_ENUM) {
- DEBUG(SSSDBG_TRACE_LIBS,
- "Skipping user enumeration on demand\n");
- state->err = "Success";
- ret = EOK;
- goto done;
- }
-
subreq = users_get_send(state, be_ctx->ev, id_ctx,
sdom, conn,
ar->filter_value,
@@ -1418,16 +1422,6 @@ sdap_handle_acct_req_send(TALLOC_CTX *mem_ctx,
break;
case BE_REQ_GROUP: /* group */
-
- /* skip enumerations on demand */
- if (ar->filter_type == BE_FILTER_ENUM) {
- DEBUG(SSSDBG_TRACE_LIBS,
- "Skipping group enumeration on demand\n");
- state->err = "Success";
- ret = EOK;
- goto done;
- }
-
subreq = groups_get_send(state, be_ctx->ev, id_ctx,
sdom, conn,
ar->filter_value,
@@ -1472,15 +1466,6 @@ sdap_handle_acct_req_send(TALLOC_CTX *mem_ctx,
break;
case BE_REQ_SERVICES:
- /* skip enumerations on demand */
- if (ar->filter_type == BE_FILTER_ENUM) {
- DEBUG(SSSDBG_TRACE_LIBS,
- "Skipping service enumeration on demand\n");
- state->err = "Success";
- ret = EOK;
- goto done;
- }
-
if (ar->filter_type == BE_FILTER_SECID
|| ar->filter_type == BE_FILTER_UUID) {
ret = EINVAL;
@@ -1666,6 +1651,11 @@ void sdap_handle_account_info(struct be_req *breq, struct sdap_id_ctx *ctx,
EINVAL, "Invalid private data");
}
+ if (sdap_is_enum_request(ar)) {
+ DEBUG(SSSDBG_TRACE_LIBS, "Skipping enumeration on demand\n");
+ return sdap_handler_done(breq, DP_ERR_OK, EOK, "Success");
+ }
+
req = sdap_handle_acct_req_send(breq, ctx->be, ar, ctx,
ctx->opts->sdom, conn, true);
if (req == NULL) {