summaryrefslogtreecommitdiffstats
path: root/src/confdb/confdb.c
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2012-02-03 15:33:00 -0500
committerStephen Gallagher <sgallagh@redhat.com>2012-02-04 08:27:16 -0500
commitbd92e8ee315d4da9350b9ef0358c88a7b54aeebe (patch)
treeffc81e481eb3547a0d6aeec5ff01511559536471 /src/confdb/confdb.c
parentf393e23f264a299868a12bec40a390a7ecd65d10 (diff)
downloadsssd-bd92e8ee315d4da9350b9ef0358c88a7b54aeebe.tar.gz
sssd-bd92e8ee315d4da9350b9ef0358c88a7b54aeebe.tar.xz
sssd-bd92e8ee315d4da9350b9ef0358c88a7b54aeebe.zip
NSS: Add individual timeouts for entry types
https://fedorahosted.org/sssd/ticket/1016
Diffstat (limited to 'src/confdb/confdb.c')
-rw-r--r--src/confdb/confdb.c53
1 files changed, 51 insertions, 2 deletions
diff --git a/src/confdb/confdb.c b/src/confdb/confdb.c
index f0a8caa9d..8b3a046f3 100644
--- a/src/confdb/confdb.c
+++ b/src/confdb/confdb.c
@@ -664,6 +664,7 @@ static int confdb_get_domain_internal(struct confdb_ctx *cdb,
struct ldb_dn *dn;
const char *tmp;
int ret, val;
+ uint32_t entry_cache_timeout;
tmp_ctx = talloc_new(mem_ctx);
if (!tmp_ctx) return ENOMEM;
@@ -834,13 +835,61 @@ static int confdb_get_domain_internal(struct confdb_ctx *cdb,
goto done;
}
- ret = get_entry_as_uint32(res->msgs[0], &domain->entry_cache_timeout,
+ /* Get the global entry cache timeout setting */
+ ret = get_entry_as_uint32(res->msgs[0], &entry_cache_timeout,
CONFDB_DOMAIN_ENTRY_CACHE_TIMEOUT, 5400);
if (ret != EOK) {
- DEBUG(0, ("Invalid value for [%s]\n", CONFDB_DOMAIN_ENTRY_CACHE_TIMEOUT));
+ DEBUG(SSSDBG_FATAL_FAILURE,
+ ("Invalid value for [%s]\n",
+ CONFDB_DOMAIN_ENTRY_CACHE_TIMEOUT));
+ goto done;
+ }
+
+ /* Override the user cache timeout, if specified */
+ ret = get_entry_as_uint32(res->msgs[0], &domain->user_timeout,
+ CONFDB_DOMAIN_USER_CACHE_TIMEOUT,
+ entry_cache_timeout);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE,
+ ("Invalid value for [%s]\n",
+ CONFDB_DOMAIN_USER_CACHE_TIMEOUT));
+ goto done;
+ }
+
+ /* Override the group cache timeout, if specified */
+ ret = get_entry_as_uint32(res->msgs[0], &domain->group_timeout,
+ CONFDB_DOMAIN_GROUP_CACHE_TIMEOUT,
+ entry_cache_timeout);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE,
+ ("Invalid value for [%s]\n",
+ CONFDB_DOMAIN_GROUP_CACHE_TIMEOUT));
goto done;
}
+ /* Override the netgroup cache timeout, if specified */
+ ret = get_entry_as_uint32(res->msgs[0], &domain->netgroup_timeout,
+ CONFDB_DOMAIN_NETGROUP_CACHE_TIMEOUT,
+ entry_cache_timeout);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE,
+ ("Invalid value for [%s]\n",
+ CONFDB_DOMAIN_NETGROUP_CACHE_TIMEOUT));
+ goto done;
+ }
+
+ /* Override the service cache timeout, if specified */
+ ret = get_entry_as_uint32(res->msgs[0], &domain->service_timeout,
+ CONFDB_DOMAIN_SERVICE_CACHE_TIMEOUT,
+ entry_cache_timeout);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE,
+ ("Invalid value for [%s]\n",
+ CONFDB_DOMAIN_SERVICE_CACHE_TIMEOUT));
+ goto done;
+ }
+
+
ret = get_entry_as_uint32(res->msgs[0], &domain->override_gid,
CONFDB_DOMAIN_OVERRIDE_GID, 0);
if (ret != EOK) {