URL: https://github.com/SSSD/sssd/pull/449
Author: amitkumar50
 Title: #449: cache: Check for max_id/min_id in cache_req
Action: synchronized

To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/449/head:pr449
git checkout pr449
From 630b9fc87b5f12a8d3662abb899cfe84d0df60f0 Mon Sep 17 00:00:00 2001
From: amitkuma <amitk...@redhat.com>
Date: Tue, 14 Nov 2017 16:44:06 +0530
Subject: [PATCH] cache: Check for max_id/min_id in cache_req

The cache_req code doesn't check the min_id/max_id
boundaries for requests by ID.
Extending the .lookup_fn function in each plugin
that searches by ID for a check that returns 0
if the entry is out of the range.

Resolves: https://pagure.io/SSSD/sssd/issue/3569
---
 src/db/sysdb_ops.c                                              | 1 -
 src/db/sysdb_search.c                                           | 1 -
 src/responder/common/cache_req/plugins/cache_req_group_by_id.c  | 6 ++++++
 src/responder/common/cache_req/plugins/cache_req_object_by_id.c | 5 +++++
 src/responder/common/cache_req/plugins/cache_req_user_by_id.c   | 5 +++++
 5 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c
index 1539c41c9..a3c4c9033 100644
--- a/src/db/sysdb_ops.c
+++ b/src/db/sysdb_ops.c
@@ -4909,7 +4909,6 @@ errno_t sysdb_search_object_by_id(TALLOC_CTX *mem_ctx,
     if (filter == NULL) {
         return ENOMEM;
     }
-
     ret = sysdb_search_object_attr(mem_ctx, domain, filter, attrs, true, res);
 
     talloc_free(filter);
diff --git a/src/db/sysdb_search.c b/src/db/sysdb_search.c
index 808396690..1806a614e 100644
--- a/src/db/sysdb_search.c
+++ b/src/db/sysdb_search.c
@@ -374,7 +374,6 @@ errno_t sysdb_getpwuid_with_views(TALLOC_CTX *mem_ctx,
         DEBUG(SSSDBG_OP_FAILURE, "talloc_new failed.\n");
         return ENOMEM;
     }
-
     /* If there are views we first have to search the overrides for matches */
     if (DOM_HAS_VIEWS(domain)) {
         ret = sysdb_search_user_override_by_uid(tmp_ctx, domain, uid,
diff --git a/src/responder/common/cache_req/plugins/cache_req_group_by_id.c b/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
index 5ca64283a..e048e0289 100644
--- a/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
+++ b/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
@@ -64,6 +64,12 @@ cache_req_group_by_id_lookup(TALLOC_CTX *mem_ctx,
                              struct sss_domain_info *domain,
                              struct ldb_result **_result)
 {
+   if ((domain->id_max != 0 && data->id > domain->id_max)
+        ||  (data->id < domain->id_min)) {
+        DEBUG(SSSDBG_OP_FAILURE, "gid exceeds min/max boundaries\n");
+        return EOK;
+    }
+
     return sysdb_getgrgid_with_views(mem_ctx, domain, data->id, _result);
 }
 
diff --git a/src/responder/common/cache_req/plugins/cache_req_object_by_id.c b/src/responder/common/cache_req/plugins/cache_req_object_by_id.c
index 339bd4f5f..88482caf9 100644
--- a/src/responder/common/cache_req/plugins/cache_req_object_by_id.c
+++ b/src/responder/common/cache_req/plugins/cache_req_object_by_id.c
@@ -90,6 +90,11 @@ cache_req_object_by_id_lookup(TALLOC_CTX *mem_ctx,
                               struct sss_domain_info *domain,
                               struct ldb_result **_result)
 {
+    if ((domain->id_max != 0 && data->id > domain->id_max)
+        || (data->id < domain->id_min)) {
+        DEBUG(SSSDBG_OP_FAILURE, "id exceeded min/max boundaries\n");
+        return EOK;
+    }
     return sysdb_search_object_by_id(mem_ctx, domain, data->id,
                                      data->attrs, _result);
 }
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_id.c b/src/responder/common/cache_req/plugins/cache_req_user_by_id.c
index 913f9be5b..64fb9aeb1 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_id.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_id.c
@@ -64,6 +64,11 @@ cache_req_user_by_id_lookup(TALLOC_CTX *mem_ctx,
                             struct sss_domain_info *domain,
                             struct ldb_result **_result)
 {
+    if ((domain->id_max != 0 && data->id > domain->id_max)
+        ||  (data->id < domain->id_min)) {
+        DEBUG(SSSDBG_OP_FAILURE, "uid exceeds min/max boundaries\n");
+        return EOK;
+    }
     return sysdb_getpwuid_with_views(mem_ctx, domain, data->id, _result);
 }
 
_______________________________________________
sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org
To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org

Reply via email to