Blame SOURCES/0002-NSS-Specify-memcache_timeout-0-semantics.patch

ced1f5
From f23a358915cfa27669c019fe0df21cce8851459e Mon Sep 17 00:00:00 2001
ced1f5
From: =?UTF-8?q?Michal=20=C5=BDidek?= <mzidek@redhat.com>
ced1f5
Date: Thu, 19 Oct 2017 16:42:19 +0200
ced1f5
Subject: [PATCH 02/21] NSS: Specify memcache_timeout=0 semantics
ced1f5
MIME-Version: 1.0
ced1f5
Content-Type: text/plain; charset=UTF-8
ced1f5
Content-Transfer-Encoding: 8bit
ced1f5
ced1f5
With this patch the memcache files will not be created when
ced1f5
memcache_timeout is set to zero.
ced1f5
ced1f5
Resolves:
ced1f5
https://pagure.io/SSSD/sssd/issue/3496
ced1f5
ced1f5
Reviewed-by: Sumit Bose <sbose@redhat.com>
ced1f5
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
ced1f5
Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com>
ced1f5
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
ced1f5
(cherry picked from commit ffe29e570a9e885c2f0061c34bb6be2bbd6ab9e4)
ced1f5
---
ced1f5
 src/responder/nss/nsssrv.c          |  6 ++++
ced1f5
 src/tests/intg/test_memory_cache.py | 59 +++++++++++++++++++++++++++++++++++++
ced1f5
 2 files changed, 65 insertions(+)
ced1f5
ced1f5
diff --git a/src/responder/nss/nsssrv.c b/src/responder/nss/nsssrv.c
ced1f5
index 21dd198226da6cf14d7db4941806048662970fed..32bfcd69bbb9b35e9932b70a826c4f99ab6a07f3 100644
ced1f5
--- a/src/responder/nss/nsssrv.c
ced1f5
+++ b/src/responder/nss/nsssrv.c
ced1f5
@@ -277,6 +277,12 @@ static int setup_memcaches(struct nss_ctx *nctx)
ced1f5
         return ret;
ced1f5
     }
ced1f5
 
ced1f5
+    if (memcache_timeout == 0) {
ced1f5
+        DEBUG(SSSDBG_CONF_SETTINGS,
ced1f5
+              "Fast in-memory cache will not be initialized.");
ced1f5
+        return EOK;
ced1f5
+    }
ced1f5
+
ced1f5
     /* TODO: read cache sizes from configuration */
ced1f5
     ret = sss_mmap_cache_init(nctx, "passwd", SSS_MC_PASSWD,
ced1f5
                               SSS_MC_CACHE_ELEMENTS, (time_t)memcache_timeout,
ced1f5
diff --git a/src/tests/intg/test_memory_cache.py b/src/tests/intg/test_memory_cache.py
ced1f5
index c7ba72490174a6ec2257f9d317ac96b35c674779..cac9feb00459957650c5e455db1b2712e17ccd68 100644
ced1f5
--- a/src/tests/intg/test_memory_cache.py
ced1f5
+++ b/src/tests/intg/test_memory_cache.py
ced1f5
@@ -207,6 +207,32 @@ def fqname_case_insensitive_rfc2307(request, ldap_conn):
ced1f5
     return None
ced1f5
 
ced1f5
 
ced1f5
+@pytest.fixture
ced1f5
+def zero_timeout_rfc2307(request, ldap_conn):
ced1f5
+    load_data_to_ldap(request, ldap_conn)
ced1f5
+
ced1f5
+    conf = unindent("""\
ced1f5
+        [sssd]
ced1f5
+        domains             = LDAP
ced1f5
+        services            = nss
ced1f5
+
ced1f5
+        [nss]
ced1f5
+        memcache_timeout = 0
ced1f5
+
ced1f5
+        [domain/LDAP]
ced1f5
+        ldap_auth_disable_tls_never_use_in_production = true
ced1f5
+        ldap_schema         = rfc2307
ced1f5
+        id_provider         = ldap
ced1f5
+        auth_provider       = ldap
ced1f5
+        sudo_provider       = ldap
ced1f5
+        ldap_uri            = {ldap_conn.ds_inst.ldap_url}
ced1f5
+        ldap_search_base    = {ldap_conn.ds_inst.base_dn}
ced1f5
+    """).format(**locals())
ced1f5
+    create_conf_fixture(request, conf)
ced1f5
+    create_sssd_fixture(request)
ced1f5
+    return None
ced1f5
+
ced1f5
+
ced1f5
 def test_getpwnam(ldap_conn, sanity_rfc2307):
ced1f5
     ent.assert_passwd_by_name(
ced1f5
         'user1',
ced1f5
@@ -778,3 +804,36 @@ def test_removed_mc(ldap_conn, sanity_rfc2307):
ced1f5
         grp.getgrnam('group1')
ced1f5
     with pytest.raises(KeyError):
ced1f5
         grp.getgrgid(2001)
ced1f5
+
ced1f5
+
ced1f5
+def test_mc_zero_timeout(ldap_conn, zero_timeout_rfc2307):
ced1f5
+    """
ced1f5
+    Test that the memory cache is not created at all with memcache_timeout=0
ced1f5
+    """
ced1f5
+    # No memory cache files must be created
ced1f5
+    assert len(os.listdir(config.MCACHE_PATH)) == 0
ced1f5
+
ced1f5
+    ent.assert_passwd_by_name(
ced1f5
+        'user1',
ced1f5
+        dict(name='user1', passwd='*', uid=1001, gid=2001,
ced1f5
+             gecos='1001', shell='/bin/bash'))
ced1f5
+    ent.assert_passwd_by_uid(
ced1f5
+        1001,
ced1f5
+        dict(name='user1', passwd='*', uid=1001, gid=2001,
ced1f5
+             gecos='1001', shell='/bin/bash'))
ced1f5
+
ced1f5
+    ent.assert_group_by_name("group1", dict(name="group1", gid=2001))
ced1f5
+    ent.assert_group_by_gid(2001, dict(name="group1", gid=2001))
ced1f5
+    stop_sssd()
ced1f5
+
ced1f5
+    # sssd is stopped; so the memory cache should not be used
ced1f5
+    # in long living clients (py.test in this case)
ced1f5
+    with pytest.raises(KeyError):
ced1f5
+        pwd.getpwnam('user1')
ced1f5
+    with pytest.raises(KeyError):
ced1f5
+        pwd.getpwuid(1001)
ced1f5
+
ced1f5
+    with pytest.raises(KeyError):
ced1f5
+        grp.getgrnam('group1')
ced1f5
+    with pytest.raises(KeyError):
ced1f5
+        grp.getgrgid(2001)
ced1f5
-- 
ced1f5
2.13.5
ced1f5