]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
some memory fixes
authorJelte Jansen <jeltejan@NLnetLabs.nl>
Tue, 8 Mar 2005 13:49:00 +0000 (13:49 +0000)
committerJelte Jansen <jeltejan@NLnetLabs.nl>
Tue, 8 Mar 2005 13:49:00 +0000 (13:49 +0000)
TODO
configure.ac
dnssec.c
host2str.c
run-test15.c
run-test7.c

diff --git a/TODO b/TODO
index c31efb316b9283dfb8370f75fa51dfa353e94457..2f5a41aea81ecdf7d94ab70059e53d0cd8a557b2 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,7 +1,9 @@
 Current TODO list
 
+
 Implementation:
 ---------------
+o sync argument order in rdf_new and rdf_new_frm_data
 o deep free
 o check all conversion routines on missing types
        - wire2host
index d01ff0d0e137c64f91a7a78eb73ebe9d969aa6c7..115a8edcfd55732bab3c51d00f267dd2a09be2ec 100644 (file)
@@ -151,7 +151,7 @@ int b64_ntop(uint8_t const *src, size_t srclength,
 /*@unused@*/
 static inline size_t b64_ntop_calculate_size(size_t srcsize)
 {
-       return ((((srcsize + 2) / 3) * 4) + 1);
+       return (((srcsize + 2) / 3) * 4);
 }
 #endif /* !B64_PTON */
 #ifndef B64_NTOP
@@ -162,7 +162,7 @@ int b64_pton(char const *src, uint8_t *target, size_t targsize);
 /*@unused@*/
 static inline size_t b64_pton_calculate_size(size_t srcsize)
 {
-       return ((((srcsize - 1) / 4) * 3) - 2);
+       return ((((srcsize / 4) * 3) - 2) + 1);
 }
 #endif /* !B64_NTOP */
 #ifndef TIMEGM
index b9d5d3d1561df1f8764a8ffb00e740fd6e7bcf7b..3176944351d10a04d80a7d95f469885c04befeec 100644 (file)
--- a/dnssec.c
+++ b/dnssec.c
@@ -490,12 +490,16 @@ ldns_create_tsig_mac(
        }
        /* hmac it */
        /* 2 spare bytes for the length */
-       mac_bytes = malloc(md_len);
+       mac_bytes = XMALLOC(unsigned char, md_len);
        memset(mac_bytes, 0, md_len);
        (void) HMAC(EVP_md5(), key_bytes, key_size, (void *)wireformat, wiresize, mac_bytes + 2, &md_len);
        
        write_uint16(mac_bytes, md_len);
-       mac_rdf = ldns_rdf_new(md_len + 2, LDNS_RDF_TYPE_INT16_DATA, mac_bytes);
+       mac_rdf = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_INT16_DATA, md_len + 2, mac_bytes);
+       
+       FREE(mac_bytes);
+       FREE(key_bytes);
+       ldns_buffer_free(data_buffer);
        
        return mac_rdf;
 }
@@ -526,6 +530,7 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt,
        ldns_rr *orig_tsig = ldns_pkt_tsig(pkt);
        
        if (!orig_tsig) {
+               ldns_rdf_free(key_name_rdf);
                return false;
        }
        
@@ -560,6 +565,8 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt,
        ldns_pkt_set_tsig(pkt, orig_tsig);
        ldns_pkt_set_id(pkt, pkt_id);
        
+       ldns_rdf_free(key_name_rdf);
+       
        /* TODO: ldns_rdf_cmp in rdata.[ch] */
        if (ldns_rdf_size(pkt_mac_rdf) != ldns_rdf_size(my_mac_rdf)) {
                /*
@@ -577,6 +584,7 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt,
                }
                printf("\n");
                */
+               ldns_rdf_free(my_mac_rdf);
                return false;
        } else {
                for (i = 0; i < ldns_rdf_size(pkt_mac_rdf); i++) {
@@ -599,11 +607,13 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt,
                                }
                                printf("\n");
                                */
+                               ldns_rdf_free(my_mac_rdf);
                                return false;
                        }
                }
        }
 
+       ldns_rdf_free(my_mac_rdf);
        return true;
 }
 
@@ -624,8 +634,7 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt,
 ldns_status
 ldns_pkt_tsig_sign(ldns_pkt *pkt, const char *key_name, const char *key_data, uint16_t fudge, const char *algorithm_name, ldns_rdf *query_mac)
 {
-       unsigned char *key_bytes;
-       int key_size;
+       int key_size = 0;
        ldns_rr *tsig_rr;
        ldns_rdf *key_name_rdf = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, key_name);
        uint8_t *fudge_data;
@@ -666,10 +675,6 @@ ldns_pkt_tsig_sign(ldns_pkt *pkt, const char *key_name, const char *key_data, ui
        write_uint16(error_data, 0);
        error_rdf = ldns_rdf_new(2, LDNS_RDF_TYPE_INT16, error_data);
 
-       /* prepare the key */
-       key_bytes = XMALLOC(unsigned char, b64_pton_calculate_size(strlen(key_data)));
-       key_size = b64_pton(key_data, key_bytes, strlen(key_data) * 2);
-       
        if (key_size < 0) {
                return LDNS_STATUS_INVALID_B64;
        }
index a8e0d27ce7ecd8b244cde6be75ab0238bcd1a9b8..a491d4d719dbf9dcd62dd978a288dad076330e6d 100644 (file)
@@ -641,15 +641,11 @@ ldns_rdf2buffer_str_int16_data(ldns_buffer *output, ldns_rdf *rdf)
 
        ldns_buffer_printf(output, "%u ", ldns_rdf_size(rdf)-2);
        
-       if (b64_ntop(ldns_rdf_data(rdf)+2, ldns_rdf_size(rdf)-2, b64, size)) {
+       if (ldns_rdf_size(rdf) > 2 &&
+           b64_ntop(ldns_rdf_data(rdf)+2, ldns_rdf_size(rdf)-2, b64, size)) {
                ldns_buffer_printf(output, "%s", b64);
        }
        FREE(b64);
-/*
-       if (ldns_rdf_size > 2) {
-               ldns_rdf2buffer_str_b64(output, rdf);
-       }
-*/     
        return ldns_buffer_status(output);
 }
 
index ebee424f3793bf64f40d80c43b18c3ba6fcade77..e1830272d089c060e4eafc6d5103681c97a2c507 100644 (file)
@@ -46,8 +46,8 @@ main(int argc, char **argv)
        ldns_pkt_set_id(pkt, 46789);
 
        ldns_pkt_tsig_sign(pkt, "jelte.", "vBUWJnkgDw4YTobXtbUD6XED5Qg74tnghYX3tzKzfsI=", 300, "hmac-md5.sig-alg.reg.int", NULL);
-
        mac = ldns_rr_rdf(ldns_pkt_tsig(pkt), 3);
+
        /* test our own sign */
        if (!ldns_pkt_tsig_verify(pkt, "jelte.", "vBUWJnkgDw4YTobXtbUD6XED5Qg74tnghYX3tzKzfsI=", NULL)) {
                printf("Can't verify my own sig :(\n");
@@ -57,7 +57,7 @@ main(int argc, char **argv)
         /* print the resulting pkt to stdout */
         printf("QUERY:\n");
         ldns_pkt_print(stdout, pkt);
-        
+
         /* Send to resolver */
         
         /* init */
@@ -69,7 +69,6 @@ main(int argc, char **argv)
                 printf("error push nameserver\n");
                 return -1;
         }
-
         answer = ldns_send(res, pkt);
         
         printf("\n\nANSWER:\n");
@@ -82,11 +81,11 @@ main(int argc, char **argv)
        } else {
                printf("Failed.\n");
        }
-/*
+
+       ldns_pkt_free(answer);
         ldns_rdf_free(nameserver);
-        ldns_rdf_free(qname);
         ldns_pkt_free(pkt);
         ldns_resolver_free(res);
-*/
+
         return 0;
 }
index 28cc10b607bc0eab11653d039392644610ac7cef..767862bce3a98d65167350ccbcb056166976e163 100644 (file)
@@ -23,7 +23,7 @@ main(int argc, char **argv)
         ldns_resolver *res;
         ldns_rdf *qname;
         ldns_rdf *nameserver;
-       ldns_rdf *default_dom;
+       /*ldns_rdf *default_dom;*/
         ldns_pkt *pkt;
         char *server_ip = NULL;
         char *name = NULL;
@@ -44,8 +44,8 @@ main(int argc, char **argv)
 
         /* create a default domain and add it */
 
-        default_dom = ldns_dname_new_frm_str("miek.nl.");
 #if 0
+        default_dom = ldns_dname_new_frm_str("miek.nl.");
         ldns_resolver_set_domain(res, default_dom);
        ldns_resolver_set_defnames(res, true); /* use the suffix */
 #endif