diff options
author | Pavel Reichl <preichl@redhat.com> | 2014-04-17 16:14:11 +0000 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-06-19 18:04:02 +0200 |
commit | 96d5ff54565f6aaccd09ed4c84b45a712345fcc9 (patch) | |
tree | d26433a20950ee447fea038166d46786ea31e77c /src/responder | |
parent | 09be002e58babda513b4b75d2b9eb9b2c351fa26 (diff) | |
download | sssd-96d5ff54565f6aaccd09ed4c84b45a712345fcc9.tar.gz sssd-96d5ff54565f6aaccd09ed4c84b45a712345fcc9.tar.xz sssd-96d5ff54565f6aaccd09ed4c84b45a712345fcc9.zip |
NSS: sysdb_getnetgr refactor
Move functionality for creating cache dummies into separate function.
Reviewed-by: Michal Židek <mzidek@redhat.com>
Diffstat (limited to 'src/responder')
-rw-r--r-- | src/responder/nss/nsssrv_netgroup.c | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/src/responder/nss/nsssrv_netgroup.c b/src/responder/nss/nsssrv_netgroup.c index fae603b9b..0f7f782a2 100644 --- a/src/responder/nss/nsssrv_netgroup.c +++ b/src/responder/nss/nsssrv_netgroup.c @@ -429,6 +429,44 @@ static void set_netgr_lifetime(uint32_t lifetime, } } +/* Create dummy netgroup to speed up repeated negative queries */ +static errno_t create_negcache_netgr(struct setent_step_ctx *step_ctx) +{ + errno_t ret; + struct getent_ctx *netgr; + + netgr = talloc_zero(step_ctx->nctx, struct getent_ctx); + if (netgr == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, "talloc_zero failed.\n"); + ret = ENOMEM; + goto done; + } else { + netgr->ready = true; + netgr->found = false; + netgr->entries = NULL; + netgr->lookup_table = step_ctx->nctx->netgroups; + netgr->name = talloc_strdup(netgr, step_ctx->name); + if (netgr->name == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, "talloc_strdup failed.\n"); + ret = ENOMEM; + goto done; + } + + ret = set_netgroup_entry(step_ctx->nctx, netgr); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, "set_netgroup_entry failed.\n"); + goto done; + } + set_netgr_lifetime(step_ctx->nctx->neg_timeout, step_ctx, netgr); + } + +done: + if (ret != EOK) { + talloc_free(netgr); + } + return ret; +} + static errno_t lookup_netgr_step(struct setent_step_ctx *step_ctx) { errno_t ret; @@ -572,26 +610,14 @@ static errno_t lookup_netgr_step(struct setent_step_ctx *step_ctx) DEBUG(SSSDBG_MINOR_FAILURE, "No matching domain found for [%s], fail!\n", step_ctx->name); - netgr = talloc_zero(step_ctx->nctx, struct getent_ctx); - if (netgr == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, "talloc_zero failed, ignored.\n"); - } else { - netgr->ready = true; - netgr->found = false; - netgr->entries = NULL; - netgr->lookup_table = step_ctx->nctx->netgroups; - netgr->name = talloc_strdup(netgr, step_ctx->name); - if (netgr->name == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, "talloc_strdup failed.\n"); - talloc_free(netgr); - return ENOMEM; - } - - ret = set_netgroup_entry(step_ctx->nctx, netgr); - if (ret != EOK) { - DEBUG(SSSDBG_CRIT_FAILURE, "set_netgroup_entry failed, ignored.\n"); - } - set_netgr_lifetime(step_ctx->nctx->neg_timeout, step_ctx, netgr); + ret = create_negcache_netgr(step_ctx); + if (ret != EOK) { + /* Failure can be ignored, because at worst, there will be a slowdown + * at the next lookup + */ + DEBUG(SSSDBG_TRACE_ALL, + "create_negcache_netgr failed with: %d:[%s], ignored.\n", + ret, sss_strerror(ret)); } return ENOENT; |