From e501f791ee2e03b8eaea919a2f8ca4474773e3ba Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Mon, 8 Aug 2016 17:30:29 +0200 Subject: [PATCH] NSS: Use correct name for invalidating memory cache After refactoring of sysdb, we get and internal fully qualified name from backend in org.freedesktop.sssd.dataprovider_rev.initgrCheck Previously we got short name and we created fq name in nss_update_initgr_memcache. Memory cache still need to use short names if it was specified. This patch uses right name in different places. --- src/responder/nss/nsssrv_cmd.c | 23 ++++++++++++++--------- src/responder/nss/nsssrv_private.h | 2 +- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index f3b6ac4afb5d1571f283933b48e0256b91c56391..eb5ff116efc680855ad0471233dbc3e44400c2c3 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -3961,13 +3961,14 @@ done: } void nss_update_initgr_memcache(struct nss_ctx *nctx, - const char *name, const char *domain, + const char *fq_name, const char *domain, int gnum, uint32_t *groups) { TALLOC_CTX *tmp_ctx = NULL; struct sss_domain_info *dom; struct ldb_result *res; struct sized_string delete_name; + char *name; bool changed = false; uint32_t id; uint32_t gids[gnum]; @@ -3987,8 +3988,19 @@ void nss_update_initgr_memcache(struct nss_ctx *nctx, } tmp_ctx = talloc_new(NULL); + if (tmp_ctx == NULL) { + return; + } - ret = sysdb_initgroups(tmp_ctx, dom, name, &res); + ret = sss_parse_internal_fqname(tmp_ctx, fq_name, &name, NULL); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, + "Cannot parse internal name '%s': [%d] %s\n", + name, ret, sss_strerror(ret)); + goto done; + } + + ret = sysdb_initgroups(tmp_ctx, dom, fq_name, &res); if (ret != EOK && ret != ENOENT) { DEBUG(SSSDBG_CRIT_FAILURE, "Failed to make request to our cache! [%d][%s]\n", @@ -4047,13 +4059,6 @@ void nss_update_initgr_memcache(struct nss_ctx *nctx, } if (changed) { - char *fq_name = sss_tc_fqname(tmp_ctx, dom->names, dom, name); - if (!fq_name) { - DEBUG(SSSDBG_CRIT_FAILURE, - "Could not create fq name\n"); - goto done; - } - for (i = 0; i < gnum; i++) { id = groups[i]; diff --git a/src/responder/nss/nsssrv_private.h b/src/responder/nss/nsssrv_private.h index 79c7b7265f66f57e0ea89fe192a1da4f8992f1a3..391eaaf40f84a7436bee63fd699241e4957fdbeb 100644 --- a/src/responder/nss/nsssrv_private.h +++ b/src/responder/nss/nsssrv_private.h @@ -146,7 +146,7 @@ errno_t check_cache(struct nss_dom_ctx *dctx, void nss_update_pw_memcache(struct nss_ctx *nctx); void nss_update_gr_memcache(struct nss_ctx *nctx); void nss_update_initgr_memcache(struct nss_ctx *nctx, - const char *name, const char *domain, + const char *fq_name, const char *domain, int gnum, uint32_t *groups); int nss_connection_setup(struct cli_ctx *cctx); -- 2.9.2