Example #1
0
ldns_pkt *
ldns_resolver_query(const ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, 
		ldns_rr_class c, uint16_t flags)
{
	ldns_rdf *newname;
	ldns_pkt *pkt;
	ldns_status status;

	pkt = NULL;

	if (!ldns_resolver_defnames(r)) {
		status = ldns_resolver_send(&pkt, (ldns_resolver *)r, name, type, c, 
				flags);
		if (status == LDNS_STATUS_OK) {
			return pkt;
		} else {
			if (pkt) {
				ldns_pkt_free(pkt);
			}
			fprintf(stderr, "error: %s\n", ldns_get_errorstr_by_id(status));
			return NULL;
		}
	}

	if (!ldns_resolver_domain(r)) {
		/* _defnames is set, but the domain is not....?? */
		status = ldns_resolver_send(&pkt, (ldns_resolver *)r, name, type, c, 
				flags);
		if (status == LDNS_STATUS_OK) {
			return pkt;
		} else {
			if (pkt) {
				ldns_pkt_free(pkt);
			}
			return NULL;
		}
	}

	newname = ldns_dname_cat_clone((const ldns_rdf*)name, ldns_resolver_domain(r));
	if (!newname) {
		if (pkt) {
			ldns_pkt_free(pkt);
		}
		return NULL;
	}
	status = ldns_resolver_send(&pkt, (ldns_resolver *)r, newname, type, c, 
			flags);

	ldns_rdf_free(newname);

	return pkt;
}
Example #2
0
void
ldns_resolver_deep_free(ldns_resolver *res)
{
    size_t i;

    if (res) {
        if (res->_searchlist) {
            for (i = 0; i < ldns_resolver_searchlist_count(res); i++) {
                ldns_rdf_deep_free(res->_searchlist[i]);
            }
            LDNS_FREE(res->_searchlist);
        }
        if (res->_nameservers) {
            for (i = 0; i < res->_nameserver_count; i++) {
                ldns_rdf_deep_free(res->_nameservers[i]);
            }
            LDNS_FREE(res->_nameservers);
        }
        if (ldns_resolver_domain(res)) {
            ldns_rdf_deep_free(ldns_resolver_domain(res));
        }
        if (res->_tsig_keyname) {
            LDNS_FREE(res->_tsig_keyname);
        }
        if (res->_tsig_keydata) {
            LDNS_FREE(res->_tsig_keydata);
        }
        if (res->_tsig_algorithm) {
            LDNS_FREE(res->_tsig_algorithm);
        }

        if (res->_cur_axfr_pkt) {
            ldns_pkt_free(res->_cur_axfr_pkt);
        }

        if (res->_rtt) {
            LDNS_FREE(res->_rtt);
        }
        if (res->_dnssec_anchors) {
            ldns_rr_list_deep_free(res->_dnssec_anchors);
        }
        LDNS_FREE(res);
    }
}