diff options
author | Linus Nordberg <linus@nordu.net> | 2016-04-03 18:53:38 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordu.net> | 2016-04-07 16:06:12 +0200 |
commit | 57690b920ded6590c6109752ca05faf47f2e2795 (patch) | |
tree | 7bbc81c4a068859c62b3720d65d911f40b5cdfca | |
parent | 0521e9f87d0badb2a15fd29e92c85f1457eb58cb (diff) |
Add dns-text2wire.
-rw-r--r-- | tools/dnssec/Makefile | 4 | ||||
-rw-r--r-- | tools/dnssec/dns-text2wire.c | 44 |
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; +} |