From 08aa21d07bd6b5caa6887fcd158aefa87d1d49b5 Mon Sep 17 00:00:00 2001 From: Michal Zidek Date: Thu, 13 Dec 2012 17:38:55 +0100 Subject: sssd_nss: Remove entries from memory cache if not found in sysdb Functions nss_cmd_getXXnam remove entries from memory cache if not found in sysdb cache of a local domain. --- src/responder/nss/nsssrv_cmd.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index 6b6f7dff3..58d8afab5 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -658,6 +658,7 @@ static int nss_cmd_getpwnam_search(struct nss_dom_ctx *dctx) struct sss_domain_info *dom = dctx->domain; struct cli_ctx *cctx = cmdctx->cctx; char *name = NULL; + struct sized_string delete_usrname; struct sysdb_ctx *sysdb; struct nss_ctx *nctx; int ret; @@ -742,6 +743,17 @@ static int nss_cmd_getpwnam_search(struct nss_dom_ctx *dctx) DEBUG(2, ("No results for getpwnam call\n")); + /* User not found in ldb -> delete user from memory cache. */ + to_sized_string(&delete_usrname, name); + ret = sss_mmap_cache_pw_invalidate(nctx->pwd_mc_ctx, + &delete_usrname); + if (ret != EOK && ret != ENOENT) { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Internal failure in memory cache code: %d [%s]\n", + ret, strerror(ret))); + } + + return ENOENT; } @@ -2245,6 +2257,7 @@ static int nss_cmd_getgrnam_search(struct nss_dom_ctx *dctx) struct sss_domain_info *dom = dctx->domain; struct cli_ctx *cctx = cmdctx->cctx; char *name = NULL; + struct sized_string delete_grpname; struct sysdb_ctx *sysdb; struct nss_ctx *nctx; int ret; @@ -2329,6 +2342,16 @@ static int nss_cmd_getgrnam_search(struct nss_dom_ctx *dctx) DEBUG(2, ("No results for getgrnam call\n")); + /* Group not found in ldb -> delete group from memory cache. */ + to_sized_string(&delete_grpname, name); + ret = sss_mmap_cache_gr_invalidate(nctx->grp_mc_ctx, + &delete_grpname); + if (ret != EOK && ret != ENOENT) { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Internal failure in memory cache code: %d [%s]\n", + ret, strerror(ret))); + } + return ENOENT; } -- cgit