host.c revision ec5347e2c775f027573ce5648b910361aa926c01
a134177ed9f82189504191d90f3ed9e97c2b47cbTinderbox User * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * Copyright (C) 2000-2003 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and/or distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * copyright notice and this permission notice appear in all copies.
28a8f5b0de57d269cf2845c69cb6abe18cbd3b3aMark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
058e44186b74531402c1f99088eb9dbe4926f8daMark Andrews * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * PERFORMANCE OF THIS SOFTWARE.
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews/* $Id: host.c,v 1.114 2007/06/18 23:47:17 tbox Exp $ */
058e44186b74531402c1f99088eb9dbe4926f8daMark Andrewsstatic isc_boolean_t short_form = ISC_TRUE, listed_server = ISC_FALSE;
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrewsstatic isc_boolean_t default_lookups = ISC_TRUE;
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrewsstatic dns_rdatatype_t list_type = dns_rdatatype_a;
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrewsstatic isc_boolean_t printed_server = ISC_FALSE;
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrewsstatic const char *opcodetext[] = {
37dee1ff94960a61243f611c0f87f8c316815c53Mark Andrews "RESERVED3",
37dee1ff94960a61243f611c0f87f8c316815c53Mark Andrews "RESERVED6",
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt "RESERVED7",
37dee1ff94960a61243f611c0f87f8c316815c53Mark Andrews "RESERVED8",
37dee1ff94960a61243f611c0f87f8c316815c53Mark Andrews "RESERVED9",
37dee1ff94960a61243f611c0f87f8c316815c53Mark Andrews "RESERVED10",
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt "RESERVED11",
aaaf8d4f4873d21e55c3ffb4f656203d08339865Mark Andrews "RESERVED12",
aaaf8d4f4873d21e55c3ffb4f656203d08339865Mark Andrews "RESERVED13",
aaaf8d4f4873d21e55c3ffb4f656203d08339865Mark Andrews "RESERVED14",
37dee1ff94960a61243f611c0f87f8c316815c53Mark Andrews "RESERVED15"
37dee1ff94960a61243f611c0f87f8c316815c53Mark Andrewsstatic const char *rcodetext[] = {
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrews "RESERVED11",
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrews "RESERVED12",
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrews "RESERVED13",
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews "RESERVED14",
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews "RESERVED15",
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews unsigned int type;
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews const char *text;
ad1317338af79edad878c9c3e4361798503310baMark Andrews"Usage: host [-aCdlriTwv] [-c class] [-N ndots] [-t type] [-W time]\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" [-R number] [-m flag] hostname [server]\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -a is equivalent to -v -t ANY\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -c specifies query class for non-IN data\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -C compares SOA records on authoritative nameservers\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -d is equivalent to -v\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -l lists all hosts in a domain, using AXFR\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -i IP6.INT reverse lookups\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -N changes the number of dots allowed before root lookup is done\n"
75ae74f8fd0847817bce2db7c868b179db67f019Mark Andrews" -r disables recursive processing\n"
75ae74f8fd0847817bce2db7c868b179db67f019Mark Andrews" -R specifies number of retries for UDP packets\n"
75ae74f8fd0847817bce2db7c868b179db67f019Mark Andrews" -s a SERVFAIL response should stop query\n"
75ae74f8fd0847817bce2db7c868b179db67f019Mark Andrews" -t specifies the query type\n"
75ae74f8fd0847817bce2db7c868b179db67f019Mark Andrews" -T enables TCP/IP mode\n"
75ae74f8fd0847817bce2db7c868b179db67f019Mark Andrews" -v enables verbose output\n"
21c8938824a2445bc750ba9c395a0d857f50ad72Tinderbox User" -w specifies to wait forever for a reply\n"
75ae74f8fd0847817bce2db7c868b179db67f019Mark Andrews" -W specifies how long to wait for a reply\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -4 use IPv4 query transport only\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -6 use IPv6 query transport only\n"
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews" -m set memory debugging flag (trace|record|usage)\n", stderr);
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrewsreceived(int bytes, isc_sockaddr_t *from, dig_query_t *query) {
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews isc_sockaddr_format(from, fromtext, sizeof(fromtext));
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews diff = (int) isc_time_microdiff(&now, &query->time_sent);
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntsay_message(dns_name_t *name, const char *msg, dns_rdata_t *rdata,
394f4aec2189750d7f861d00f97fe28ffcd9f659Mark Andrews dns_name_format(name, namestr, sizeof(namestr));
394f4aec2189750d7f861d00f97fe28ffcd9f659Mark Andrews result = isc_buffer_allocate(mctx, &b, bufsize);
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews/* Just for compatibility : not use in host program */
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrewsprintrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset,
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrewsprintsection(dns_message_t *msg, dns_section_t sectionid,
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews const char *section_name, isc_boolean_t headers,
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews char t[4096];
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrews result = dns_message_firstname(msg, sectionid);
394f4aec2189750d7f861d00f97fe28ffcd9f659Mark Andrews dns_message_currentname(msg, sectionid, &name);
aaaf8d4f4873d21e55c3ffb4f656203d08339865Mark Andrews if (query->lookup->rdtype == dns_rdatatype_axfr &&
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews const char *rtt;
b0ba1a6059b6d6c4b3aa77d8bc84cc443b981e01Mukund Sivaramanprintrdata(dns_message_t *msg, dns_rdataset_t *rdataset, dns_name_t *owner,
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews char t[4096];
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews result = dns_rdataset_totext(rdataset, owner, ISC_FALSE, ISC_FALSE,
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrewschase_cnamechain(dns_message_t *msg, dns_name_t *qname) {
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews unsigned int i = msg->counts[DNS_SECTION_ANSWER];
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews while (i-- > 0) {
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews result = dns_message_findname(msg, DNS_SECTION_ANSWER, qname,
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews result = dns_rdata_tostruct(&rdata, &cname, NULL);
int force_error;
sizeof(sockstr));
return (ISC_R_SUCCESS);
if (!short_form) {
!short_form) {
return (result);
if (!short_form)
return (result);
!short_form) {
return (result);
!short_form) {
return (result);
return (result);
if (!short_form)
sizeof(typestr));
return (result);
isc_commandline_argument) == 0)
isc_commandline_argument) == 0)
show_usage();
#ifdef WITH_IDN
idnoptions = 0;
#ifdef WITH_IDN
if (have_ipv4) {
if (have_ipv6) {
show_usage();
#ifdef WITH_IDN
setup_libs();
setup_system();
isc_app_run();
cancel_all();
destroy_libs();