bool result;
ldns_rr *current_key;
- /* TODO remove */
- key_buf = NULL;
- rrset_buf = NULL;
-
- /* create a buffer which will certainly hold the
+ /* create the buffers which will certainly hold the
* raw data */
rawsig_buf = ldns_buffer_new(MAX_PACKETLEN);
+ rrset_buf = ldns_buffer_new(MAX_PACKETLEN);
+
sig_algo = ldns_rdf2native_int8(ldns_rr_rdf(rrsig, 1));
result = false;
- (void)ldns_rrsig2buffer_wire(rawsig_buf, rrsig);
+ if (ldns_rrsig2buffer_wire(rawsig_buf, rrsig) != LDNS_STATUS_OK) {
+ ldns_buffer_free(rawsig_buf);
+ ldns_buffer_free(rrset_buf);
+ return false;
+ }
orig_ttl = ldns_rdf2native_int32(
ldns_rr_rdf(rrsig, 3));
ldns_rr_list_sort(rrset);
/* put the rrset in a wirefmt buf */
+ if (ldns_rr_list2buffer_wire(rrset_buf, rrset) != LDNS_STATUS_OK) {
+ ldns_buffer_free(rawsig_buf);
+ ldns_buffer_free(rrset_buf);
+ return false;
+ }
for(i = 0; i < ldns_rr_list_rr_count(keys); i++) {
current_key = ldns_rr_list_rr(keys, i);
-
- /* put the key-data in a buffer */
+ key_buf = ldns_buffer_new(MAX_PACKETLEN);
+ /* put the key-data in a buffer, that's the third rdf, with
+ * the base64 encoded key data */
+ if (ldns_rdf2buffer_wire(key_buf,
+ ldns_rr_rdf(current_key, 3)) != LDNS_STATUS_OK) {
+ return false;
+ }
switch(sig_algo) {
case LDNS_DSA:
rawsig_buf, rrset_buf, key_buf);
break;
default:
- /* no fucking way man! */
+ /* do you know this alg?! */
break;
}
- /* ldns_buffer_free(key_buf); TODO */
+ ldns_buffer_free(key_buf);
if (result) {
/* one of the keys has matched */
break;
ldns_buffer_free(rawsig_buf);
ldns_buffer_free(rrset_buf);
-
return result;
}
return ldns_buffer_status(buffer);
}
+/* convert a rr list to wireformat */
+ldns_status
+ldns_rr_list2buffer_wire(ldns_buffer *buffer, ldns_rr_list *rr_list)
+{
+ uint16_t rr_count;
+ uint16_t i;
+
+ rr_count = ldns_rr_list_rr_count(rr_list);
+ for(i = 0; i < rr_count; i++) {
+ ldns_rr2buffer_wire(buffer, ldns_rr_list_rr(rr_list, i), LDNS_SECTION_ANY);
+ }
+ return ldns_buffer_status(buffer);
+}
+
ldns_status
ldns_rr2buffer_wire(ldns_buffer *buffer, const ldns_rr *rr, int section)
{
}
#endif
- /* now convert all the rdf */
+ /* convert all the rdf */
for (i = 0; i < ldns_rr_rd_count(rr); i++) {
(void) ldns_rdf2buffer_wire(buffer, ldns_rr_rdf(rr, i));
}
ldns_status ldns_pkt2buffer_wire(ldns_buffer *, const ldns_pkt *);
ldns_status ldns_rr_rdata2buffer_wire(ldns_buffer *, ldns_rr *);
ldns_status ldns_rrsig2buffer_wire(ldns_buffer *, ldns_rr *);
+ldns_status ldns_rr_list2buffer_wire(ldns_buffer *, ldns_rr_list *);
uint8_t *ldns_rdf2wire(const ldns_rdf *, size_t *);
uint8_t *ldns_rr2wire(const ldns_rr *, int, size_t *);
uint8_t *ldns_pkt2wire(const ldns_pkt *, size_t *);