]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
run-test7
authorJelte Jansen <jeltejan@NLnetLabs.nl>
Wed, 2 Feb 2005 12:21:48 +0000 (12:21 +0000)
committerJelte Jansen <jeltejan@NLnetLabs.nl>
Wed, 2 Feb 2005 12:21:48 +0000 (12:21 +0000)
Makefile.in
host2str.c
rr.c
run-test7.c [new file with mode: 0644]

index c0c9a209f4f874f5e69906d3a034926d658d5402..86ab68e33ca9235eb37dd6532ccbfa63ff750fca 100644 (file)
@@ -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
 
index 92c7cd0e9d4b981ee414ac0ab40a27cedb0113c5..fdaed668cbb041599e3fae1351272d9eefb8d59e 100644 (file)
@@ -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 020d402f68f502e02d8b98074ea53eeccd8109af..c89feb0a62adbfc8ef4c48246687929b0b929858 100644 (file)
--- 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 (file)
index 0000000..e943c6d
--- /dev/null
@@ -0,0 +1,95 @@
+/**
+ * An example ldns program
+ *
+ * Setup a resolver
+ * Query a nameserver
+ * Print the result
+ */
+
+#include <config.h>
+#include <ldns/resolver.h>
+#include <ldns/ldns.h>
+        
+
+void
+print_usage(char *file)
+{
+       printf("Usage: %s <type> <name> <server ip>\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;
+}