From: Jelte Jansen Date: Wed, 2 Feb 2005 12:21:48 +0000 (+0000) Subject: run-test7 X-Git-Tag: release-0.50~459 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d985aa17cce34b4f6904902a355a39052ca43c07;p=thirdparty%2Fldns.git run-test7 --- diff --git a/Makefile.in b/Makefile.in index c0c9a209..86ab68e3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -39,7 +39,7 @@ LIBDNS_HEADERS = ldns/error.h \ LIBDNS_OBJECTS = $(LIBDNS_SOURCES:.c=.o) ALL_SOURCES = run-test0.c run-test1.c run-test2.c run-test3.c \ - run-test4.c run-test5.c run-test6.c \ + run-test4.c run-test5.c run-test6.c run-test7.c \ $(LIBDNS_SOURCES) COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) @@ -50,7 +50,7 @@ LINK = $(CC) $(CFLAGS) $(LDFLAGS) .PHONY: clean realclean docclean doc lint test all -all: run-test0 run-test1 run-test2 run-test3 run-test4 run-test5 run-test6 +all: run-test0 run-test1 run-test2 run-test3 run-test4 run-test5 run-test6 run-test7 run-test0: run-test0.o $(LIBDNS_OBJECTS) $(LIBOBJS) $(LINK) ${LIBS} -o $@ $+ @@ -73,6 +73,9 @@ run-test5: run-test5.o $(LIBDNS_OBJECTS) $(LIBOBJS) run-test6: run-test6.o $(LIBDNS_OBJECTS) $(LIBOBJS) $(LINK) ${LIBS} -o $@ $+ +run-test7: run-test7.o $(LIBDNS_OBJECTS) $(LIBOBJS) + $(LINK) ${LIBS} -o $@ $+ + doc: doxygen libdns.doxygen diff --git a/host2str.c b/host2str.c index 92c7cd0e..fdaed668 100644 --- a/host2str.c +++ b/host2str.c @@ -685,7 +685,15 @@ ldns_rr2buffer_str(ldns_buffer *output, ldns_rr *rr) ldns_buffer_printf(output, "%s\t", descriptor->_name); } else { /* exceptions for qtype */ - if (ldns_rr_get_type(rr) == 255) { + if (ldns_rr_get_type(rr) == 251) { + ldns_buffer_printf(output, "IXFR "); + } else if (ldns_rr_get_type(rr) == 252) { + ldns_buffer_printf(output, "AXFR "); + } else if (ldns_rr_get_type(rr) == 253) { + ldns_buffer_printf(output, "MAILB "); + } else if (ldns_rr_get_type(rr) == 254) { + ldns_buffer_printf(output, "MAILA "); + } else if (ldns_rr_get_type(rr) == 255) { ldns_buffer_printf(output, "ANY "); } else { ldns_buffer_printf(output, "TYPE%d\t", ldns_rr_get_type(rr)); diff --git a/rr.c b/rr.c index 020d402f..c89feb0a 100644 --- a/rr.c +++ b/rr.c @@ -524,3 +524,45 @@ ldns_rr_descriptor_field_type(const ldns_rr_descriptor *descriptor, } } +ldns_rr_type +ldns_rr_get_type_by_name(char *name) +{ + unsigned int i; + const char *desc_name; + const ldns_rr_descriptor *desc; + + /* TYPEXX representation */ + if (strlen(name) > 4 && strncasecmp(name, "TYPE", 4) == 0) { + name += 4; + return atoi(name); + } + + /* Normal types */ + for (i = 0; i < (unsigned int) RDATA_FIELD_DESCRIPTORS_COUNT; i++) { + desc = ldns_rr_descript(i); + desc_name = desc->_name; + if(desc_name && + strlen(name) == strlen(desc_name) && + strncasecmp(name, desc_name, strlen(desc_name)) == 0 + ) { + return i; + } + } + + /* special cases for query types */ + /* TODO: generalize? */ + if (strlen(name) == 4 && strncasecmp(name, "IXFR", 4) == 0) { + return 251; + } else if (strlen(name) == 4 && strncasecmp(name, "AXFR", 4) == 0) { + return 252; + } else if (strlen(name) == 5 && strncasecmp(name, "MAILB", 5) == 0) { + return 253; + } else if (strlen(name) == 5 && strncasecmp(name, "MAILA", 5) == 0) { + return 254; + } else if (strlen(name) == 3 && strncasecmp(name, "ANY", 3) == 0) { + return 255; + } + + fprintf(stderr, "Warning: type not found, assuming A\n"); + return 0; +} diff --git a/run-test7.c b/run-test7.c new file mode 100644 index 00000000..e943c6d3 --- /dev/null +++ b/run-test7.c @@ -0,0 +1,95 @@ +/** + * An example ldns program + * + * Setup a resolver + * Query a nameserver + * Print the result + */ + +#include +#include +#include + + +void +print_usage(char *file) +{ + printf("Usage: %s \n", file); + printf("ipv4 only atm\n"); + exit(0); +} + +int +main(int argc, char **argv) +{ + ldns_resolver *res; + ldns_rdf *qname; + ldns_rdf *nameserver; + ldns_pkt *pkt; + char *server_ip; + char *name; + char *type; + + if (argc < 4) { + print_usage(argv[0]); + } else { + type = argv[1]; + name = argv[2]; + server_ip = argv[3]; + } + + /* init */ + res = ldns_resolver_new(); + if (!res) + return 1; + + /* create a default domain and add it */ +/* + default_dom = ldns_rdf_new_frm_str("miek.nl.", LDNS_RDF_TYPE_DNAME); + if (!default_dom) { + printf("error default dom\n"); + return 1; + } +*/ + nameserver = ldns_rdf_new_frm_str(server_ip, LDNS_RDF_TYPE_A); + if (!nameserver) { + printf("Bad server ip\n"); + return 1; + } + +/* + if (ldns_resolver_set_domain(res, default_dom) != LDNS_STATUS_OK) { + printf("error set domain\n"); + return 1; + } +*/ + if (ldns_resolver_push_nameserver(res, nameserver) != LDNS_STATUS_OK) { + printf("error push nameserver\n"); + return 1; + } + + /* hack to make the resolver appear to + * be configued - don't know if we need this + */ + ldns_resolver_set_configured(res, 1); + + /* setup the question */ + qname = ldns_rdf_new_frm_str(name, LDNS_RDF_TYPE_DNAME); + if (!qname) { + printf("error making qname\n"); + return 1; + } + + /* fire it off. "miek.nl." will be added */ + pkt = ldns_resolver_send(res, qname, ldns_rr_get_type_by_name(type), 0); + + if (!pkt) { + printf("error pkt sending\n"); + return 1; + } + + /* print the resulting pkt to stdout */ + ldns_pkt_print(stdout, pkt); + + return 0; +}