]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
address unchecked return values
authorMark Andrews <marka@isc.org>
Fri, 16 Nov 2018 12:18:51 +0000 (23:18 +1100)
committerMark Andrews <marka@isc.org>
Fri, 16 Nov 2018 23:20:23 +0000 (10:20 +1100)
bin/named/server.c

index 209a4f2b6fe81d933531138e70f21d22ca8907dd..4b1e6a3fb4e8ff578b646ba4eea4782a6c7f7970 100644 (file)
@@ -305,6 +305,13 @@ typedef struct catz_chgzone_event {
        bool mod;
 } catz_chgzone_event_t;
 
+typedef struct {
+       unsigned int magic;
+#define DZARG_MAGIC            ISC_MAGIC('D', 'z', 'a', 'r')
+       isc_buffer_t **text;
+       isc_result_t result;
+} ns_dzarg_t;
+
 /*
  * These zones should not leak onto the Internet.
  */
@@ -7609,11 +7616,11 @@ data_to_cfg(dns_view_t *view, MDB_val *key, MDB_val *data,
                goto cleanup;
        }
 
-       putstr(text, "zone ");
-       putmem(text, (const void *) zone_name, zone_name_len);
-       putstr(text, " ");
-       putmem(text, (const void *) zone_config, zone_config_len);
-       putstr(text, ";\n");
+       CHECK(putstr(text, "zone "));
+       CHECK(putmem(text, (const void *) zone_name, zone_name_len));
+       CHECK(putstr(text, " "));
+       CHECK(putmem(text, (const void *) zone_config, zone_config_len));
+       CHECK(putstr(text, ";\n"));
 
        cfg_parser_reset(named_g_addparser);
        result = cfg_parse_buffer3(named_g_addparser, *text, zone_name, 0,
@@ -10823,10 +10830,10 @@ named_server_dumpdb(named_server_t *server, isc_lex_t *lex,
        }
        if (ptr != NULL) {
                if (!found) {
-                       putstr(text, "view '");
-                       putstr(text, ptr);
-                       putstr(text, "' not found");
-                       putnull(text);
+                       CHECK(putstr(text, "view '"));
+                       CHECK(putstr(text, ptr));
+                       CHECK(putstr(text, "' not found"));
+                       CHECK(putnull(text));
                        result = ISC_R_NOTFOUND;
                        dumpdone(dctx, result);
                        return (result);
@@ -12114,9 +12121,15 @@ nzd_setkey(MDB_val *key, dns_name_t *name, char *namebuf, size_t buflen) {
 
 static void
 dumpzone(void *arg, const char *buf, int len) {
-       isc_buffer_t **text = arg;
+       ns_dzarg_t *dzarg = arg;
+       isc_result_t result;
+
+       REQUIRE(dzarg != NULL && ISC_MAGIC_VALID(dzarg, DZARG_MAGIC));
 
-       putmem(text, buf, len);
+       result = putmem(dzarg->text, buf, len);
+       if (result != ISC_R_SUCCESS && dzarg->result == ISC_R_SUCCESS) {
+               dzarg->result = result;
+       }
 }
 
 static isc_result_t
@@ -12130,6 +12143,7 @@ nzd_save(MDB_txn **txnp, MDB_dbi dbi, dns_zone_t *zone,
        isc_buffer_t *text = NULL;
        char namebuf[1024];
        MDB_val key, data;
+       ns_dzarg_t dzarg;
 
        view = dns_zone_getview(zone);
 
@@ -12181,7 +12195,21 @@ nzd_save(MDB_txn **txnp, MDB_dbi dbi, dns_zone_t *zone,
                        goto cleanup;
                }
 
-               cfg_printx(zoptions, CFG_PRINTER_ONELINE, dumpzone, &text);
+               dzarg.magic = DZARG_MAGIC;
+               dzarg.text = &text;
+               dzarg.result = ISC_R_SUCCESS;
+               cfg_printx(zoptions, CFG_PRINTER_ONELINE, dumpzone, &dzarg);
+               if (dzarg.result != ISC_R_SUCCESS) {
+                       isc_log_write(named_g_lctx,
+                                     NAMED_LOGCATEGORY_GENERAL,
+                                     NAMED_LOGMODULE_SERVER,
+                                     ISC_LOG_ERROR,
+                                     "Error writing zone config to "
+                                     "buffer in nzd_save(): %s",
+                                     isc_result_totext(result));
+                       result = dzarg.result;
+                       goto cleanup;
+               }
 
                data.mv_data = isc_buffer_base(text);
                data.mv_size = isc_buffer_usedlength(text);
@@ -12460,6 +12488,7 @@ migrate_nzf(dns_view_t *view) {
        MDB_txn *txn = NULL;
        MDB_dbi dbi;
        MDB_val key, data;
+       ns_dzarg_t dzarg;
 
        /*
         * If NZF file doesn't exist, or NZD DB exists and already
@@ -12549,7 +12578,21 @@ migrate_nzf(dns_view_t *view) {
                }
 
                isc_buffer_clear(text);
-               cfg_printx(zoptions, CFG_PRINTER_ONELINE, dumpzone, &text);
+               dzarg.magic = DZARG_MAGIC;
+               dzarg.text = &text;
+               dzarg.result = ISC_R_SUCCESS;
+               cfg_printx(zoptions, CFG_PRINTER_ONELINE, dumpzone, &dzarg);
+               if (dzarg.result != ISC_R_SUCCESS) {
+                       isc_log_write(named_g_lctx,
+                                     NAMED_LOGCATEGORY_GENERAL,
+                                     NAMED_LOGMODULE_SERVER,
+                                     ISC_LOG_ERROR,
+                                     "Error writing zone config to "
+                                     "buffer in migrate_nzf(): %s",
+                                     isc_result_totext(result));
+                       result = dzarg.result;
+                       goto cleanup;
+               }
 
                data.mv_data = isc_buffer_base(text);
                data.mv_size = isc_buffer_usedlength(text);
@@ -13653,8 +13696,14 @@ find_name_in_list_from_map(const cfg_obj_t *config,
 
 static void
 emitzone(void *arg, const char *buf, int len) {
-       isc_buffer_t **tpp = arg;
-       putmem(tpp, buf, len);
+       ns_dzarg_t *dzarg = arg;
+       isc_result_t result;
+
+       REQUIRE(dzarg != NULL && ISC_MAGIC_VALID(dzarg, DZARG_MAGIC));
+       result = putmem(dzarg->text, buf, len);
+       if (result != ISC_R_SUCCESS && dzarg->result == ISC_R_SUCCESS) {
+               dzarg->result = result;
+       }
 }
 
 /*
@@ -13676,6 +13725,7 @@ named_server_showzone(named_server_t *server, isc_lex_t *lex,
        cfg_obj_t *nzconfig = NULL;
 #endif /* HAVE_LMDB */
        bool added, redirect;
+       ns_dzarg_t dzarg;
 
        /* Parse parameters */
        CHECK(zone_from_args(server, lex, NULL, &zone, zonename,
@@ -13735,9 +13785,14 @@ named_server_showzone(named_server_t *server, isc_lex_t *lex,
        if (zconfig == NULL)
                CHECK(ISC_R_NOTFOUND);
 
-       putstr(text, "zone ");
-       cfg_printx(zconfig, CFG_PRINTER_ONELINE, emitzone, text);
-       putstr(text, ";");
+       CHECK(putstr(text, "zone "));
+       dzarg.magic = DZARG_MAGIC;
+       dzarg.text = text;
+       dzarg.result = ISC_R_SUCCESS;
+       cfg_printx(zconfig, CFG_PRINTER_ONELINE, emitzone, &dzarg);
+       CHECK(dzarg.result);
+
+       CHECK(putstr(text, ";"));
 
        result = ISC_R_SUCCESS;