diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/sss_client/nss_mc_common.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/sss_client/nss_mc_common.c b/src/sss_client/nss_mc_common.c index 92f802db7..6cff2e1b9 100644 --- a/src/sss_client/nss_mc_common.c +++ b/src/sss_client/nss_mc_common.c @@ -60,6 +60,8 @@ errno_t sss_nss_check_header(struct sss_cli_mc_ctx *ctx) struct sss_mc_header h; bool copy_ok; int count; + int ret; + struct stat fdstat; /* retry barrier protected reading max 5 times then give up */ for (count = 5; count > 0; count--) { @@ -99,6 +101,16 @@ errno_t sss_nss_check_header(struct sss_cli_mc_ctx *ctx) } } + ret = fstat(ctx->fd, &fdstat); + if (ret == -1) { + return EIO; + } + + if (fdstat.st_nlink == 0) { + /* memory cache was removed; we need to reinitialize it. */ + return EINVAL; + } + return 0; } |