From ccf14f490985b96bd6f5871b55c1398024e34af0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= Date: Tue, 13 Aug 2019 12:21:47 +0200 Subject: [PATCH 68/90] sysdb: add expiration time to autofs entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be later used to expire single entries during `get entry by name` operation. Resolves: https://pagure.io/SSSD/sssd/issue/2607 Reviewed-by: Tomáš Halman --- src/db/sysdb_autofs.c | 13 ++++++++++++- src/db/sysdb_autofs.h | 4 +++- src/db/sysdb_upgrade.c | 2 +- src/providers/ldap/sdap_async_autofs.c | 11 ++++++++--- src/tests/sysdb-tests.c | 4 ++-- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/db/sysdb_autofs.c b/src/db/sysdb_autofs.c index 89803a778..c92a51658 100644 --- a/src/db/sysdb_autofs.c +++ b/src/db/sysdb_autofs.c @@ -248,7 +248,9 @@ sysdb_save_autofsentry(struct sss_domain_info *domain, const char *map, const char *key, const char *value, - struct sysdb_attrs *attrs) + struct sysdb_attrs *attrs, + int cache_timeout, + time_t now) { errno_t ret; TALLOC_CTX *tmp_ctx; @@ -307,6 +309,15 @@ sysdb_save_autofsentry(struct sss_domain_info *domain, goto done; } + ret = sysdb_attrs_add_time_t(attrs, SYSDB_CACHE_EXPIRE, + ((cache_timeout) ? + (now + cache_timeout) : 0)); + if (ret) { + DEBUG(SSSDBG_OP_FAILURE, "Could not set sysdb cache expire [%d]: %s\n", + ret, strerror(ret)); + goto done; + } + dn = sysdb_autofsentry_dn(tmp_ctx, domain, map, key, value); if (!dn) { ret = ENOMEM; diff --git a/src/db/sysdb_autofs.h b/src/db/sysdb_autofs.h index d1ef8412e..a3aba726c 100644 --- a/src/db/sysdb_autofs.h +++ b/src/db/sysdb_autofs.h @@ -58,7 +58,9 @@ sysdb_save_autofsentry(struct sss_domain_info *domain, const char *map, const char *key, const char *value, - struct sysdb_attrs *attrs); + struct sysdb_attrs *attrs, + int cache_timeout, + time_t now); errno_t sysdb_del_autofsentry(struct sss_domain_info *domain, const char *entry_dn); diff --git a/src/db/sysdb_upgrade.c b/src/db/sysdb_upgrade.c index f6a481147..392d04b07 100644 --- a/src/db/sysdb_upgrade.c +++ b/src/db/sysdb_upgrade.c @@ -1255,7 +1255,7 @@ int sysdb_upgrade_11(struct sysdb_ctx *sysdb, struct sss_domain_info *domain, ret = sysdb_save_autofsentry(domain, (const char *) val->data, - key, value, NULL); + key, value, NULL, 0, 0); if (ret != EOK) { DEBUG(SSSDBG_OP_FAILURE, "Cannot save autofs entry [%s]-[%s] into map %s\n", diff --git a/src/providers/ldap/sdap_async_autofs.c b/src/providers/ldap/sdap_async_autofs.c index 8d1742ad1..787283872 100644 --- a/src/providers/ldap/sdap_async_autofs.c +++ b/src/providers/ldap/sdap_async_autofs.c @@ -86,7 +86,8 @@ static errno_t add_autofs_entry(struct sss_domain_info *domain, const char *map, struct sdap_options *opts, - struct sysdb_attrs *entry) + struct sysdb_attrs *entry, + time_t now) { const char *key; const char *value; @@ -103,7 +104,8 @@ add_autofs_entry(struct sss_domain_info *domain, return EINVAL; } - return sysdb_save_autofsentry(domain, map, key, value, NULL); + return sysdb_save_autofsentry(domain, map, key, value, NULL, + domain->autofsmap_timeout, now); } static errno_t @@ -119,11 +121,14 @@ save_autofs_entries(struct sss_domain_info *domain, int hret; errno_t ret; struct sysdb_attrs *entry; + time_t now; if (!add_dn_list) { return EOK; } + now = time(NULL); + for (i=0; add_dn_list[i]; i++) { key.type = HASH_KEY_STRING; key.str = (char *) add_dn_list[i]; @@ -144,7 +149,7 @@ save_autofs_entries(struct sss_domain_info *domain, DEBUG(SSSDBG_TRACE_FUNC, "Saving autofs entry [%s]\n", add_dn_list[i]); - ret = add_autofs_entry(domain, map, opts, entry); + ret = add_autofs_entry(domain, map, opts, entry, now); if (ret) { DEBUG(SSSDBG_MINOR_FAILURE, "Cannot save entry [%s] to cache\n", add_dn_list[i]); diff --git a/src/tests/sysdb-tests.c b/src/tests/sysdb-tests.c index 832d60466..23f2bd383 100644 --- a/src/tests/sysdb-tests.c +++ b/src/tests/sysdb-tests.c @@ -6466,7 +6466,7 @@ START_TEST(test_autofs_store_entry_in_map) ret = sysdb_save_autofsentry(test_ctx->domain, autofsmapname, autofskey, - autofsval, NULL); + autofsval, NULL, 0, 0); fail_if(ret != EOK, "Could not save autofs entry %s", autofskey); } @@ -6521,7 +6521,7 @@ START_TEST(test_autofs_key_duplicate) ret = sysdb_save_autofsentry(test_ctx->domain, autofsmapname, autofskey, - autofsval, NULL); + autofsval, NULL, 0, 0); fail_if(ret != EOK, "Could not save autofs entry %s", autofskey); talloc_free(test_ctx); } -- 2.20.1