return 0;
}
+bool
+ldns_dname_absolute(const ldns_rdf *rdf)
+{
+ char *str = ldns_rdf2str(rdf);
+ if (str) {
+ bool r = ldns_dname_str_absolute(str);
+ LDNS_FREE(str);
+ return r;
+ }
+ return false;
+}
+
ldns_rdf *
ldns_dname_label(const ldns_rdf *rdf, uint8_t labelpos)
{
ldns_buffer_set_position(result_buffer, ldns_buffer_capacity(result_buffer));
xfree(wire);
+
+ if (fp != stdin) {
+ fclose(fp);
+ }
return result_buffer;
}
void
dump_hex(const ldns_pkt *pkt, const char *filename)
{
- uint8_t *wire;
+ uint8_t *wire = NULL;
size_t size, i;
FILE *fp;
ldns_status status;
}
fprintf(fp, "\n");
fclose(fp);
+ LDNS_FREE(wire);
}
reading_hex = false;
cur_reply->reply_from_hex = data_buffer2wire(hex_data_buffer);
ldns_buffer_free(hex_data_buffer);
+ hex_data_buffer = NULL;
} else if(str_keyword(&parse, "ENTRY_END")) {
+ if (hex_data_buffer)
+ ldns_buffer_free(hex_data_buffer);
return current;
} else if(reading_hex) {
ldns_buffer_printf(hex_data_buffer, line);
ldns_resolver *r1, *r2;
ldns_pkt *query = NULL, *resp;
ldns_rr_list *nslist, *iplist;
- ldns_rdf *soa_zone, *soa_mname, *ns_name;
+ ldns_rdf *soa_zone, *soa_mname = NULL, *ns_name;
size_t i;
ldns_status s;
/* Match */
iplist = ldns_get_rr_list_addr_by_name(r1, ns_name, class, 0);
(void) ldns_resolver_push_nameserver_rr_list(r2, iplist);
+ ldns_rr_list_deep_free(iplist);
break;
}
}
/* No match, add it now. */
iplist = ldns_get_rr_list_addr_by_name(r1, ns_name, class, 0);
(void) ldns_resolver_push_nameserver_rr_list(r2, iplist);
+ ldns_rr_list_deep_free(iplist);
}
}
ldns_resolver_set_random(r2, false);
ldns_pkt_free(resp);
ldns_resolver_deep_free(r1);
+ if (soa_mname)
+ ldns_rdf_deep_free(soa_mname);
return r2;
bad:
ldns_pkt_free(query);
if (resp)
ldns_pkt_free(resp);
+ if (soa_mname)
+ ldns_rdf_deep_free(soa_mname);
return NULL;
}
ldns_pkt *u_pkt = NULL, *r_pkt;
ldns_rr_list *up_rrlist;
ldns_rr *up_rr;
- ldns_rdf *zone_rdf;
+ ldns_rdf *zone_rdf = NULL;
char *rrstr;
uint32_t rrstrlen, status = LDNS_STATUS_OK;
ldns_resolver_deep_free(res);
if (u_pkt)
ldns_pkt_free(u_pkt);
+ if (zone_rdf)
+ ldns_rdf_deep_free(zone_rdf);
return LDNS_STATUS_ERR;
}
else
break;
}
+ fclose(fp);
return status;
}
}
if (ldns_rr_new_frm_fp(&k, kfp, NULL, NULL, NULL) != LDNS_STATUS_OK) {
fprintf(stderr, "Error parsing the key file %s: %s\n", files[i], strerror(errno));
+ ldns_rr_list_deep_free(pubkeys);
return NULL;
}
fclose(kfp);
/* add the RD flags, because we want an answer */
pkt = ldns_resolver_query(res, name, LDNS_RR_TYPE_PTR, c, flags | LDNS_RD);
+ ldns_rdf_deep_free(name);
if (pkt) {
/* extract the data we need */
names = ldns_pkt_rr_list_by_type(pkt,
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, bignum);
if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
+ ldns_rdf_deep_free(b64_bignum);
goto error;
}
ldns_rdf_deep_free(b64_bignum);
}
#endif /* HAVE_SSL */
} else {
-#ifdef HAVE_SSL
- LDNS_FREE(b64_bignum);
-#endif
LDNS_FREE(bignum);
return ldns_buffer_status(output);
}
*key = k;
return LDNS_STATUS_OK;
}
+ ldns_key_free(k);
return LDNS_STATUS_ERR;
}
, size_t *hmac_size
)
{
- size_t i;
- char *d;
- unsigned char *buf;
-
- d = LDNS_XMALLOC(char, LDNS_MAX_LINELEN);
- buf = LDNS_XMALLOC(unsigned char, LDNS_MAX_LINELEN);
- if(!d || !buf) {
- goto error;
- }
+ size_t i, bufsz;
+ char d[LDNS_MAX_LINELEN];
+ unsigned char *buf = NULL;
if (ldns_fget_keyword_data_l(f, "Key", ": ", d, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
goto error;
}
- i = (size_t) ldns_b64_pton((const char*)d,
- buf,
- ldns_b64_ntop_calculate_size(strlen(d)));
+ bufsz = ldns_b64_ntop_calculate_size(strlen(d));
+ buf = LDNS_XMALLOC(unsigned char, bufsz);
+ i = (size_t) ldns_b64_pton((const char*)d, buf, bufsz);
*hmac_size = i;
return buf;
error:
- LDNS_FREE(d);
LDNS_FREE(buf);
*hmac_size = 0;
return NULL;
#endif
int internal_data = 0;
- pubkey = ldns_rr_new();
if (!k) {
return NULL;
}
+ pubkey = ldns_rr_new();
switch (ldns_key_algorithm(k)) {
case LDNS_SIGN_HMACMD5:
*/
bool ldns_dname_str_absolute(const char *dname_str);
+/**
+ * Checks whether the given dname is absolute (i.e. ends with a '.')
+ * \param[in] *dname a rdf representing the dname
+ * \return true or false
+ */
+bool ldns_dname_absolute(const ldns_rdf *rdf);
+
/**
* look inside the rdf and if it is an LDNS_RDF_TYPE_DNAME
* try and retrieve a specific label. The labels are numbered
ldns_directive_types
ldns_dname2buffer_wire
ldns_dname2canonical
+ldns_dname_absolute
ldns_dname_cat
ldns_dname_cat_clone
ldns_dname_clone_from
if ((ns->ss_family == AF_INET) &&
(ldns_resolver_ip6(r) == LDNS_RESOLV_INET6)) {
/* not reachable */
+ LDNS_FREE(ns);
continue;
}
if ((ns->ss_family == AF_INET6) &&
(ldns_resolver_ip6(r) == LDNS_RESOLV_INET)) {
/* not reachable */
+ LDNS_FREE(ns);
continue;
}
#endif
ns_i < ldns_resolver_nameserver_count(resolver) &&
resolver->_socket == 0;
ns_i++) {
+ if (ns != NULL) {
+ LDNS_FREE(ns);
+ }
ns = ldns_rdf2native_sockaddr_storage(
resolver->_nameservers[ns_i],
ldns_resolver_port(resolver), &ns_len);
#endif
resolver->_socket = 0;
+ ldns_pkt_free(query);
+ LDNS_FREE(ns);
+
return LDNS_STATUS_CRYPTO_TSIG_ERR;
}
}
ldns_pkt_section sec)
{
ldns_rr_list *rrs;
- ldns_rr_list *new;
ldns_rr_list *ret;
uint16_t i;
}
rrs = ldns_pkt_get_section_clone(packet, sec);
- new = ldns_rr_list_new();
ret = NULL;
for(i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
ldns_rr_list_rr(rrs, i)),
ownername) == 0) {
/* owner names match */
- ldns_rr_list_push_rr(new, ldns_rr_list_rr(rrs, i));
- ret = new;
+ if (ret == NULL) {
+ ret = ldns_rr_list_new();
+ }
+ ldns_rr_list_push_rr(ret, ldns_rr_list_rr(rrs, i));
}
}
return ret;
*p = packet;
return LDNS_STATUS_OK;
} else {
+ ldns_pkt_free(packet);
return LDNS_STATUS_NULL;
}
}
question_rr = ldns_rr_new();
if (!question_rr) {
+ ldns_pkt_free(packet);
return NULL;
}
*res = r;
return LDNS_STATUS_OK;
} else {
+ ldns_resolver_free(r);
return LDNS_STATUS_NULL;
}
}
ldns_rr_type t, ldns_rr_class c, uint16_t flags)
{
- char *str_dname;
ldns_rdf *new_name;
ldns_rdf **search_list;
size_t i;
ldns_pkt *p;
- str_dname = ldns_rdf2str(name);
-
- if (ldns_dname_str_absolute(str_dname)) {
+ if (ldns_dname_absolute(name)) {
/* query as-is */
return ldns_resolver_query(r, name, t, c, flags);
} else if (ldns_resolver_dnsrch(r)) {
ldns_resolver_tsig_keydata(r),
300, ldns_resolver_tsig_algorithm(r), NULL);
if (status != LDNS_STATUS_OK) {
+ ldns_pkt_free(query_pkt);
return LDNS_STATUS_CRYPTO_TSIG_ERR;
}
#else
+ ldns_pkt_free(query_pkt);
return LDNS_STATUS_CRYPTO_TSIG_ERR;
#endif /* HAVE_SSL */
}