|
|
1bb595 |
From 80e7163b7bf512a45e2fa31494f3bdff9e9e2dce Mon Sep 17 00:00:00 2001
|
|
|
1bb595 |
From: =?UTF-8?q?Michal=20=C5=BDidek?= <mzidek@redhat.com>
|
|
|
1bb595 |
Date: Wed, 4 Mar 2020 16:26:18 +0100
|
|
|
1bb595 |
Subject: [PATCH 29/35] NSS: make memcache size configurable
|
|
|
1bb595 |
|
|
|
1bb595 |
Added options to configure memcache size:
|
|
|
1bb595 |
memcache_size_passwd
|
|
|
1bb595 |
memcache_size_group
|
|
|
1bb595 |
memcache_size_initgroups
|
|
|
1bb595 |
|
|
|
1bb595 |
Related:
|
|
|
1bb595 |
https://github.com/SSSD/sssd/issues/4578
|
|
|
1bb595 |
|
|
|
1bb595 |
Reviewed-by: Sumit Bose <sbose@redhat.com>
|
|
|
1bb595 |
---
|
|
|
1bb595 |
src/confdb/confdb.h | 3 +
|
|
|
1bb595 |
src/config/SSSDConfig/sssdoptions.py | 3 +
|
|
|
1bb595 |
src/config/cfg_rules.ini | 3 +
|
|
|
1bb595 |
src/man/sssd.conf.5.xml | 78 +++++++++
|
|
|
1bb595 |
src/responder/nss/nsssrv.c | 104 ++++++++----
|
|
|
1bb595 |
src/tests/intg/test_memory_cache.py | 236 +++++++++++++++++++++++++++
|
|
|
1bb595 |
6 files changed, 398 insertions(+), 29 deletions(-)
|
|
|
1bb595 |
|
|
|
1bb595 |
diff --git a/src/confdb/confdb.h b/src/confdb/confdb.h
|
|
|
1bb595 |
index a5d35fd70..c96896da5 100644
|
|
|
1bb595 |
--- a/src/confdb/confdb.h
|
|
|
1bb595 |
+++ b/src/confdb/confdb.h
|
|
|
1bb595 |
@@ -115,6 +115,9 @@
|
|
|
1bb595 |
#define CONFDB_NSS_SHELL_FALLBACK "shell_fallback"
|
|
|
1bb595 |
#define CONFDB_NSS_DEFAULT_SHELL "default_shell"
|
|
|
1bb595 |
#define CONFDB_MEMCACHE_TIMEOUT "memcache_timeout"
|
|
|
1bb595 |
+#define CONFDB_NSS_MEMCACHE_SIZE_PASSWD "memcache_size_passwd"
|
|
|
1bb595 |
+#define CONFDB_NSS_MEMCACHE_SIZE_GROUP "memcache_size_group"
|
|
|
1bb595 |
+#define CONFDB_NSS_MEMCACHE_SIZE_INITGROUPS "memcache_size_initgroups"
|
|
|
1bb595 |
#define CONFDB_NSS_HOMEDIR_SUBSTRING "homedir_substring"
|
|
|
1bb595 |
#define CONFDB_DEFAULT_HOMEDIR_SUBSTRING "/home"
|
|
|
1bb595 |
|
|
|
1bb595 |
diff --git a/src/config/SSSDConfig/sssdoptions.py b/src/config/SSSDConfig/sssdoptions.py
|
|
|
1bb595 |
index 9c071f70a..16d85cfa3 100644
|
|
|
1bb595 |
--- a/src/config/SSSDConfig/sssdoptions.py
|
|
|
1bb595 |
+++ b/src/config/SSSDConfig/sssdoptions.py
|
|
|
1bb595 |
@@ -72,6 +72,9 @@ class SSSDOptions(object):
|
|
|
1bb595 |
'shell_fallback': _('If a shell stored in central directory is allowed but not available, use this fallback'),
|
|
|
1bb595 |
'default_shell': _('Shell to use if the provider does not list one'),
|
|
|
1bb595 |
'memcache_timeout': _('How long will be in-memory cache records valid'),
|
|
|
1bb595 |
+ 'memcache_size_passwd': _('Number of slots in fast in-memory cache for passwd requests'),
|
|
|
1bb595 |
+ 'memcache_size_group': _('Number of slots in fast in-memory cache for group requests'),
|
|
|
1bb595 |
+ 'memcache_size_initgroups': _('Number of slots in fast in-memory cache for initgroups requests'),
|
|
|
1bb595 |
'homedir_substring': _('The value of this option will be used in the expansion of the override_homedir option '
|
|
|
1bb595 |
'if the template contains the format string %H.'),
|
|
|
1bb595 |
'get_domains_timeout': _('Specifies time in seconds for which the list of subdomains will be considered '
|
|
|
1bb595 |
diff --git a/src/config/cfg_rules.ini b/src/config/cfg_rules.ini
|
|
|
1bb595 |
index 1a7e2c5cd..2874ea048 100644
|
|
|
1bb595 |
--- a/src/config/cfg_rules.ini
|
|
|
1bb595 |
+++ b/src/config/cfg_rules.ini
|
|
|
1bb595 |
@@ -92,6 +92,9 @@ option = shell_fallback
|
|
|
1bb595 |
option = default_shell
|
|
|
1bb595 |
option = get_domains_timeout
|
|
|
1bb595 |
option = memcache_timeout
|
|
|
1bb595 |
+option = memcache_size_passwd
|
|
|
1bb595 |
+option = memcache_size_group
|
|
|
1bb595 |
+option = memcache_size_initgroups
|
|
|
1bb595 |
|
|
|
1bb595 |
[rule/allowed_pam_options]
|
|
|
1bb595 |
validator = ini_allowed_options
|
|
|
1bb595 |
diff --git a/src/man/sssd.conf.5.xml b/src/man/sssd.conf.5.xml
|
|
|
1bb595 |
index 9a9679a4b..9bc2e26e5 100644
|
|
|
1bb595 |
--- a/src/man/sssd.conf.5.xml
|
|
|
1bb595 |
+++ b/src/man/sssd.conf.5.xml
|
|
|
1bb595 |
@@ -1100,6 +1100,84 @@ fallback_homedir = /home/%u
|
|
|
1bb595 |
</para>
|
|
|
1bb595 |
</listitem>
|
|
|
1bb595 |
</varlistentry>
|
|
|
1bb595 |
+ <varlistentry>
|
|
|
1bb595 |
+ <term>memcache_size_passwd (integer)</term>
|
|
|
1bb595 |
+ <listitem>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ Number of slots allocated inside fast in-memory
|
|
|
1bb595 |
+ cache for passwd requests. Note that one entry
|
|
|
1bb595 |
+ in fast in-memory cache can occupy more than one slot.
|
|
|
1bb595 |
+ Setting the size to 0 will disable the passwd in-memory
|
|
|
1bb595 |
+ cache.
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ Default: 200000
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ WARNING: Disabled or too small in-memory cache can
|
|
|
1bb595 |
+ have significant negative impact on SSSD's
|
|
|
1bb595 |
+ performance.
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ NOTE: If the environment variable
|
|
|
1bb595 |
+ SSS_NSS_USE_MEMCACHE is set to "NO", client
|
|
|
1bb595 |
+ applications will not use the fast in-memory
|
|
|
1bb595 |
+ cache.
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ </listitem>
|
|
|
1bb595 |
+ </varlistentry>
|
|
|
1bb595 |
+ <varlistentry>
|
|
|
1bb595 |
+ <term>memcache_size_group (integer)</term>
|
|
|
1bb595 |
+ <listitem>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ Number of slots allocated inside fast in-memory
|
|
|
1bb595 |
+ cache for group requests. Note that one entry
|
|
|
1bb595 |
+ in fast in-memory cache can occupy more than one
|
|
|
1bb595 |
+ slot. Setting the size to 0 will disable the group
|
|
|
1bb595 |
+ in-memory cache.
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ Default: 150000
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ WARNING: Disabled or too small in-memory cache can
|
|
|
1bb595 |
+ have significant negative impact on SSSD's
|
|
|
1bb595 |
+ performance.
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ NOTE: If the environment variable
|
|
|
1bb595 |
+ SSS_NSS_USE_MEMCACHE is set to "NO", client
|
|
|
1bb595 |
+ applications will not use the fast in-memory
|
|
|
1bb595 |
+ cache.
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ </listitem>
|
|
|
1bb595 |
+ </varlistentry>
|
|
|
1bb595 |
+ <varlistentry>
|
|
|
1bb595 |
+ <term>memcache_size_initgroups (integer)</term>
|
|
|
1bb595 |
+ <listitem>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ Number of slots allocated inside fast in-memory
|
|
|
1bb595 |
+ cache for initgroups requests. Note that one entry
|
|
|
1bb595 |
+ in fast in-memory cache can occupy more than one
|
|
|
1bb595 |
+ slot. Setting the size to 0 will disable the
|
|
|
1bb595 |
+ initgroups in-memory cache.
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ Default: 250000
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ WARNING: Disabled or too small in-memory cache can
|
|
|
1bb595 |
+ have significant negative impact on SSSD's
|
|
|
1bb595 |
+ performance.
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ <para>
|
|
|
1bb595 |
+ NOTE: If the environment variable
|
|
|
1bb595 |
+ SSS_NSS_USE_MEMCACHE is set to "NO", client
|
|
|
1bb595 |
+ applications will not use the fast in-memory
|
|
|
1bb595 |
+ cache.
|
|
|
1bb595 |
+ </para>
|
|
|
1bb595 |
+ </listitem>
|
|
|
1bb595 |
+ </varlistentry>
|
|
|
1bb595 |
<varlistentry>
|
|
|
1bb595 |
<term>user_attributes (string)</term>
|
|
|
1bb595 |
<listitem>
|
|
|
1bb595 |
diff --git a/src/responder/nss/nsssrv.c b/src/responder/nss/nsssrv.c
|
|
|
1bb595 |
index 21d93ae77..0a201d3ae 100644
|
|
|
1bb595 |
--- a/src/responder/nss/nsssrv.c
|
|
|
1bb595 |
+++ b/src/responder/nss/nsssrv.c
|
|
|
1bb595 |
@@ -209,13 +209,16 @@ done:
|
|
|
1bb595 |
|
|
|
1bb595 |
static int setup_memcaches(struct nss_ctx *nctx)
|
|
|
1bb595 |
{
|
|
|
1bb595 |
- /* TODO: read cache sizes from configuration */
|
|
|
1bb595 |
+ /* Default memcache sizes */
|
|
|
1bb595 |
static const size_t SSS_MC_CACHE_PASSWD_SLOTS = 200000; /* 8mb */
|
|
|
1bb595 |
static const size_t SSS_MC_CACHE_GROUP_SLOTS = 150000; /* 6mb */
|
|
|
1bb595 |
static const size_t SSS_MC_CACHE_INITGROUP_SLOTS = 250000; /* 10mb */
|
|
|
1bb595 |
|
|
|
1bb595 |
int ret;
|
|
|
1bb595 |
int memcache_timeout;
|
|
|
1bb595 |
+ int mc_size_passwd;
|
|
|
1bb595 |
+ int mc_size_group;
|
|
|
1bb595 |
+ int mc_size_initgroups;
|
|
|
1bb595 |
|
|
|
1bb595 |
/* Remove the CLEAR_MC_FLAG file if exists. */
|
|
|
1bb595 |
ret = unlink(SSS_NSS_MCACHE_DIR"/"CLEAR_MC_FLAG);
|
|
|
1bb595 |
@@ -243,34 +246,77 @@ static int setup_memcaches(struct nss_ctx *nctx)
|
|
|
1bb595 |
return EOK;
|
|
|
1bb595 |
}
|
|
|
1bb595 |
|
|
|
1bb595 |
- ret = sss_mmap_cache_init(nctx, "passwd",
|
|
|
1bb595 |
- nctx->mc_uid, nctx->mc_gid,
|
|
|
1bb595 |
- SSS_MC_PASSWD,
|
|
|
1bb595 |
- SSS_MC_CACHE_PASSWD_SLOTS,
|
|
|
1bb595 |
- (time_t)memcache_timeout,
|
|
|
1bb595 |
- &nctx->pwd_mc_ctx);
|
|
|
1bb595 |
- if (ret) {
|
|
|
1bb595 |
- DEBUG(SSSDBG_CRIT_FAILURE, "passwd mmap cache is DISABLED\n");
|
|
|
1bb595 |
- }
|
|
|
1bb595 |
-
|
|
|
1bb595 |
- ret = sss_mmap_cache_init(nctx, "group",
|
|
|
1bb595 |
- nctx->mc_uid, nctx->mc_gid,
|
|
|
1bb595 |
- SSS_MC_GROUP,
|
|
|
1bb595 |
- SSS_MC_CACHE_GROUP_SLOTS,
|
|
|
1bb595 |
- (time_t)memcache_timeout,
|
|
|
1bb595 |
- &nctx->grp_mc_ctx);
|
|
|
1bb595 |
- if (ret) {
|
|
|
1bb595 |
- DEBUG(SSSDBG_CRIT_FAILURE, "group mmap cache is DISABLED\n");
|
|
|
1bb595 |
- }
|
|
|
1bb595 |
-
|
|
|
1bb595 |
- ret = sss_mmap_cache_init(nctx, "initgroups",
|
|
|
1bb595 |
- nctx->mc_uid, nctx->mc_gid,
|
|
|
1bb595 |
- SSS_MC_INITGROUPS,
|
|
|
1bb595 |
- SSS_MC_CACHE_INITGROUP_SLOTS,
|
|
|
1bb595 |
- (time_t)memcache_timeout,
|
|
|
1bb595 |
- &nctx->initgr_mc_ctx);
|
|
|
1bb595 |
- if (ret) {
|
|
|
1bb595 |
- DEBUG(SSSDBG_CRIT_FAILURE, "initgroups mmap cache is DISABLED\n");
|
|
|
1bb595 |
+ /* Get all memcache sizes from confdb (pwd, grp, initgr) */
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ ret = confdb_get_int(nctx->rctx->cdb,
|
|
|
1bb595 |
+ CONFDB_NSS_CONF_ENTRY,
|
|
|
1bb595 |
+ CONFDB_NSS_MEMCACHE_SIZE_PASSWD,
|
|
|
1bb595 |
+ SSS_MC_CACHE_PASSWD_SLOTS,
|
|
|
1bb595 |
+ &mc_size_passwd);
|
|
|
1bb595 |
+ if (ret != EOK) {
|
|
|
1bb595 |
+ DEBUG(SSSDBG_FATAL_FAILURE,
|
|
|
1bb595 |
+ "Failed to get 'memcache_size_passwd' option from confdb.\n");
|
|
|
1bb595 |
+ return ret;
|
|
|
1bb595 |
+ }
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ ret = confdb_get_int(nctx->rctx->cdb,
|
|
|
1bb595 |
+ CONFDB_NSS_CONF_ENTRY,
|
|
|
1bb595 |
+ CONFDB_NSS_MEMCACHE_SIZE_GROUP,
|
|
|
1bb595 |
+ SSS_MC_CACHE_GROUP_SLOTS,
|
|
|
1bb595 |
+ &mc_size_group);
|
|
|
1bb595 |
+ if (ret != EOK) {
|
|
|
1bb595 |
+ DEBUG(SSSDBG_FATAL_FAILURE,
|
|
|
1bb595 |
+ "Failed to get 'memcache_size_group' option from confdb.\n");
|
|
|
1bb595 |
+ return ret;
|
|
|
1bb595 |
+ }
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ ret = confdb_get_int(nctx->rctx->cdb,
|
|
|
1bb595 |
+ CONFDB_NSS_CONF_ENTRY,
|
|
|
1bb595 |
+ CONFDB_NSS_MEMCACHE_SIZE_INITGROUPS,
|
|
|
1bb595 |
+ SSS_MC_CACHE_INITGROUP_SLOTS,
|
|
|
1bb595 |
+ &mc_size_initgroups);
|
|
|
1bb595 |
+ if (ret != EOK) {
|
|
|
1bb595 |
+ DEBUG(SSSDBG_FATAL_FAILURE,
|
|
|
1bb595 |
+ "Failed to get 'memcache_size_nitgroups' option from confdb.\n");
|
|
|
1bb595 |
+ return ret;
|
|
|
1bb595 |
+ }
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ /* Initialize the fast in-memory caches if they were not disabled */
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ if (mc_size_passwd != 0) {
|
|
|
1bb595 |
+ ret = sss_mmap_cache_init(nctx, "passwd",
|
|
|
1bb595 |
+ nctx->mc_uid, nctx->mc_gid,
|
|
|
1bb595 |
+ SSS_MC_PASSWD,
|
|
|
1bb595 |
+ mc_size_passwd,
|
|
|
1bb595 |
+ (time_t)memcache_timeout,
|
|
|
1bb595 |
+ &nctx->pwd_mc_ctx);
|
|
|
1bb595 |
+ if (ret) {
|
|
|
1bb595 |
+ DEBUG(SSSDBG_CRIT_FAILURE, "passwd mmap cache is DISABLED\n");
|
|
|
1bb595 |
+ }
|
|
|
1bb595 |
+ }
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ if (mc_size_group != 0) {
|
|
|
1bb595 |
+ ret = sss_mmap_cache_init(nctx, "group",
|
|
|
1bb595 |
+ nctx->mc_uid, nctx->mc_gid,
|
|
|
1bb595 |
+ SSS_MC_GROUP,
|
|
|
1bb595 |
+ mc_size_group,
|
|
|
1bb595 |
+ (time_t)memcache_timeout,
|
|
|
1bb595 |
+ &nctx->grp_mc_ctx);
|
|
|
1bb595 |
+ if (ret) {
|
|
|
1bb595 |
+ DEBUG(SSSDBG_CRIT_FAILURE, "group mmap cache is DISABLED\n");
|
|
|
1bb595 |
+ }
|
|
|
1bb595 |
+ }
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ if (mc_size_initgroups != 0) {
|
|
|
1bb595 |
+ ret = sss_mmap_cache_init(nctx, "initgroups",
|
|
|
1bb595 |
+ nctx->mc_uid, nctx->mc_gid,
|
|
|
1bb595 |
+ SSS_MC_INITGROUPS,
|
|
|
1bb595 |
+ mc_size_initgroups,
|
|
|
1bb595 |
+ (time_t)memcache_timeout,
|
|
|
1bb595 |
+ &nctx->initgr_mc_ctx);
|
|
|
1bb595 |
+ if (ret) {
|
|
|
1bb595 |
+ DEBUG(SSSDBG_CRIT_FAILURE, "initgroups mmap cache is DISABLED\n");
|
|
|
1bb595 |
+ }
|
|
|
1bb595 |
}
|
|
|
1bb595 |
|
|
|
1bb595 |
return EOK;
|
|
|
1bb595 |
diff --git a/src/tests/intg/test_memory_cache.py b/src/tests/intg/test_memory_cache.py
|
|
|
1bb595 |
index 322f76fe0..6ed696e00 100644
|
|
|
1bb595 |
--- a/src/tests/intg/test_memory_cache.py
|
|
|
1bb595 |
+++ b/src/tests/intg/test_memory_cache.py
|
|
|
1bb595 |
@@ -135,6 +135,112 @@ def load_data_to_ldap(request, ldap_conn):
|
|
|
1bb595 |
create_ldap_fixture(request, ldap_conn, ent_list)
|
|
|
1bb595 |
|
|
|
1bb595 |
|
|
|
1bb595 |
+@pytest.fixture
|
|
|
1bb595 |
+def disable_memcache_rfc2307(request, ldap_conn):
|
|
|
1bb595 |
+ load_data_to_ldap(request, ldap_conn)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ conf = unindent("""\
|
|
|
1bb595 |
+ [sssd]
|
|
|
1bb595 |
+ domains = LDAP
|
|
|
1bb595 |
+ services = nss
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ [nss]
|
|
|
1bb595 |
+ memcache_size_group = 0
|
|
|
1bb595 |
+ memcache_size_passwd = 0
|
|
|
1bb595 |
+ memcache_size_initgroups = 0
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ [domain/LDAP]
|
|
|
1bb595 |
+ ldap_auth_disable_tls_never_use_in_production = true
|
|
|
1bb595 |
+ ldap_schema = rfc2307
|
|
|
1bb595 |
+ id_provider = ldap
|
|
|
1bb595 |
+ auth_provider = ldap
|
|
|
1bb595 |
+ sudo_provider = ldap
|
|
|
1bb595 |
+ ldap_uri = {ldap_conn.ds_inst.ldap_url}
|
|
|
1bb595 |
+ ldap_search_base = {ldap_conn.ds_inst.base_dn}
|
|
|
1bb595 |
+ """).format(**locals())
|
|
|
1bb595 |
+ create_conf_fixture(request, conf)
|
|
|
1bb595 |
+ create_sssd_fixture(request)
|
|
|
1bb595 |
+ return None
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+@pytest.fixture
|
|
|
1bb595 |
+def disable_pwd_mc_rfc2307(request, ldap_conn):
|
|
|
1bb595 |
+ load_data_to_ldap(request, ldap_conn)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ conf = unindent("""\
|
|
|
1bb595 |
+ [sssd]
|
|
|
1bb595 |
+ domains = LDAP
|
|
|
1bb595 |
+ services = nss
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ [nss]
|
|
|
1bb595 |
+ memcache_size_passwd = 0
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ [domain/LDAP]
|
|
|
1bb595 |
+ ldap_auth_disable_tls_never_use_in_production = true
|
|
|
1bb595 |
+ ldap_schema = rfc2307
|
|
|
1bb595 |
+ id_provider = ldap
|
|
|
1bb595 |
+ auth_provider = ldap
|
|
|
1bb595 |
+ sudo_provider = ldap
|
|
|
1bb595 |
+ ldap_uri = {ldap_conn.ds_inst.ldap_url}
|
|
|
1bb595 |
+ ldap_search_base = {ldap_conn.ds_inst.base_dn}
|
|
|
1bb595 |
+ """).format(**locals())
|
|
|
1bb595 |
+ create_conf_fixture(request, conf)
|
|
|
1bb595 |
+ create_sssd_fixture(request)
|
|
|
1bb595 |
+ return None
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+@pytest.fixture
|
|
|
1bb595 |
+def disable_grp_mc_rfc2307(request, ldap_conn):
|
|
|
1bb595 |
+ load_data_to_ldap(request, ldap_conn)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ conf = unindent("""\
|
|
|
1bb595 |
+ [sssd]
|
|
|
1bb595 |
+ domains = LDAP
|
|
|
1bb595 |
+ services = nss
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ [nss]
|
|
|
1bb595 |
+ memcache_size_group = 0
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ [domain/LDAP]
|
|
|
1bb595 |
+ ldap_auth_disable_tls_never_use_in_production = true
|
|
|
1bb595 |
+ ldap_schema = rfc2307
|
|
|
1bb595 |
+ id_provider = ldap
|
|
|
1bb595 |
+ auth_provider = ldap
|
|
|
1bb595 |
+ sudo_provider = ldap
|
|
|
1bb595 |
+ ldap_uri = {ldap_conn.ds_inst.ldap_url}
|
|
|
1bb595 |
+ ldap_search_base = {ldap_conn.ds_inst.base_dn}
|
|
|
1bb595 |
+ """).format(**locals())
|
|
|
1bb595 |
+ create_conf_fixture(request, conf)
|
|
|
1bb595 |
+ create_sssd_fixture(request)
|
|
|
1bb595 |
+ return None
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+@pytest.fixture
|
|
|
1bb595 |
+def disable_initgr_mc_rfc2307(request, ldap_conn):
|
|
|
1bb595 |
+ load_data_to_ldap(request, ldap_conn)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ conf = unindent("""\
|
|
|
1bb595 |
+ [sssd]
|
|
|
1bb595 |
+ domains = LDAP
|
|
|
1bb595 |
+ services = nss
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ [nss]
|
|
|
1bb595 |
+ memcache_size_initgroups = 0
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ [domain/LDAP]
|
|
|
1bb595 |
+ ldap_auth_disable_tls_never_use_in_production = true
|
|
|
1bb595 |
+ ldap_schema = rfc2307
|
|
|
1bb595 |
+ id_provider = ldap
|
|
|
1bb595 |
+ auth_provider = ldap
|
|
|
1bb595 |
+ sudo_provider = ldap
|
|
|
1bb595 |
+ ldap_uri = {ldap_conn.ds_inst.ldap_url}
|
|
|
1bb595 |
+ ldap_search_base = {ldap_conn.ds_inst.base_dn}
|
|
|
1bb595 |
+ """).format(**locals())
|
|
|
1bb595 |
+ create_conf_fixture(request, conf)
|
|
|
1bb595 |
+ create_sssd_fixture(request)
|
|
|
1bb595 |
+ return None
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
@pytest.fixture
|
|
|
1bb595 |
def sanity_rfc2307(request, ldap_conn):
|
|
|
1bb595 |
load_data_to_ldap(request, ldap_conn)
|
|
|
1bb595 |
@@ -354,6 +460,19 @@ def test_getgrnam_simple_with_mc(ldap_conn, sanity_rfc2307):
|
|
|
1bb595 |
test_getgrnam_simple(ldap_conn, sanity_rfc2307)
|
|
|
1bb595 |
|
|
|
1bb595 |
|
|
|
1bb595 |
+def test_getgrnam_simple_disabled_pwd_mc(ldap_conn, disable_pwd_mc_rfc2307):
|
|
|
1bb595 |
+ test_getgrnam_simple(ldap_conn, disable_pwd_mc_rfc2307)
|
|
|
1bb595 |
+ stop_sssd()
|
|
|
1bb595 |
+ test_getgrnam_simple(ldap_conn, disable_pwd_mc_rfc2307)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+def test_getgrnam_simple_disabled_intitgr_mc(ldap_conn,
|
|
|
1bb595 |
+ disable_initgr_mc_rfc2307):
|
|
|
1bb595 |
+ test_getgrnam_simple(ldap_conn, disable_initgr_mc_rfc2307)
|
|
|
1bb595 |
+ stop_sssd()
|
|
|
1bb595 |
+ test_getgrnam_simple(ldap_conn, disable_initgr_mc_rfc2307)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
def test_getgrnam_membership(ldap_conn, sanity_rfc2307):
|
|
|
1bb595 |
ent.assert_group_by_name(
|
|
|
1bb595 |
"group1",
|
|
|
1bb595 |
@@ -919,3 +1038,120 @@ def test_mc_zero_timeout(ldap_conn, zero_timeout_rfc2307):
|
|
|
1bb595 |
grp.getgrnam('group1')
|
|
|
1bb595 |
with pytest.raises(KeyError):
|
|
|
1bb595 |
grp.getgrgid(2001)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+def test_disabled_mc(ldap_conn, disable_memcache_rfc2307):
|
|
|
1bb595 |
+ ent.assert_passwd_by_name(
|
|
|
1bb595 |
+ 'user1',
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+ ent.assert_passwd_by_uid(
|
|
|
1bb595 |
+ 1001,
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ ent.assert_group_by_name("group1", dict(name="group1", gid=2001))
|
|
|
1bb595 |
+ ent.assert_group_by_gid(2001, dict(name="group1", gid=2001))
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ assert_user_gids_equal('user1', [2000, 2001])
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ stop_sssd()
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ # sssd is stopped and the memory cache is disabled;
|
|
|
1bb595 |
+ # so pytest should not be able to find anything
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ pwd.getpwnam('user1')
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ pwd.getpwuid(1001)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ grp.getgrnam('group1')
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ grp.getgrgid(2001)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ (res, errno, gids) = sssd_id.get_user_gids('user1')
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+def test_disabled_passwd_mc(ldap_conn, disable_pwd_mc_rfc2307):
|
|
|
1bb595 |
+ ent.assert_passwd_by_name(
|
|
|
1bb595 |
+ 'user1',
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+ ent.assert_passwd_by_uid(
|
|
|
1bb595 |
+ 1001,
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ assert_user_gids_equal('user1', [2000, 2001])
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ stop_sssd()
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ # passwd cache is disabled
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ pwd.getpwnam('user1')
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ pwd.getpwuid(1001)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ # Initgroups looks up the user first, hence KeyError from the
|
|
|
1bb595 |
+ # passwd database even if the initgroups cache is active.
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ (res, errno, gids) = sssd_id.get_user_gids('user1')
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+def test_disabled_group_mc(ldap_conn, disable_grp_mc_rfc2307):
|
|
|
1bb595 |
+ ent.assert_passwd_by_name(
|
|
|
1bb595 |
+ 'user1',
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+ ent.assert_passwd_by_uid(
|
|
|
1bb595 |
+ 1001,
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ ent.assert_group_by_name("group1", dict(name="group1", gid=2001))
|
|
|
1bb595 |
+ ent.assert_group_by_gid(2001, dict(name="group1", gid=2001))
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ assert_user_gids_equal('user1', [2000, 2001])
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ stop_sssd()
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ # group cache is disabled, other caches should work
|
|
|
1bb595 |
+ ent.assert_passwd_by_name(
|
|
|
1bb595 |
+ 'user1',
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+ ent.assert_passwd_by_uid(
|
|
|
1bb595 |
+ 1001,
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ grp.getgrnam('group1')
|
|
|
1bb595 |
+ with pytest.raises(KeyError):
|
|
|
1bb595 |
+ grp.getgrgid(2001)
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ assert_user_gids_equal('user1', [2000, 2001])
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+def test_disabled_initgr_mc(ldap_conn, disable_initgr_mc_rfc2307):
|
|
|
1bb595 |
+ # Even if initgroups is disabled, passwd should work
|
|
|
1bb595 |
+ ent.assert_passwd_by_name(
|
|
|
1bb595 |
+ 'user1',
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+ ent.assert_passwd_by_uid(
|
|
|
1bb595 |
+ 1001,
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ stop_sssd()
|
|
|
1bb595 |
+
|
|
|
1bb595 |
+ ent.assert_passwd_by_name(
|
|
|
1bb595 |
+ 'user1',
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
+ ent.assert_passwd_by_uid(
|
|
|
1bb595 |
+ 1001,
|
|
|
1bb595 |
+ dict(name='user1', passwd='*', uid=1001, gid=2001,
|
|
|
1bb595 |
+ gecos='1001', shell='/bin/bash'))
|
|
|
1bb595 |
--
|
|
|
1bb595 |
2.21.3
|
|
|
1bb595 |
|