>From cae96ca65899af8b75e952ca5c66b9c08d18026f Mon Sep 17 00:00:00 2001
From: Michal Zidek <mzidek@redhat.com>
Date: Wed, 21 Aug 2013 15:26:36 +0200
Subject: [PATCH] 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(-)

diff --git a/src/responder/nss/nsssrv_mmap_cache.c b/src/responder/nss/nsssrv_mmap_cache.c
index fced018..1f584a2 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);
 }
-- 
1.7.11.2

