|
|
b2d430 |
From 634311d9250903599a61b2f5e205e2568ae92497 Mon Sep 17 00:00:00 2001
|
|
|
b2d430 |
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
|
|
|
b2d430 |
Date: Tue, 12 Jul 2016 12:59:48 +0200
|
|
|
b2d430 |
Subject: [PATCH 29/31] sssctl: move filter creation to separate function
|
|
|
b2d430 |
MIME-Version: 1.0
|
|
|
b2d430 |
Content-Type: text/plain; charset=UTF-8
|
|
|
b2d430 |
Content-Transfer-Encoding: 8bit
|
|
|
b2d430 |
|
|
|
b2d430 |
Reviewed-by: Fabiano FidĂȘncio <fabiano@fidencio.org>
|
|
|
b2d430 |
(cherry picked from commit 3c6e15e8aa38d9dfa02a7255fad56149bdfb35a6)
|
|
|
b2d430 |
---
|
|
|
b2d430 |
src/tools/sssctl/sssctl_cache.c | 81 +++++++++++++++++++++++------------------
|
|
|
b2d430 |
1 file changed, 46 insertions(+), 35 deletions(-)
|
|
|
b2d430 |
|
|
|
b2d430 |
diff --git a/src/tools/sssctl/sssctl_cache.c b/src/tools/sssctl/sssctl_cache.c
|
|
|
b2d430 |
index e23bb89db95217e66a441b7e4d6d32e668486cc8..3e7644e327eb3e5a0e33023e7a3f5f0f15e03cf6 100644
|
|
|
b2d430 |
--- a/src/tools/sssctl/sssctl_cache.c
|
|
|
b2d430 |
+++ b/src/tools/sssctl/sssctl_cache.c
|
|
|
b2d430 |
@@ -285,27 +285,16 @@ done:
|
|
|
b2d430 |
return ret;
|
|
|
b2d430 |
}
|
|
|
b2d430 |
|
|
|
b2d430 |
-static errno_t sssctl_find_object(TALLOC_CTX *mem_ctx,
|
|
|
b2d430 |
- struct sss_domain_info *domains,
|
|
|
b2d430 |
- struct sss_domain_info *domain,
|
|
|
b2d430 |
- sssctl_basedn_fn basedn_fn,
|
|
|
b2d430 |
- enum cache_object obj_type,
|
|
|
b2d430 |
- const char *attr_name,
|
|
|
b2d430 |
- const char *attr_value,
|
|
|
b2d430 |
- const char **attrs,
|
|
|
b2d430 |
- struct sysdb_attrs **_entry,
|
|
|
b2d430 |
- struct sss_domain_info **_dom)
|
|
|
b2d430 |
+static const char *sssctl_create_filter(TALLOC_CTX *mem_ctx,
|
|
|
b2d430 |
+ struct sss_domain_info *dom,
|
|
|
b2d430 |
+ enum cache_object obj_type,
|
|
|
b2d430 |
+ const char *attr_name,
|
|
|
b2d430 |
+ const char *attr_value)
|
|
|
b2d430 |
{
|
|
|
b2d430 |
- TALLOC_CTX *tmp_ctx;
|
|
|
b2d430 |
- struct sss_domain_info *dom;
|
|
|
b2d430 |
- struct sysdb_attrs *entry;
|
|
|
b2d430 |
- struct ldb_dn *base_dn;
|
|
|
b2d430 |
- bool fqn_provided;
|
|
|
b2d430 |
- bool qualify_attr = false;
|
|
|
b2d430 |
- char *filter;
|
|
|
b2d430 |
- errno_t ret;
|
|
|
b2d430 |
const char *class;
|
|
|
b2d430 |
+ const char *filter;
|
|
|
b2d430 |
char *filter_value;
|
|
|
b2d430 |
+ bool qualify_attr = false;
|
|
|
b2d430 |
|
|
|
b2d430 |
if (strcmp(attr_name, SYSDB_NAME) == 0 &&
|
|
|
b2d430 |
(obj_type == CACHED_USER ||
|
|
|
b2d430 |
@@ -326,9 +315,44 @@ static errno_t sssctl_find_object(TALLOC_CTX *mem_ctx,
|
|
|
b2d430 |
default:
|
|
|
b2d430 |
DEBUG(SSSDBG_FATAL_FAILURE,
|
|
|
b2d430 |
"sssctl doesn't handle this object type (type=%d)\n", obj_type);
|
|
|
b2d430 |
- return EINVAL;
|
|
|
b2d430 |
+ return NULL;
|
|
|
b2d430 |
}
|
|
|
b2d430 |
|
|
|
b2d430 |
+ if (qualify_attr) {
|
|
|
b2d430 |
+ filter_value = sss_create_internal_fqname(NULL, attr_value, dom->name);
|
|
|
b2d430 |
+ } else {
|
|
|
b2d430 |
+ filter_value = talloc_strdup(NULL, attr_value);
|
|
|
b2d430 |
+ }
|
|
|
b2d430 |
+ if (filter_value == NULL) {
|
|
|
b2d430 |
+ return NULL;
|
|
|
b2d430 |
+ }
|
|
|
b2d430 |
+
|
|
|
b2d430 |
+ filter = talloc_asprintf(mem_ctx, "(&(objectClass=%s)(%s=%s))",
|
|
|
b2d430 |
+ class, attr_name, filter_value);
|
|
|
b2d430 |
+ talloc_free(filter_value);
|
|
|
b2d430 |
+
|
|
|
b2d430 |
+ return filter;
|
|
|
b2d430 |
+}
|
|
|
b2d430 |
+
|
|
|
b2d430 |
+static errno_t sssctl_find_object(TALLOC_CTX *mem_ctx,
|
|
|
b2d430 |
+ struct sss_domain_info *domains,
|
|
|
b2d430 |
+ struct sss_domain_info *domain,
|
|
|
b2d430 |
+ sssctl_basedn_fn basedn_fn,
|
|
|
b2d430 |
+ enum cache_object obj_type,
|
|
|
b2d430 |
+ const char *attr_name,
|
|
|
b2d430 |
+ const char *attr_value,
|
|
|
b2d430 |
+ const char **attrs,
|
|
|
b2d430 |
+ struct sysdb_attrs **_entry,
|
|
|
b2d430 |
+ struct sss_domain_info **_dom)
|
|
|
b2d430 |
+{
|
|
|
b2d430 |
+ TALLOC_CTX *tmp_ctx;
|
|
|
b2d430 |
+ struct sss_domain_info *dom;
|
|
|
b2d430 |
+ struct sysdb_attrs *entry;
|
|
|
b2d430 |
+ struct ldb_dn *base_dn;
|
|
|
b2d430 |
+ bool fqn_provided;
|
|
|
b2d430 |
+ const char *filter;
|
|
|
b2d430 |
+ errno_t ret;
|
|
|
b2d430 |
+
|
|
|
b2d430 |
tmp_ctx = talloc_new(NULL);
|
|
|
b2d430 |
if (tmp_ctx == NULL) {
|
|
|
b2d430 |
DEBUG(SSSDBG_CRIT_FAILURE, "talloc_new() failed\n");
|
|
|
b2d430 |
@@ -349,23 +373,10 @@ static errno_t sssctl_find_object(TALLOC_CTX *mem_ctx,
|
|
|
b2d430 |
goto done;
|
|
|
b2d430 |
}
|
|
|
b2d430 |
|
|
|
b2d430 |
- if (qualify_attr) {
|
|
|
b2d430 |
- filter_value = sss_create_internal_fqname(tmp_ctx,
|
|
|
b2d430 |
- attr_value,
|
|
|
b2d430 |
- dom->name);
|
|
|
b2d430 |
- } else {
|
|
|
b2d430 |
- filter_value = talloc_strdup(tmp_ctx, attr_value);
|
|
|
b2d430 |
- }
|
|
|
b2d430 |
- if (filter_value == NULL) {
|
|
|
b2d430 |
- ret = ENOMEM;
|
|
|
b2d430 |
- goto done;
|
|
|
b2d430 |
- }
|
|
|
b2d430 |
-
|
|
|
b2d430 |
- filter = talloc_asprintf(tmp_ctx, "(&(objectClass=%s)(%s=%s))",
|
|
|
b2d430 |
- class, attr_name, filter_value);
|
|
|
b2d430 |
- talloc_free(filter_value);
|
|
|
b2d430 |
+ filter = sssctl_create_filter(tmp_ctx, dom, obj_type,
|
|
|
b2d430 |
+ attr_name, attr_value);
|
|
|
b2d430 |
if (filter == NULL) {
|
|
|
b2d430 |
- DEBUG(SSSDBG_CRIT_FAILURE, "talloc_asprintf() failed\n");
|
|
|
b2d430 |
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create filter\n");
|
|
|
b2d430 |
ret = ENOMEM;
|
|
|
b2d430 |
goto done;
|
|
|
b2d430 |
}
|
|
|
b2d430 |
--
|
|
|
b2d430 |
2.4.11
|
|
|
b2d430 |
|