summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordu.net>2016-04-03 18:53:38 +0200
committerLinus Nordberg <linus@nordu.net>2016-04-03 18:53:38 +0200
commitd2943b6d798259fd635a8adf0b04c31503b97f0c (patch)
tree57f367f4ccf5e47bee1c3926da0abe01204633cb
parenta8c5ee6beb28d8fed3281874026c005f4d6e56da (diff)
Add dns-text2wire.
-rw-r--r--tools/dnssec/Makefile4
-rw-r--r--tools/dnssec/dns-text2wire.c44
2 files changed, 47 insertions, 1 deletions
diff --git a/tools/dnssec/Makefile b/tools/dnssec/Makefile
index 7c3f2fb..77d2081 100644
--- a/tools/dnssec/Makefile
+++ b/tools/dnssec/Makefile
@@ -1,10 +1,12 @@
CFLAGS = -Wall -g -std=c99
CFLAGS_PEDANTIC = -pedantic -Werror -Wextra
-all: dns-net2wire dns-wire2text net2wire validatechain
+all: dns-net2wire dns-wire2text dns-text2wire net2wire validatechain
dns-net2wire: dns-net2wire.c common.c
$(CC) $(CFLAGS) -o $@ -lgetdns -lgetdns_ext_event -levent $^
+dns-text2wire: dns-text2wire.c
+ $(CC) $(CFLAGS) -o $@ -lgetdns $^
dns-wire2text: dns-wire2text.c common.c
$(CC) $(CFLAGS) $(CFLAGS_PEDANTIC) -o $@ -lgetdns -lgetdns_ext_event -levent $^
validatechain: validatechain.c common.c
diff --git a/tools/dnssec/dns-text2wire.c b/tools/dnssec/dns-text2wire.c
new file mode 100644
index 0000000..99d418f
--- /dev/null
+++ b/tools/dnssec/dns-text2wire.c
@@ -0,0 +1,44 @@
+/*
+ Read RR's in zone file format and write them in wire format.
+*/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <assert.h>
+#include <getdns/getdns.h>
+#include <getdns/getdns_extra.h>
+
+int
+main(int argc, char *argv[])
+{
+ FILE *fp = stdin;
+ if (argc > 1)
+ fp = fopen(argv[1], "r");
+ assert(fp);
+ getdns_list *list = NULL;
+ getdns_return_t r = getdns_fp2rr_list(fp, &list, NULL, 3600);
+ if (argc > 1)
+ fclose(fp);
+ if (r)
+ {
+ fprintf(stderr, "getdns_fp2rr_list: %d\n", r);
+ return r;
+ }
+
+ size_t len;
+ r = getdns_list_get_length(list, &len);
+ assert(!r);
+ for (int i = 0; i < len; i++)
+ {
+ getdns_dict *rr = NULL;
+ r = getdns_list_get_dict(list, i , &rr);
+ assert(!r);
+ uint8_t *buf = NULL;
+ size_t buf_len;
+ r = getdns_rr_dict2wire(rr, &buf, &buf_len);
+ assert(!r);
+ ssize_t n = write(1, buf, buf_len);
+ assert(n == buf_len);
+ }
+ return 0;
+}