]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
another nice program from the master
authorMiek Gieben <miekg@NLnetLabs.nl>
Tue, 12 Apr 2005 13:43:11 +0000 (13:43 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Tue, 12 Apr 2005 13:43:11 +0000 (13:43 +0000)
Makefile.in
chaos.c [new file with mode: 0644]
host2str.c
ldns/rr.h
libdns.vim
resolver.c
util.h

index 727e9da382d1f68004d0e1c6483609380b39cce7..72576426f3af5559d0769c9964549c66271cf6f1 100644 (file)
@@ -45,7 +45,7 @@ LIBDNS_HEADERS        =       ldns/error.h            \
                        ldns/higher.h           \
                        ldns/parse.h            \
                        util.h
-PROG_SOURCES   =       mx.c
+PROG_SOURCES   =       mx.c chaos.c
 PROG_TARGETS   =       $(PROG_SOURCES:.c=)
 
 LIBDNS_OBJECTS =       $(LIBDNS_SOURCES:.c=.o)
@@ -84,6 +84,9 @@ snapshot:     clean testclean
 mx:            mx.o $(LIBDNS_OBJECTS) $(LIBOBJS)
                $(LINK) ${LIBS} -o $@ $+
 
+chaos:         chaos.o $(LIBDNS_OBJECTS) $(LIBOBJS)
+               $(LINK) ${LIBS} -o $@ $+
+
 # tests
 
 run-test7:     run-test7.o $(LIBDNS_OBJECTS) $(LIBOBJS)
diff --git a/chaos.c b/chaos.c
new file mode 100644 (file)
index 0000000..582c49e
--- /dev/null
+++ b/chaos.c
@@ -0,0 +1,96 @@
+/*
+ * soa is a small programs that prints out the soa record
+ * for a particulary domain
+ */
+
+#include <stdio.h>
+#include <config.h>
+#include <ldns/ldns.h>
+
+int
+usage(FILE *fp, char *prog) {
+       fprintf(fp, "%s server\n", prog);
+       fprintf(fp, "  print out some information about server\n");
+       return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+       ldns_resolver *res;
+       ldns_rdf *name;
+       ldns_rdf *version, *id;
+       ldns_pkt *p;
+       ldns_rr_list *addr;
+       ldns_rr_list *info;
+       size_t i;
+       
+       if (argc != 2) {
+               usage(stdout, argv[0]);
+               exit(1);
+       } else {
+               /* create a rdf from the command line arg */
+               name = ldns_dname_new_frm_str(argv[1]);
+               if (!name) {
+                       usage(stdout, argv[0]);
+                       exit(1);
+               }
+       }
+
+       version = ldns_dname_new_frm_str("version.bind");
+       id      = ldns_dname_new_frm_str("hostname.bind");
+
+       /* create a new resolver from /etc/resolv.conf */
+       res = ldns_resolver_new_frm_file(NULL);
+       if (!res) {
+               exit(1);
+       }
+
+       /* use the resolver to send it a query for the a/aaaa of name */
+       addr = ldns_get_rr_list_addr_by_name(res, name, LDNS_RR_CLASS_IN, LDNS_RD);
+       if (!addr) {
+               fprintf(stderr, " *** could not get an address for %s", argv[1]);
+               exit(1);
+       }
+       /* remove old nameservers */
+       while(!ldns_resolver_pop_nameserver(res)) { ; }
+       
+       /* can be multihomed */
+       for(i = 0; i < ldns_rr_list_rr_count(addr); i++) {
+               ldns_resolver_push_nameserver_rr(res,
+                               ldns_rr_list_rr(addr, i));
+
+               ldns_rr_print(stdout, ldns_rr_list_rr(addr, i));
+               fprintf(stdout, "\n");
+
+               p = ldns_resolver_query(res, version, LDNS_RR_TYPE_TXT,
+                               LDNS_RR_CLASS_CH, LDNS_RD);
+               if (p) {
+                       info = ldns_pkt_rr_list_by_type(p,
+                                       LDNS_RR_TYPE_TXT, LDNS_SECTION_ANSWER);
+
+                       ldns_rr_list_print(stdout, info);
+               } else {
+                       printf(" *** query failed for %s\n", 
+                                       ldns_rr2str(ldns_rr_list_rr(addr, i)));
+                       ldns_pkt_free(p);
+               }
+
+               p = ldns_resolver_query(res, id, LDNS_RR_TYPE_TXT,
+                               LDNS_RR_CLASS_CH, LDNS_RD);
+               if (p) {
+                       info = ldns_pkt_rr_list_by_type(p,
+                                       LDNS_RR_TYPE_TXT, LDNS_SECTION_ANSWER);
+                       ldns_rr_list_print(stdout, info);
+               } else {
+                       printf(" *** query failed for %s\n", 
+                                       ldns_rr2str(ldns_rr_list_rr(addr, i)));
+               }
+               (void)ldns_resolver_pop_nameserver(res);
+               fprintf(stdout, "\n");
+
+       }
+       exit(0);
+
+        return 0;
+}
index 857d450b6fd7b7cf3b949b4eb33d19eb751d7161..b12adc2498c9e5b5c946e157688f0d860c93b2ce 100644 (file)
@@ -54,7 +54,7 @@ ldns_lookup_table ldns_algorithms[] = {
 /* classes  */
 ldns_lookup_table ldns_rr_classes[] = {
         { LDNS_RR_CLASS_IN, "IN" },
-        { LDNS_RR_CLASS_CHAOS, "CH" },
+        { LDNS_RR_CLASS_CH, "CH" },
         { LDNS_RR_CLASS_HS, "HS" },
         { LDNS_RR_CLASS_ANY, "ANY" },
         { 0, NULL }
index ff336467e45152ad4ac6e7170e53441144f1c3a1..e2ca9aacb844bb7b1af224a98abc8a6a43f42be9 100644 (file)
--- a/ldns/rr.h
+++ b/ldns/rr.h
@@ -38,7 +38,7 @@ enum ldns_enum_rr_class
        /** the Internet */
        LDNS_RR_CLASS_IN        = 1,
        /** Chaos class */
-       LDNS_RR_CLASS_CHAOS     = 3,
+       LDNS_RR_CLASS_CH        = 3,
        /** Hesiod (Dyer 87) */
        LDNS_RR_CLASS_HS        = 4,
        /** Any class */
index ff481a2336d0bbb50876f7b19db5b7db7c1afe20..4e7c261e6eb29c79430ce1cf26f9a931ee824101 100644 (file)
@@ -105,7 +105,7 @@ syn keyword  ldnsType           ldns_rr_class
 syn keyword  ldnsType          ldns_rr_compress
 
 syn keyword  ldnsConstant      LDNS_RR_CLASS_IN
-syn keyword  ldnsConstant      LDNS_RR_CLASS_CHAOS
+syn keyword  ldnsConstant      LDNS_RR_CLASS_CH
 syn keyword  ldnsConstant      LDNS_RR_CLASS_HS  
 syn keyword  ldnsConstant      LDNS_RR_CLASS_ANY 
 
index dbd71a7ae98faf1b6e4382ab1a0783e34a58e6d4..1fb4b8cd78cbf0a3c38ff4cce321732117c46a5a 100644 (file)
@@ -720,6 +720,7 @@ ldns_resolver_send(ldns_resolver *r, ldns_rdf *name, ldns_rr_type type, ldns_rr_
                printf("Failed to generate pkt\n");
                return NULL;
        }
+
        /* transfer the udp_edns_size from the resolver to the packet */
        if (ldns_resolver_edns_udp_size(r) != 0) {
                ldns_pkt_set_edns_udp_size(query_pkt,
@@ -762,7 +763,6 @@ dprintf("RESALGO: %s\n", ldns_resolver_tsig_algorithm(r));
                        return NULL;
                }
        }
-       
        /* return NULL on error */
        for (retries = ldns_resolver_retry(r); retries > 0; retries--) {
                answer_pkt = ldns_send(r, query_pkt);
diff --git a/util.h b/util.h
index 00a6bcc17699fca0194f4b520798f3f0f6d18d1c..703d5eb00c4f110f9c6988e88cda6f8569eade22 100644 (file)
--- a/util.h
+++ b/util.h
@@ -15,8 +15,8 @@
 
 #include <ldns/rr.h>
 
-#define dprintf(X,Y) printf((X), (Y)) 
-/* #define     dprintf(X, Y) */
+/* #define dprintf(X,Y) printf((X), (Y))  */
+#define        dprintf(X, Y) 
 
 /**
  * splint static inline workaround