]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3866. [bug] Named could die on disk full in generate_session_key.
authorMark Andrews <marka@isc.org>
Fri, 30 May 2014 04:38:39 +0000 (14:38 +1000)
committerMark Andrews <marka@isc.org>
Fri, 30 May 2014 04:39:05 +0000 (14:39 +1000)
                        [RT #36119]

(cherry picked from commit fa6308bd57f716732ba70bbafc1d09e861e4acc1)

CHANGES
bin/named/server.c

diff --git a/CHANGES b/CHANGES
index a0154152ec29441f89b6da34528717d77f256a0b..240d8f7b595b4887e551ebbeb7016879b9dce71a 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3866.  [bug]           Named could die on disk full in generate_session_key.
+                       [RT #36119]
+
 3865.  [test]          Improved testability of the red-black tree
                        implementation and added unit tests. [RT #35904]
 
index 3c62b9b1aabbfcd57371a7907b587f333b6559a7..789ca8a1ca8d5c3ae6e3fc40866999407a0abac2 100644 (file)
@@ -5097,8 +5097,8 @@ generate_session_key(const char *filename, const char *keynamestr,
                (int) isc_buffer_usedlength(&key_txtbuffer),
                (char*) isc_buffer_base(&key_txtbuffer));
 
-       RUNTIME_CHECK(isc_stdio_flush(fp) == ISC_R_SUCCESS);
-       RUNTIME_CHECK(isc_stdio_close(fp) == ISC_R_SUCCESS);
+       CHECK(isc_stdio_flush(fp));
+       CHECK(isc_stdio_close(fp));
 
        dst_key_free(&key);
 
@@ -5111,6 +5111,11 @@ generate_session_key(const char *filename, const char *keynamestr,
                      NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
                      "failed to generate session key "
                      "for dynamic DNS: %s", isc_result_totext(result));
+       if (fp != NULL) {
+               if (isc_file_exists(filename))
+                       (void)isc_file_remove(filename);
+               (void)isc_stdio_close(fp);
+       }
        if (tsigkey != NULL)
                dns_tsigkey_detach(&tsigkey);
        if (key != NULL)