ldns/ldns_1.2.1_origin.patch

57 lines
1.7 KiB
Diff

Index: zone.c
===================================================================
--- zone.c (revision 2480)
+++ zone.c (revision 2482)
@@ -181,7 +181,8 @@
/* also set the prev */
my_prev = ldns_rdf_clone(origin);
} else {
- my_origin = ldns_dname_new_frm_str(".");
+ my_origin = NULL;
+ /*my_origin = ldns_dname_new_frm_str(".");*/
my_prev = NULL;
}
@@ -198,6 +199,10 @@
}
soa_seen = true;
ldns_zone_set_soa(newzone, rr);
+ /* set origin to soa if not specified */
+ if (!my_origin) {
+ my_origin = ldns_rdf_clone(ldns_rr_owner(rr));
+ }
continue;
}
Index: rr.c
===================================================================
--- rr.c (revision 2480)
+++ rr.c (revision 2482)
@@ -417,11 +417,22 @@
ldns_rr_descriptor_field_type(desc, r_cnt),
rd);
- /* check if the origin should be concatenated */
- if (rd_strlen > 1 && !ldns_dname_str_absolute(rd) && origin) {
+ /* check if the origin should be used or concatenated */
+ if (rd_strlen == 1 && ldns_rdf_data(r)[1] == '@') {
+ ldns_rdf_deep_free(r);
+ if (origin) {
+ r = ldns_rdf_clone(origin);
+ } else {
+ /* if this is the SOA, use its own owner name */
+ if (rr_type == LDNS_RR_TYPE_SOA) {
+ r = ldns_rdf_clone(ldns_rr_owner(new));
+ } else {
+ r = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, ".");
+ }
+ }
+ } else if (rd_strlen > 1 && !ldns_dname_str_absolute(rd) && origin) {
if (!ldns_dname_cat(r, origin)) {
- /* don't change this (yet MIEK */
- /* return LDNS_STATUS_SYNTAX_ERR; */
+ return LDNS_STATUS_ERR;
}
}
break;