diff options
author | Lukas Slebodnik <lslebodn@redhat.com> | 2015-06-30 14:16:47 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-07-03 15:16:52 +0200 |
commit | 6d292632a7176540dd317bba7457a12a3634789a (patch) | |
tree | cdd49b42dd91b569ff380b736811b8b108425a72 /src | |
parent | ebf6735dd4f71bf3dc9105e5d04d11e744c64a59 (diff) | |
download | sssd-6d292632a7176540dd317bba7457a12a3634789a.tar.gz sssd-6d292632a7176540dd317bba7457a12a3634789a.tar.xz sssd-6d292632a7176540dd317bba7457a12a3634789a.zip |
mmap_cache: Invalidate entry in right memory cache
If group was not found in nss_cmd_getgrnam_search
then we tied to invalidate entry in memory cache.
But function delete_entry_from_memory cache only invalidated
in passwd memory cache.
Reviewed-by: Michal Židek <mzidek@redhat.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/responder/nss/nsssrv_cmd.c | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index ccb8e7334..b163d6d57 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -753,7 +753,8 @@ static void nsssrv_dp_send_acct_req_done(struct tevent_req *req) } static int delete_entry_from_memcache(struct sss_domain_info *dom, char *name, - struct sss_mc_ctx *mc_ctx) + struct sss_mc_ctx *mc_ctx, + enum sss_mc_type type) { TALLOC_CTX *tmp_ctx = NULL; struct sized_string delete_name; @@ -778,11 +779,27 @@ static int delete_entry_from_memcache(struct sss_domain_info *dom, char *name, to_sized_string(&delete_name, name); } - ret = sss_mmap_cache_pw_invalidate(mc_ctx, &delete_name); - if (ret != EOK && ret != ENOENT) { - DEBUG(SSSDBG_CRIT_FAILURE, - "Internal failure in memory cache code: %d [%s]\n", - ret, strerror(ret)); + switch (type) { + case SSS_MC_PASSWD: + ret = sss_mmap_cache_pw_invalidate(mc_ctx, &delete_name); + if (ret != EOK && ret != ENOENT) { + DEBUG(SSSDBG_CRIT_FAILURE, + "Internal failure in memory cache code: %d [%s]\n", + ret, strerror(ret)); + goto done; + } + break; + case SSS_MC_GROUP: + ret = sss_mmap_cache_gr_invalidate(mc_ctx, &delete_name); + if (ret != EOK && ret != ENOENT) { + DEBUG(SSSDBG_CRIT_FAILURE, + "Internal failure in memory cache code: %d [%s]\n", + ret, strerror(ret)); + goto done; + } + break; + default: + ret = EINVAL; goto done; } @@ -944,7 +961,7 @@ static int nss_cmd_getpwnam_search(struct nss_dom_ctx *dctx) /* User not found in ldb -> delete user from memory cache. */ ret = delete_entry_from_memcache(dctx->domain, name, - nctx->pwd_mc_ctx); + nctx->pwd_mc_ctx, SSS_MC_PASSWD); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, "Deleting user from memcache failed.\n"); @@ -3064,7 +3081,7 @@ static int nss_cmd_getgrnam_search(struct nss_dom_ctx *dctx) /* Group not found in ldb -> delete group from memory cache. */ ret = delete_entry_from_memcache(dctx->domain, name, - nctx->grp_mc_ctx); + nctx->grp_mc_ctx, SSS_MC_GROUP); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, "Deleting group from memcache failed.\n"); |