Blame SOURCES/0068-sysdb-add-expiration-time-to-autofs-entries.patch

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