fix: populate ldns submodule and add autotools to LDNS build stage
- Re-cloned zonemaster-ldns with --recurse-submodules so the bundled ldns C library source (including Changelog and configure.ac) is present - Added autoconf, automake, libtool to Dockerfile.backend ldns-build stage so libtoolize + autoreconf can generate ldns/configure during make Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
97
zonemaster-ldns/ldns/examples/ldns-mx.c
Normal file
97
zonemaster-ldns/ldns/examples/ldns-mx.c
Normal file
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* mx is a small program that prints out the mx records
|
||||
* for a particular domain
|
||||
* (c) NLnet Labs, 2005 - 2008
|
||||
* See the file LICENSE for the license
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <ldns/ldns.h>
|
||||
|
||||
static int
|
||||
usage(FILE *fp, char *prog) {
|
||||
fprintf(fp, "%s domain\n", prog);
|
||||
fprintf(fp, " print out the mx for domain\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
ldns_resolver *res;
|
||||
ldns_rdf *domain;
|
||||
ldns_pkt *p;
|
||||
ldns_rr_list *mx;
|
||||
ldns_status s;
|
||||
|
||||
p = NULL;
|
||||
mx = NULL;
|
||||
domain = NULL;
|
||||
res = NULL;
|
||||
|
||||
if (argc != 2) {
|
||||
usage(stdout, argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
/* create a rdf from the command line arg */
|
||||
domain = ldns_dname_new_frm_str(argv[1]);
|
||||
if (!domain) {
|
||||
usage(stdout, argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (! ldns_dname_str_absolute(argv[1]) &&
|
||||
ldns_dname_absolute(domain)) {
|
||||
|
||||
/* ldns_dname_new_frm_str makes absolute dnames always!
|
||||
* So deabsolutify domain.
|
||||
* TODO: Create ldns_dname_new_frm_str_relative? Yuck!
|
||||
*/
|
||||
ldns_rdf_set_size(domain, ldns_rdf_size(domain) - 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* create a new resolver from /etc/resolv.conf */
|
||||
s = ldns_resolver_new_frm_file(&res, NULL);
|
||||
|
||||
if (s != LDNS_STATUS_OK) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* use the resolver to send a query for the mx
|
||||
* records of the domain given on the command line
|
||||
*/
|
||||
p = ldns_resolver_search(res,
|
||||
domain,
|
||||
LDNS_RR_TYPE_MX,
|
||||
LDNS_RR_CLASS_IN,
|
||||
LDNS_RD);
|
||||
|
||||
ldns_rdf_deep_free(domain);
|
||||
|
||||
if (!p) {
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
/* retrieve the MX records from the answer section of that
|
||||
* packet
|
||||
*/
|
||||
mx = ldns_pkt_rr_list_by_type(p,
|
||||
LDNS_RR_TYPE_MX,
|
||||
LDNS_SECTION_ANSWER);
|
||||
if (!mx) {
|
||||
fprintf(stderr,
|
||||
" *** invalid answer name %s after MX query for %s\n",
|
||||
argv[1], argv[1]);
|
||||
ldns_pkt_free(p);
|
||||
ldns_resolver_deep_free(res);
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
ldns_rr_list_sort(mx);
|
||||
ldns_rr_list_print(stdout, mx);
|
||||
ldns_rr_list_deep_free(mx);
|
||||
}
|
||||
}
|
||||
ldns_pkt_free(p);
|
||||
ldns_resolver_deep_free(res);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user