named-rrchecker.c revision 49c1e0d18d6f8b894ce2e6b485ef666599a83c21
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * Permission to use, copy, modify, and/or distribute this software for any
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * purpose with or without fee is hereby granted, provided that the above
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * copyright notice and this permission notice appear in all copies.
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * PERFORMANCE OF THIS SOFTWARE.
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "usage: named-rrchecker [-o origin] [-hpCPT]\n");
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "\t-h: print this help message\n");
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "\t-o origin: set origin to be used when interpeting the record\n");
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "\t-p: print the record in cannonical format\n");
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "\t-C: list the supported class names\n");
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "\t-T: list the supported standard type names\n");
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "\t-P: list the supported private type names\n");
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington unsigned int options = 0;
9a6bbb206efa528373c31928ebd0b7216c747a13Brian Wellington unsigned int t;
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington while ((c = isc_commandline_parse(argc, argv, "ho:puCPT")) != -1) {
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "%s: invalid argument -%c\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington dns_rdataclass_format(t, text, sizeof(text));
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington dns_rdatatype_format(t, text, sizeof(text));
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington dns_rdatatype_format(t, text, sizeof(text));
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington RUNTIME_CHECK(isc_lex_create(mctx, 256, &lex) == ISC_R_SUCCESS);
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington * Set up to lex DNS master file.
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington isc_lex_setcomments(lex, ISC_LEXCOMMENT_DNSMASTERFILE);
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington RUNTIME_CHECK(isc_lex_openstream(lex, stdin) == ISC_R_SUCCESS);
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington result = dns_name_fromstring(name, origin, 0, NULL);
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "dns_name_fromstring: %s\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington while ((result = isc_lex_gettoken(lex, options | ISC_LEXOPT_NUMBER,
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "class value too big %lu\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "class %lu is a meta value\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington } else if (token.type == isc_tokentype_string) {
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "dns_rdataclass_fromtext: %s\n",
9a6bbb206efa528373c31928ebd0b7216c747a13Brian Wellington "class %.*s(%d) is a meta value\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "unexpected token %u\n", token.type);
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington result = isc_lex_gettoken(lex, options | ISC_LEXOPT_NUMBER,
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "type value too big %lu\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "type %lu is a meta value\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington } else if (token.type == isc_tokentype_string) {
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stdout, "dns_rdatatype_fromtext: %s\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington "type %.*s(%d) is a meta value\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "unexpected token %u\n", token.type);
9a6bbb206efa528373c31928ebd0b7216c747a13Brian Wellington isc_buffer_init(&dbuf, data, sizeof(data));
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington result = dns_rdata_fromtext(&rdata, rdclass, rdtype, lex,
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "dns_rdata_fromtext: %s\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington isc_buffer_init(&tbuf, text, sizeof(text));
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington result = dns_rdataclass_totext(rdclass, &tbuf);
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "dns_rdataclass_totext: %s\n",
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington result = dns_rdatatype_totext(rdtype, &tbuf);
878d3073b13833ee1a50dfeabf8e400b6fdfc754Brian Wellington fprintf(stderr, "dns_rdatatype_totext: %s\n",
if (unknown) {