summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Zidek <mzidek@redhat.com>2012-12-13 17:38:55 +0100
committerJakub Hrozek <jhrozek@redhat.com>2012-12-13 20:51:50 +0100
commitab1c798d46739ca0782fcda7b77dcc48d588964c (patch)
treea0b8cb9b7c0ee2aebd5bfb7cf8923257412f27c6
parent50cf9f4a3029ec0924a28f8026298c8810546550 (diff)
downloadsssd-ab1c798d46739ca0782fcda7b77dcc48d588964c.tar.gz
sssd-ab1c798d46739ca0782fcda7b77dcc48d588964c.tar.xz
sssd-ab1c798d46739ca0782fcda7b77dcc48d588964c.zip
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.
-rw-r--r--src/responder/nss/nsssrv_cmd.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c
index a8985b592..e16f90014 100644
--- a/src/responder/nss/nsssrv_cmd.c
+++ b/src/responder/nss/nsssrv_cmd.c
@@ -660,6 +660,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;
@@ -744,6 +745,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;
}
@@ -2247,6 +2259,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;
@@ -2331,6 +2344,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;
}