]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
prefill: check correct origin attribute
authorIvana Krumlová <ivana.krumlova@nic.cz>
Thu, 4 Jul 2019 15:06:02 +0000 (17:06 +0200)
committerIvana Krumlová <ivana.krumlova@nic.cz>
Tue, 9 Jul 2019 12:05:39 +0000 (14:05 +0200)
name of SOA record must be "."

daemon/zimport.c

index 5bcc54c543029bd4aaed19bd7bf2f7a289f7b299..cf1021efdc05b5bf5b05d02943464eafc01a4b89 100644 (file)
@@ -687,14 +687,9 @@ static int zi_state_parsing(zs_scanner_t *s)
                        }
                        zone_import_ctx_t *z_import = (zone_import_ctx_t *) s->process.data;
                        empty = false;
-                       if (z_import->origin == 0) {
-                               z_import->origin = knot_dname_copy(s->zone_origin,
-                                                                 &z_import->pool);
-                       } else if (!knot_dname_is_equal(z_import->origin, s->zone_origin)) {
-                               kr_log_error("[zscanner] line: %"PRIu64
-                                            ": zone origin changed unexpectedly\n",
-                                            s->line_counter);
-                               return -1;
+                       if (s->r_type == 6) {
+                               z_import->origin = knot_dname_copy(s->r_owner,
+                                                                 &z_import->pool);
                        }
                        break;
                case ZS_STATE_ERROR:
@@ -714,6 +709,10 @@ static int zi_state_parsing(zs_scanner_t *s)
                                kr_log_error("[zimport] empty zone file\n");
                                return -1;
                        }
+                       if (!((zone_import_ctx_t *) s->process.data)->origin) {
+                               kr_log_error("[zimport] zone file doesn't contain SOA record\n");
+                               return -1;
+                       }
                        return (s->error.counter == 0) ? 0 : -1;
                default:
                        kr_log_error("[zscanner] line: %"PRIu64