]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
some more dnssec function and buffer2wire stuff
authorMiek Gieben <miekg@NLnetLabs.nl>
Mon, 28 Feb 2005 11:13:55 +0000 (11:13 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Mon, 28 Feb 2005 11:13:55 +0000 (11:13 +0000)
dnssec.c
host2wire.c
ldns/host2wire.h
libdns.vim

index 600644d5306928eabfb8b75cfa0685524a805bc2..6d90183501510ba43141b948d8b6ac4a582be90a 100644 (file)
--- a/dnssec.c
+++ b/dnssec.c
@@ -87,17 +87,19 @@ ldns_verify_rrsig(ldns_rr_list *rrset, ldns_rr *rrsig, ldns_rr_list *keys)
        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));
@@ -116,11 +118,21 @@ ldns_verify_rrsig(ldns_rr_list *rrset, ldns_rr *rrsig, ldns_rr_list *keys)
        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:
@@ -136,11 +148,11 @@ ldns_verify_rrsig(ldns_rr_list *rrset, ldns_rr *rrsig, ldns_rr_list *keys)
                                                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;
@@ -149,7 +161,6 @@ ldns_verify_rrsig(ldns_rr_list *rrset, ldns_rr *rrsig, ldns_rr_list *keys)
 
        ldns_buffer_free(rawsig_buf);
        ldns_buffer_free(rrset_buf);
-
        return result;
 }
 
index 5ca5b7265c30899e16e23e4f0e0e0b4cdaab4a0a..ca5555b85357060330e6f425bb4f3d0c33351a4e 100644 (file)
@@ -45,6 +45,20 @@ ldns_rdf2buffer_wire(ldns_buffer *buffer, const ldns_rdf *rdf)
        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)
 {
@@ -164,7 +178,7 @@ ldns_rr_rdata2buffer_wire(ldns_buffer *buffer, ldns_rr *rr)
        }       
 #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));
        }
index 087df4043b532907e6e9098b54b5bb76e4cc75dc..f4b128668b3426d58612646744131fecad7d8adc 100644 (file)
@@ -17,6 +17,7 @@ ldns_status ldns_rr2buffer_wire(ldns_buffer *, const ldns_rr *, int);
 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 *);
index 3b0e77c1b6039b6d729ab5cce7c42a6f21f90839..1659e32e65a1ba0486a078295c4779382aaa84b6 100644 (file)
@@ -68,6 +68,7 @@ syn keyword  ldnsConstant     LDNS_SECTION_QUESTION
 syn keyword  ldnsConstant      LDNS_SECTION_ANSWER
 syn keyword  ldnsConstant      LDNS_SECTION_AUTHORITY
 syn keyword  ldnsConstant      LDNS_SECTION_ADDITIONAL
+syn keyword  ldnsConstant      LDNS_SECTION_ANY
 syn keyword  ldnsConstant      MAX_PACKETLEN