From 1f7fb30cc25765e54841e5d5f4192c12e3b29a16 Mon Sep 17 00:00:00 2001 From: Michal Zidek Date: Wed, 21 Aug 2013 15:26:36 +0200 Subject: mmap_cache: Use sss_atomic_write_s instead of write. Use sss_atomic_write_s() instead of write() in sss_mc_save_corrupted(). Also unlink() the file if no data were written. It is better to use sss_atomic_write_s instead of write --- src/responder/nss/nsssrv_mmap_cache.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/responder/nss/nsssrv_mmap_cache.c') diff --git a/src/responder/nss/nsssrv_mmap_cache.c b/src/responder/nss/nsssrv_mmap_cache.c index fced018eb..1f584a291 100644 --- a/src/responder/nss/nsssrv_mmap_cache.c +++ b/src/responder/nss/nsssrv_mmap_cache.c @@ -99,7 +99,7 @@ static void sss_mc_save_corrupted(struct sss_mc_ctx *mc_ctx) { int err; int fd = -1; - ssize_t written; + ssize_t written = -1; char *file = NULL; TALLOC_CTX *tmp_ctx; @@ -132,7 +132,7 @@ static void sss_mc_save_corrupted(struct sss_mc_ctx *mc_ctx) goto done; } - written = write(fd, mc_ctx->mmap_base, mc_ctx->mmap_size); + written = sss_atomic_write_s(fd, mc_ctx->mmap_base, mc_ctx->mmap_size); if (written != mc_ctx->mmap_size) { if (written == -1) { err = errno; @@ -151,6 +151,15 @@ static void sss_mc_save_corrupted(struct sss_mc_ctx *mc_ctx) done: if (fd != -1) { close(fd); + if (written == -1) { + err = unlink(file); + if (err != 0) { + err = errno; + DEBUG(SSSDBG_CRIT_FAILURE, + ("Failed to remove file '%s': %s.\n", file, + strerror(err))); + } + } } talloc_free(tmp_ctx); } -- cgit