]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Ensure that the files contents have been synced to disk prior to renaming.
authorMark Andrews <marka@isc.org>
Wed, 29 Aug 2001 05:52:49 +0000 (05:52 +0000)
committerMark Andrews <marka@isc.org>
Wed, 29 Aug 2001 05:52:49 +0000 (05:52 +0000)
lib/dns/masterdump.c

index c805cd94887eb9ab6720f44e895ce3e7a7176a24..d4091004dfbc6f8557e97da1072a67f3c581bad4 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: masterdump.c,v 1.55 2001/07/16 17:15:08 gson Exp $ */
+/* $Id: masterdump.c,v 1.56 2001/08/29 05:52:49 marka Exp $ */
 
 #include <config.h>
 
@@ -1004,6 +1004,17 @@ dns_master_dump(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
                goto cleanup;
        }
 
+       result = isc_stdio_sync(f);
+       if (result != ISC_R_SUCCESS) {
+               isc_log_write(dns_lctx, ISC_LOGCATEGORY_GENERAL,
+                             DNS_LOGMODULE_MASTERDUMP, ISC_LOG_ERROR,
+                             "dumping master file: %s: fsync: %s",
+                             tempname, isc_result_totext(result));
+               (void)isc_stdio_close(f);
+               (void)isc_file_remove(tempname);
+               goto cleanup;
+       }
+
        result = isc_stdio_close(f);
        if (result != ISC_R_SUCCESS) {
                isc_log_write(dns_lctx, ISC_LOGCATEGORY_GENERAL,
@@ -1012,7 +1023,6 @@ dns_master_dump(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
                              tempname, isc_result_totext(result));
                (void)isc_file_remove(tempname);
                goto cleanup;
-               
        }
 
        result = isc_file_rename(tempname, filename);