} else {
/* No trusted keys in this domain, we'll have to find some in the parent domain */
*status = LDNS_STATUS_CRYPTO_NO_TRUSTED_DNSKEY;
+
+ ldns_rdf * parent_domain = ldns_dname_left_chop(domain);
+ ldns_rdf * prev_parent_domain;
+ ldns_rr_list * parent_keys = NULL;
- if (ldns_rdf_size(domain) > 1) {
+ while (ldns_rdf_size(parent_domain) > 0) {
/* Fail if we are at the root */
- ldns_rr_list * parent_keys;
- ldns_rdf * parent_domain = ldns_dname_left_chop(domain);
if ((parent_keys =
ldns_fetch_valid_domain_keys(res,
*status = LDNS_STATUS_CRYPTO_NO_TRUSTED_DS ;
}
ldns_rr_list_deep_free(parent_keys);
+ break;
+ } else {
+ parent_domain = ldns_dname_left_chop((
+ prev_parent_domain
+ = parent_domain
+ ));
+ ldns_rdf_deep_free(prev_parent_domain);
}
- ldns_rdf_deep_free(parent_domain);
}
+ ldns_rdf_deep_free(parent_domain);
}
}
return trusted_keys;