{ LDNS_STATUS_WIRE_INCOMPLETE_AUTHORITY, "authority section incomplete" },
{ LDNS_STATUS_WIRE_INCOMPLETE_ADDITIONAL, "additional section incomplete" },
{ LDNS_STATUS_NO_DATA, "No data" },
+ { LDNS_STATUS_CERT_BAD_ALGORITHM, "Bad algorithm type for CERT record" },
{ 0, NULL }
};
LDNS_STATUS_WIRE_INCOMPLETE_ANSWER,
LDNS_STATUS_WIRE_INCOMPLETE_AUTHORITY,
LDNS_STATUS_WIRE_INCOMPLETE_ADDITIONAL,
- LDNS_STATUS_NO_DATA
+ LDNS_STATUS_NO_DATA,
+ LDNS_STATUS_CERT_BAD_ALGORITHM
};
typedef enum ldns_enum_status ldns_status;
rd);
break;
}
- ldns_rr_push_rdf(new, r);
-
+ if (r) {
+ ldns_rr_push_rdf(new, r);
+ } else {
+ LDNS_FREE(rd);
+ LDNS_FREE(b64);
+ ldns_buffer_free(rd_buf);
+ ldns_buffer_free(rr_buf);
+ LDNS_FREE(rdata);
+ ldns_rr_free(new);
+ return NULL;
+ }
}
if (quoted) {
{
ldns_lookup_table *lt;
ldns_status st;
-
+ uint8_t id = 0;
lt = ldns_lookup_by_name(ldns_cert_algorithms, str);
st = LDNS_STATUS_OK;
if (lt) {
+ id = lt->id;
/* it was given as a integer */
*rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_INT8, sizeof(uint8_t), <->id);
+ LDNS_RDF_TYPE_INT8, sizeof(uint8_t), &id);
if (!*rd) {
st = LDNS_STATUS_ERR;
}
/* try as-is (a number) */
st = ldns_str2rdf_int8(rd, str);
}
+ if (ldns_rdf2native_int8(*rd) == 0) {
+ fprintf(stderr, "Warning: Bad CERT algorithm type: %s ignoring RR\n", str);
+ st = LDNS_STATUS_CERT_BAD_ALGORITHM;
+ }
return st;
}
ldns_zone_set_soa(newzone, rr);
continue;
}
+
+ if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_CERT) {
+ ldns_rr_print(stdout, rr);
+ }
/* a normal RR - as sofar the DNS is normal */
last_rr = rr;