Compare commits
No commits in common. "c8" and "c9s" have entirely different histories.
|
@ -1 +1,107 @@
|
||||||
SOURCES/sssd-2.9.4.tar.gz
|
sssd-1.2.91.tar.gz
|
||||||
|
/sssd-1.3.0.tar.gz
|
||||||
|
/sssd-1.4.0.tar.gz
|
||||||
|
/sssd-1.4.1.tar.gz
|
||||||
|
/sssd-1.5.0.tar.gz
|
||||||
|
/sssd-1.5.1.tar.gz
|
||||||
|
/sssd-1.5.2.tar.gz
|
||||||
|
/sssd-1.5.3.tar.gz
|
||||||
|
/sssd-1.5.4.tar.gz
|
||||||
|
/sssd-1.5.5.tar.gz
|
||||||
|
/sssd-1.5.6.tar.gz
|
||||||
|
/sssd-1.5.6.1.tar.gz
|
||||||
|
/sssd-1.5.7.tar.gz
|
||||||
|
/sssd-1.5.8.tar.gz
|
||||||
|
/sssd-1.5.9.tar.gz
|
||||||
|
/sssd-1.5.10.tar.gz
|
||||||
|
/sssd-1.5.11.tar.gz
|
||||||
|
/sssd-1.6.0.tar.gz
|
||||||
|
/sssd-1.6.1.tar.gz
|
||||||
|
/sssd-1.6.2.tar.gz
|
||||||
|
/sssd-1.6.3.tar.gz
|
||||||
|
/sssd-1.6.4.tar.gz
|
||||||
|
/sssd-1.7.0.tar.gz
|
||||||
|
/sssd-1.8.0beta1.tar.gz
|
||||||
|
/sssd-1.8.0beta2.tar.gz
|
||||||
|
/sssd-1.8.0beta3.tar.gz
|
||||||
|
/sssd-1.8.0.tar.gz
|
||||||
|
/sssd-1.8.1.tar.gz
|
||||||
|
/sssd-1.8.2.tar.gz
|
||||||
|
/sssd-1.8.3.tar.gz
|
||||||
|
/sssd-1.9.0beta1.tar.gz
|
||||||
|
/sssd-1.9.0beta2.tar.gz
|
||||||
|
/sssd-1.9.0beta3.tar.gz
|
||||||
|
/sssd-1.9.0beta4.tar.gz
|
||||||
|
/sssd-1.9.0beta5.tar.gz
|
||||||
|
/sssd-1.9.0beta6.tar.gz
|
||||||
|
/sssd-1.9.0beta7.tar.gz
|
||||||
|
/sssd-1.9.0rc1.tar.gz
|
||||||
|
/sssd-1.9.0.tar.gz
|
||||||
|
/sssd-1.9.1.tar.gz
|
||||||
|
/sssd-1.9.2.tar.gz
|
||||||
|
/sssd-1.9.3.tar.gz
|
||||||
|
/sssd-1.9.4.tar.gz
|
||||||
|
/sssd-1.10.0alpha1.tar.gz
|
||||||
|
/sssd-1.10.0beta1.tar.gz
|
||||||
|
/sssd-1.10.0beta2.tar.gz
|
||||||
|
/sssd-1.10.0.tar.gz
|
||||||
|
/sssd-1.10.1.tar.gz
|
||||||
|
/sssd-1.11.0beta2.tar.gz
|
||||||
|
/sssd-1.11.0.tar.gz
|
||||||
|
/sssd-1.11.1.tar.gz
|
||||||
|
/sssd-1.11.2.tar.gz
|
||||||
|
/sssd-1.11.3.tar.gz
|
||||||
|
/sssd-1.11.4.tar.gz
|
||||||
|
/sssd-1.11.5.tar.gz
|
||||||
|
/sssd-1.11.5.1.tar.gz
|
||||||
|
/sssd-1.12.0beta1.tar.gz
|
||||||
|
/sssd-1.12.0beta2.tar.gz
|
||||||
|
/sssd-1.12.0.tar.gz
|
||||||
|
/sssd-1.12.1.tar.gz
|
||||||
|
/sssd-1.12.2.tar.gz
|
||||||
|
/sssd-1.12.3.tar.gz
|
||||||
|
/sssd-1.12.4.tar.gz
|
||||||
|
/sssd-1.12.5.tar.gz
|
||||||
|
/sssd-1.13.0alpha.tar.gz
|
||||||
|
/sssd-1.13.0.tar.gz
|
||||||
|
/sssd-1.13.1.tar.gz
|
||||||
|
/sssd-1.13.2.tar.gz
|
||||||
|
/sssd-1.13.3.tar.gz
|
||||||
|
/sssd-1.13.4.tar.gz
|
||||||
|
/sssd-1.14.0alpha.tar.gz
|
||||||
|
/sssd-1.14.0beta1.tar.gz
|
||||||
|
/sssd-1.14.0.tar.gz
|
||||||
|
/sssd-1.14.1.tar.gz
|
||||||
|
/sssd-1.14.2.tar.gz
|
||||||
|
/sssd-1.15.0.tar.gz
|
||||||
|
/sssd-1.15.1.tar.gz
|
||||||
|
/sssd-1.15.2.tar.gz
|
||||||
|
/sssd-1.15.3.tar.gz
|
||||||
|
/sssd-1.16.0.tar.gz
|
||||||
|
/sssd-1.16.1.tar.gz
|
||||||
|
/sssd-1.16.2.tar.gz
|
||||||
|
/sssd-2.0.0.tar.gz
|
||||||
|
/sssd-2.1.0.tar.gz
|
||||||
|
/sssd-2.2.0.tar.gz
|
||||||
|
/sssd-2.2.1.tar.gz
|
||||||
|
/sssd-2.2.2.tar.gz
|
||||||
|
/sssd-2.2.3.tar.gz
|
||||||
|
/sssd-2.3.0.tar.gz
|
||||||
|
/sssd-2.3.1.tar.gz
|
||||||
|
/sssd-2.4.0.tar.gz
|
||||||
|
/sssd-2.4.1.tar.gz
|
||||||
|
/sssd-2.4.2.tar.gz
|
||||||
|
/sssd-2.5.1.tar.gz
|
||||||
|
/sssd-2.5.2.tar.gz
|
||||||
|
/sssd-2.6.1.tar.gz
|
||||||
|
/sssd-2.6.2.tar.gz
|
||||||
|
/sssd-2.7.0.tar.gz
|
||||||
|
/sssd-2.7.1.tar.gz
|
||||||
|
/sssd-2.7.3.tar.gz
|
||||||
|
/sssd-2.8.1.tar.gz
|
||||||
|
/sssd-2.8.2.tar.gz
|
||||||
|
/sssd-2.9.0.tar.gz
|
||||||
|
/sssd-2.9.1.tar.gz
|
||||||
|
/sssd-2.9.2.tar.gz
|
||||||
|
/sssd-2.9.3.tar.gz
|
||||||
|
/sssd-2.9.4.tar.gz
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
574f6cec9ee12dd943e4305286845343ab7bb891 SOURCES/sssd-2.9.4.tar.gz
|
574f6cec9ee12dd943e4305286845343ab7bb891 sssd-2.9.4.tar.gz
|
||||||
|
|
|
@ -1,218 +0,0 @@
|
||||||
From e1bfbc2493c4194988acc3b2413df3dde0735ae3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sumit Bose <sbose@redhat.com>
|
|
||||||
Date: Wed, 8 Nov 2023 14:50:24 +0100
|
|
||||||
Subject: [PATCH] ad-gpo: use hash to store intermediate results
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
Currently after the evaluation of a single GPO file the intermediate
|
|
||||||
results are stored in the cache and this cache entry is updated until
|
|
||||||
all applicable GPO files are evaluated. Finally the data in the cache is
|
|
||||||
used to make the decision of access is granted or rejected.
|
|
||||||
|
|
||||||
If there are two or more access-control request running in parallel one
|
|
||||||
request might overwrite the cache object with intermediate data while
|
|
||||||
another request reads the cached data for the access decision and as a
|
|
||||||
result will do this decision based on intermediate data.
|
|
||||||
|
|
||||||
To avoid this the intermediate results are not stored in the cache
|
|
||||||
anymore but in hash tables which are specific to the request. Only the
|
|
||||||
final result is written to the cache to have it available for offline
|
|
||||||
authentication.
|
|
||||||
|
|
||||||
Reviewed-by: Alexey Tikhonov <atikhono@redhat.com>
|
|
||||||
Reviewed-by: Tomáš Halman <thalman@redhat.com>
|
|
||||||
(cherry picked from commit d7db7971682da2dbf7642ac94940d6b0577ec35a)
|
|
||||||
---
|
|
||||||
src/providers/ad/ad_gpo.c | 116 +++++++++++++++++++++++++++++++++-----
|
|
||||||
1 file changed, 102 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/providers/ad/ad_gpo.c b/src/providers/ad/ad_gpo.c
|
|
||||||
index 3d1ad39c7..b879b0a08 100644
|
|
||||||
--- a/src/providers/ad/ad_gpo.c
|
|
||||||
+++ b/src/providers/ad/ad_gpo.c
|
|
||||||
@@ -1431,6 +1431,33 @@ ad_gpo_extract_policy_setting(TALLOC_CTX *mem_ctx,
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static errno_t
|
|
||||||
+add_result_to_hash(hash_table_t *hash, const char *key, char *value)
|
|
||||||
+{
|
|
||||||
+ int hret;
|
|
||||||
+ hash_key_t k;
|
|
||||||
+ hash_value_t v;
|
|
||||||
+
|
|
||||||
+ if (hash == NULL || key == NULL || value == NULL) {
|
|
||||||
+ return EINVAL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ k.type = HASH_KEY_CONST_STRING;
|
|
||||||
+ k.c_str = key;
|
|
||||||
+
|
|
||||||
+ v.type = HASH_VALUE_PTR;
|
|
||||||
+ v.ptr = value;
|
|
||||||
+
|
|
||||||
+ hret = hash_enter(hash, &k, &v);
|
|
||||||
+ if (hret != HASH_SUCCESS) {
|
|
||||||
+ DEBUG(SSSDBG_OP_FAILURE, "Failed to add [%s][%s] to hash: [%s].\n",
|
|
||||||
+ key, value, hash_error_string(hret));
|
|
||||||
+ return EIO;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return EOK;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* This function parses the cse-specific (GP_EXT_GUID_SECURITY) filename,
|
|
||||||
* and stores the allow_key and deny_key of all of the gpo_map_types present
|
|
||||||
@@ -1438,6 +1465,7 @@ ad_gpo_extract_policy_setting(TALLOC_CTX *mem_ctx,
|
|
||||||
*/
|
|
||||||
static errno_t
|
|
||||||
ad_gpo_store_policy_settings(struct sss_domain_info *domain,
|
|
||||||
+ hash_table_t *allow_maps, hash_table_t *deny_maps,
|
|
||||||
const char *filename)
|
|
||||||
{
|
|
||||||
struct ini_cfgfile *file_ctx = NULL;
|
|
||||||
@@ -1571,14 +1599,14 @@ ad_gpo_store_policy_settings(struct sss_domain_info *domain,
|
|
||||||
goto done;
|
|
||||||
} else if (ret != ENOENT) {
|
|
||||||
const char *value = allow_value ? allow_value : empty_val;
|
|
||||||
- ret = sysdb_gpo_store_gpo_result_setting(domain,
|
|
||||||
- allow_key,
|
|
||||||
- value);
|
|
||||||
+ ret = add_result_to_hash(allow_maps, allow_key,
|
|
||||||
+ talloc_strdup(allow_maps, value));
|
|
||||||
if (ret != EOK) {
|
|
||||||
- DEBUG(SSSDBG_CRIT_FAILURE,
|
|
||||||
- "sysdb_gpo_store_gpo_result_setting failed for key:"
|
|
||||||
- "'%s' value:'%s' [%d][%s]\n", allow_key, allow_value,
|
|
||||||
- ret, sss_strerror(ret));
|
|
||||||
+ DEBUG(SSSDBG_CRIT_FAILURE, "Failed to add key: [%s] "
|
|
||||||
+ "value: [%s] to allow maps "
|
|
||||||
+ "[%d][%s].\n",
|
|
||||||
+ allow_key, value, ret,
|
|
||||||
+ sss_strerror(ret));
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1598,14 +1626,14 @@ ad_gpo_store_policy_settings(struct sss_domain_info *domain,
|
|
||||||
goto done;
|
|
||||||
} else if (ret != ENOENT) {
|
|
||||||
const char *value = deny_value ? deny_value : empty_val;
|
|
||||||
- ret = sysdb_gpo_store_gpo_result_setting(domain,
|
|
||||||
- deny_key,
|
|
||||||
- value);
|
|
||||||
+ ret = add_result_to_hash(deny_maps, deny_key,
|
|
||||||
+ talloc_strdup(deny_maps, value));
|
|
||||||
if (ret != EOK) {
|
|
||||||
- DEBUG(SSSDBG_CRIT_FAILURE,
|
|
||||||
- "sysdb_gpo_store_gpo_result_setting failed for key:"
|
|
||||||
- "'%s' value:'%s' [%d][%s]\n", deny_key, deny_value,
|
|
||||||
- ret, sss_strerror(ret));
|
|
||||||
+ DEBUG(SSSDBG_CRIT_FAILURE, "Failed to add key: [%s] "
|
|
||||||
+ "value: [%s] to deny maps "
|
|
||||||
+ "[%d][%s].\n",
|
|
||||||
+ deny_key, value, ret,
|
|
||||||
+ sss_strerror(ret));
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1902,6 +1930,8 @@ struct ad_gpo_access_state {
|
|
||||||
int num_cse_filtered_gpos;
|
|
||||||
int cse_gpo_index;
|
|
||||||
const char *ad_domain;
|
|
||||||
+ hash_table_t *allow_maps;
|
|
||||||
+ hash_table_t *deny_maps;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void ad_gpo_connect_done(struct tevent_req *subreq);
|
|
||||||
@@ -2023,6 +2053,19 @@ ad_gpo_access_send(TALLOC_CTX *mem_ctx,
|
|
||||||
goto immediately;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ ret = sss_hash_create(state, 0, &state->allow_maps);
|
|
||||||
+ if (ret != EOK) {
|
|
||||||
+ DEBUG(SSSDBG_FATAL_FAILURE, "Could not create allow maps "
|
|
||||||
+ "hash table [%d]: %s\n", ret, sss_strerror(ret));
|
|
||||||
+ goto immediately;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ret = sss_hash_create(state, 0, &state->deny_maps);
|
|
||||||
+ if (ret != EOK) {
|
|
||||||
+ DEBUG(SSSDBG_FATAL_FAILURE, "Could not create deny maps "
|
|
||||||
+ "hash table [%d]: %s\n", ret, sss_strerror(ret));
|
|
||||||
+ goto immediately;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
subreq = sdap_id_op_connect_send(state->sdap_op, state, &ret);
|
|
||||||
if (subreq == NULL) {
|
|
||||||
@@ -2713,6 +2756,43 @@ ad_gpo_cse_step(struct tevent_req *req)
|
|
||||||
return EAGAIN;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static errno_t
|
|
||||||
+store_hash_maps_in_cache(struct sss_domain_info *domain,
|
|
||||||
+ hash_table_t *allow_maps, hash_table_t *deny_maps)
|
|
||||||
+{
|
|
||||||
+ int ret;
|
|
||||||
+ struct hash_iter_context_t *iter;
|
|
||||||
+ hash_entry_t *entry;
|
|
||||||
+ size_t c;
|
|
||||||
+ hash_table_t *hash_list[] = { allow_maps, deny_maps, NULL};
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ for (c = 0; hash_list[c] != NULL; c++) {
|
|
||||||
+ iter = new_hash_iter_context(hash_list[c]);
|
|
||||||
+ if (iter == NULL) {
|
|
||||||
+ DEBUG(SSSDBG_OP_FAILURE, "Failed to create hash iterator.\n");
|
|
||||||
+ return EINVAL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ while ((entry = iter->next(iter)) != NULL) {
|
|
||||||
+ ret = sysdb_gpo_store_gpo_result_setting(domain,
|
|
||||||
+ entry->key.c_str,
|
|
||||||
+ entry->value.ptr);
|
|
||||||
+ if (ret != EOK) {
|
|
||||||
+ free(iter);
|
|
||||||
+ DEBUG(SSSDBG_OP_FAILURE,
|
|
||||||
+ "sysdb_gpo_store_gpo_result_setting failed for key:"
|
|
||||||
+ "[%s] value:[%s] [%d][%s]\n", entry->key.c_str,
|
|
||||||
+ (char *) entry->value.ptr, ret, sss_strerror(ret));
|
|
||||||
+ return ret;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ talloc_free(iter);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return EOK;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* This cse-specific function (GP_EXT_GUID_SECURITY) increments the
|
|
||||||
* cse_gpo_index until the policy settings for all applicable GPOs have been
|
|
||||||
@@ -2754,6 +2834,7 @@ ad_gpo_cse_done(struct tevent_req *subreq)
|
|
||||||
* (as part of the GPO Result object in the sysdb cache).
|
|
||||||
*/
|
|
||||||
ret = ad_gpo_store_policy_settings(state->host_domain,
|
|
||||||
+ state->allow_maps, state->deny_maps,
|
|
||||||
cse_filtered_gpo->policy_filename);
|
|
||||||
if (ret != EOK && ret != ENOENT) {
|
|
||||||
DEBUG(SSSDBG_OP_FAILURE,
|
|
||||||
@@ -2767,6 +2848,13 @@ ad_gpo_cse_done(struct tevent_req *subreq)
|
|
||||||
|
|
||||||
if (ret == EOK) {
|
|
||||||
/* ret is EOK only after all GPO policy files have been downloaded */
|
|
||||||
+ ret = store_hash_maps_in_cache(state->host_domain,
|
|
||||||
+ state->allow_maps, state->deny_maps);
|
|
||||||
+ if (ret != EOK) {
|
|
||||||
+ DEBUG(SSSDBG_OP_FAILURE, "Failed to store evaluated GPO maps "
|
|
||||||
+ "[%d][%s].\n", ret, sss_strerror(ret));
|
|
||||||
+ goto done;
|
|
||||||
+ }
|
|
||||||
ret = ad_gpo_perform_hbac_processing(state,
|
|
||||||
state->gpo_mode,
|
|
||||||
state->gpo_map_type,
|
|
||||||
--
|
|
||||||
2.44.0
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
# recipients: sssd-qe, ftrivino
|
||||||
|
--- !Policy
|
||||||
|
product_versions:
|
||||||
|
- rhel-9
|
||||||
|
decision_context: osci_compose_gate
|
||||||
|
rules:
|
||||||
|
- !PassingTestCaseRule {test_case_name: idm-ci.brew-build.tier1.functional}
|
|
@ -0,0 +1 @@
|
||||||
|
SHA512 (sssd-2.9.4.tar.gz) = 9546cf074628f32137b16ca0c763988785271124244b645d1e786762e8578f10d983793a29bffcc004b064452fe8d465476a3041688d2f3c11c2751fb5bec3e2
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue