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
/*@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
/*@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
}
/* 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;
}
ldns_rr *orig_tsig = ldns_pkt_tsig(pkt);
if (!orig_tsig) {
+ ldns_rdf_free(key_name_rdf);
return false;
}
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)) {
/*
}
printf("\n");
*/
+ ldns_rdf_free(my_mac_rdf);
return false;
} else {
for (i = 0; i < ldns_rdf_size(pkt_mac_rdf); i++) {
}
printf("\n");
*/
+ ldns_rdf_free(my_mac_rdf);
return false;
}
}
}
+ ldns_rdf_free(my_mac_rdf);
return true;
}
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;
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;
}
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);
}
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");
/* print the resulting pkt to stdout */
printf("QUERY:\n");
ldns_pkt_print(stdout, pkt);
-
+
/* Send to resolver */
/* init */
printf("error push nameserver\n");
return -1;
}
-
answer = ldns_send(res, pkt);
printf("\n\nANSWER:\n");
} 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;
}
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;
/* 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