diff options
Diffstat (limited to 'tools/dnssec/dns-text2wire.c')
-rw-r--r-- | tools/dnssec/dns-text2wire.c | 44 |
1 files changed, 44 insertions, 0 deletions
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; +} |