1633838b8255282d10af15c5c84cee5a51466712Bob Halley/*
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 1998-2001, 2003-2005, 2007, 2009, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
1633838b8255282d10af15c5c84cee5a51466712Bob Halley */
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
d7201de09b85929a86b157f4b2d91667c68c6b52Automatic Updater/* $Id: name_test.c,v 1.43 2009/09/02 23:48:01 tbox Exp $ */
9c3531d72aeaad6c5f01efe6a1c82023e1379e4dDavid Lawrence
d25afd60ee2286cb171c4960a790f3d7041b6f85Bob Halley#include <config.h>
d25afd60ee2286cb171c4960a790f3d7041b6f85Bob Halley
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley#include <stdlib.h>
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
6a759e38699d133302d0df120d7afcd4af721951David Lawrence#include <isc/commandline.h>
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont#include <isc/print.h>
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence#include <isc/string.h>
7df0472d8a76c83d2137bd9549414a30787d58cfBrian Wellington#include <isc/util.h>
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
af24ac2d39e044dc53d64d21974bde6ac081b80dBob Halley#include <dns/fixedname.h>
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence#include <dns/result.h>
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halleystatic void
3740b569ae76295b941d57a724a43beb75b533baBob Halleyprint_wirename(isc_region_t *name) {
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley unsigned char *ccurr, *cend;
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley if (name->length == 0) {
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley printf("<empty wire name>\n");
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley return;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley }
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley ccurr = name->base;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley cend = ccurr + name->length;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley while (ccurr != cend)
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley printf("%02x ", *ccurr++);
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley printf("\n");
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley}
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halleystatic void
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halleyprint_name(dns_name_t *name) {
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley isc_result_t result;
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley isc_buffer_t source;
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley isc_region_t r;
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley char s[1000];
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&source, s, sizeof(s));
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley if (dns_name_countlabels(name) > 0)
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley result = dns_name_totext(name, ISC_FALSE, &source);
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley else
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff result = ISC_R_SUCCESS;
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff if (result == ISC_R_SUCCESS) {
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_usedregion(&source, &r);
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley if (r.length > 0)
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley printf("%.*s\n", (int)r.length, r.base);
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley else
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley printf("<empty text name>\n");
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley } else
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley printf("error: %s\n", dns_result_totext(result));
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley}
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halleyint
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halleymain(int argc, char *argv[]) {
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley char s[1000];
3ddd814a97de1d152ba0913c592d6e6dc83d38a6Michael Graff isc_result_t result;
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley dns_fixedname_t wname, wname2, oname, compname, downname;
af24ac2d39e044dc53d64d21974bde6ac081b80dBob Halley isc_buffer_t source;
4bc30f45a225947a298f706a8522c9d30915d137Bob Halley isc_region_t r;
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley dns_name_t *name, *origin, *comp, *down;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 unsigned int downcase = 0;
4bc30f45a225947a298f706a8522c9d30915d137Bob Halley size_t len;
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley isc_boolean_t quiet = ISC_FALSE;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley isc_boolean_t concatenate = ISC_FALSE;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley isc_boolean_t got_name = ISC_FALSE;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley isc_boolean_t check_absolute = ISC_FALSE;
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley isc_boolean_t check_wildcard = ISC_FALSE;
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley isc_boolean_t test_downcase = ISC_FALSE;
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley isc_boolean_t inplace = ISC_FALSE;
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley isc_boolean_t want_split = ISC_FALSE;
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 unsigned int labels, split_label = 0;
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley dns_fixedname_t fprefix, fsuffix;
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley dns_name_t *prefix, *suffix;
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley int ch;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley while ((ch = isc_commandline_parse(argc, argv, "acdiqs:w")) != -1) {
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley switch (ch) {
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley case 'a':
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley check_absolute = ISC_TRUE;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley break;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley case 'c':
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley concatenate = ISC_TRUE;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley break;
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley case 'd':
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley test_downcase = ISC_TRUE;
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley break;
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley case 'i':
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley inplace = ISC_TRUE;
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley break;
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley case 'q':
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley quiet = ISC_TRUE;
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley break;
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley case 's':
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley want_split = ISC_TRUE;
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 split_label = atoi(isc_commandline_argument);
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley break;
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley case 'w':
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley check_wildcard = ISC_TRUE;
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley break;
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley }
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley }
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley
6a759e38699d133302d0df120d7afcd4af721951David Lawrence argc -= isc_commandline_index;
6a759e38699d133302d0df120d7afcd4af721951David Lawrence argv += isc_commandline_index;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley if (argc > 0) {
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley if (strcasecmp("none", argv[0]) == 0)
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley origin = NULL;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley else {
4bc30f45a225947a298f706a8522c9d30915d137Bob Halley len = strlen(argv[0]);
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&source, argv[0], len);
4bc30f45a225947a298f706a8522c9d30915d137Bob Halley isc_buffer_add(&source, len);
af24ac2d39e044dc53d64d21974bde6ac081b80dBob Halley dns_fixedname_init(&oname);
af24ac2d39e044dc53d64d21974bde6ac081b80dBob Halley origin = &oname.name;
af24ac2d39e044dc53d64d21974bde6ac081b80dBob Halley result = dns_name_fromtext(origin, &source,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dns_rootname, 0, NULL);
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley if (result != 0) {
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley fprintf(stderr,
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley "dns_name_fromtext() failed: %d\n",
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley result);
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley exit(1);
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley }
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley }
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley } else if (concatenate)
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley origin = NULL;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley else
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley origin = dns_rootname;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
a8e12a91944a804be822c1d27287f41964c053d8Bob Halley if (argc >= 1) {
27f8e3bfa0a33e068ccb3efe3589d40f9e3c3639Bob Halley if (strcasecmp("none", argv[1]) == 0)
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley comp = NULL;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley else {
27f8e3bfa0a33e068ccb3efe3589d40f9e3c3639Bob Halley len = strlen(argv[1]);
27f8e3bfa0a33e068ccb3efe3589d40f9e3c3639Bob Halley isc_buffer_init(&source, argv[1], len);
4bc30f45a225947a298f706a8522c9d30915d137Bob Halley isc_buffer_add(&source, len);
af24ac2d39e044dc53d64d21974bde6ac081b80dBob Halley dns_fixedname_init(&compname);
af24ac2d39e044dc53d64d21974bde6ac081b80dBob Halley comp = &compname.name;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 result = dns_name_fromtext(comp, &source, origin,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 0, NULL);
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley if (result != 0) {
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley fprintf(stderr,
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley "dns_name_fromtext() failed: %d\n",
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley result);
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley exit(1);
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley }
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley }
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley } else
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley comp = NULL;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
af24ac2d39e044dc53d64d21974bde6ac081b80dBob Halley dns_fixedname_init(&wname);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley name = dns_fixedname_name(&wname);
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley dns_fixedname_init(&wname2);
91cd0f93ad34d23e8b09dca337120f64fbe8f0a1Andreas Gustafsson while (fgets(s, sizeof(s), stdin) != NULL) {
4bc30f45a225947a298f706a8522c9d30915d137Bob Halley len = strlen(s);
b6b21d80450f81d873d7e8cd21e7b72fdf512507Mark Andrews if (len > 0U && s[len - 1] == '\n') {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley s[len - 1] = '\0';
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley len--;
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley }
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&source, s, len);
4bc30f45a225947a298f706a8522c9d30915d137Bob Halley isc_buffer_add(&source, len);
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley
b6b21d80450f81d873d7e8cd21e7b72fdf512507Mark Andrews if (len > 0U)
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley result = dns_name_fromtext(name, &source, origin,
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley downcase, NULL);
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley else {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (name == dns_fixedname_name(&wname))
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley dns_fixedname_init(&wname);
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley else
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley dns_fixedname_init(&wname2);
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff result = ISC_R_SUCCESS;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley }
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff if (result != ISC_R_SUCCESS) {
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley printf("%s\n", dns_result_totext(result));
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (name == dns_fixedname_name(&wname))
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley dns_fixedname_init(&wname);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley else
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley dns_fixedname_init(&wname2);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley continue;
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley }
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (check_absolute && dns_name_countlabels(name) > 0) {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (dns_name_isabsolute(name))
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("absolute\n");
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley else
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("relative\n");
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley }
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley if (check_wildcard && dns_name_countlabels(name) > 0) {
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley if (dns_name_iswildcard(name))
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley printf("wildcard\n");
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley else
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley printf("not wildcard\n");
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley }
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley dns_name_toregion(name, &r);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (!quiet) {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley print_wirename(&r);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("%u labels, %u bytes.\n",
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley dns_name_countlabels(name), r.length);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley }
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (concatenate) {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (got_name) {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("Concatenating.\n");
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley result = dns_name_concatenate(&wname.name,
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley &wname2.name,
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley &wname2.name,
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley NULL);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley name = &wname2.name;
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff if (result == ISC_R_SUCCESS) {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (check_absolute &&
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley dns_name_countlabels(name) > 0) {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (dns_name_isabsolute(name))
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("absolute\n");
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley else
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("relative\n");
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley }
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley if (check_wildcard &&
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley dns_name_countlabels(name) > 0) {
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley if (dns_name_iswildcard(name))
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley printf("wildcard\n");
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley else
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley printf("not "
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley "wildcard\n");
ea4d349e2b61cab2bef35c53406baa3647c9bf67Bob Halley }
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley dns_name_toregion(name, &r);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (!quiet) {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley print_wirename(&r);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("%u labels, "
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley "%u bytes.\n",
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley dns_name_countlabels(name),
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley r.length);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley }
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley } else
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("%s\n",
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley dns_result_totext(result));
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley got_name = ISC_FALSE;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley } else
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley got_name = ISC_TRUE;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley }
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&source, s, sizeof(s));
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (dns_name_countlabels(name) > 0)
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley result = dns_name_totext(name, ISC_FALSE, &source);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley else
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff result = ISC_R_SUCCESS;
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff if (result == ISC_R_SUCCESS) {
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_usedregion(&source, &r);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (r.length > 0)
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("%.*s\n", (int)r.length, r.base);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley else
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("<empty text name>\n");
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley if (!quiet) {
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("%u bytes.\n", source.used);
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley }
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley } else
802a7c6d879fc5dec2fff002ac1457a4f8d5898dBob Halley printf("%s\n", dns_result_totext(result));
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley if (test_downcase) {
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley if (inplace) {
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley down = name;
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley } else {
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley dns_fixedname_init(&downname);
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley down = dns_fixedname_name(&downname);
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley }
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley result = dns_name_downcase(name, down, NULL);
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley INSIST(result == ISC_R_SUCCESS);
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley if (!quiet) {
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley dns_name_toregion(down, &r);
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley print_wirename(&r);
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley printf("%u labels, %u bytes.\n",
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley dns_name_countlabels(down),
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley r.length);
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley }
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&source, s, sizeof(s));
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley print_name(down);
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley }
35a7ec9864d4be5f8f00ea13b8d815a6a1e7f421Bob Halley
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley if (comp != NULL && dns_name_countlabels(name) > 0) {
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley int order;
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 unsigned int nlabels;
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley dns_namereln_t namereln;
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley
af24ac2d39e044dc53d64d21974bde6ac081b80dBob Halley namereln = dns_name_fullcompare(name, comp, &order,
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 &nlabels);
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley if (!quiet) {
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley if (order < 0)
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley printf("<");
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley else if (order > 0)
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley printf(">");
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley else
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley printf("=");
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley switch (namereln) {
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley case dns_namereln_contains:
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley printf(", contains");
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley break;
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley case dns_namereln_subdomain:
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley printf(", subdomain");
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley break;
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley case dns_namereln_commonancestor:
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley printf(", common ancestor");
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley break;
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley default:
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley break;
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley }
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley if (namereln != dns_namereln_none &&
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley namereln != dns_namereln_equal)
f38cee63260a466e97ea92bc00cc4155955723daMark Andrews printf(", nlabels = %u", nlabels);
30ff476f619d84de925be4a3d95a469b25d81271Bob Halley printf("\n");
28fb4b818b982f2eb50580f7a9f2cad67c5fecceBob Halley }
a8e12a91944a804be822c1d27287f41964c053d8Bob Halley printf("dns_name_equal() returns %s\n",
a8e12a91944a804be822c1d27287f41964c053d8Bob Halley dns_name_equal(name, comp) ? "TRUE" : "FALSE");
514a93f41f53f7c142008de1acac5fcd5e0e430bBob Halley }
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 labels = dns_name_countlabels(name);
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 if (want_split && split_label < labels) {
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley dns_fixedname_init(&fprefix);
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley prefix = dns_fixedname_name(&fprefix);
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley dns_fixedname_init(&fsuffix);
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley suffix = dns_fixedname_name(&fsuffix);
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 printf("splitting at label %u: ", split_label);
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 dns_name_split(name, split_label, prefix, suffix);
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 printf("\n prefix = ");
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 print_name(prefix);
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 printf(" suffix = ");
e407562a75eb93073bb72089cced150d7ffe4d4fTatuya JINMEI 神明達哉 print_name(suffix);
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley }
6c6d0a2a0636b97eb32fef403579f1f97a9ebf47Bob Halley
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley if (concatenate) {
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley if (got_name)
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley name = &wname2.name;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley else
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley name = &wname.name;
1fdbe90dc4815d3542ee71de181735ad4a904456Bob Halley }
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley }
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley return (0);
c50fd34a4e0e6978f8ca5f6f3ad8545549c3cfeeBob Halley}