3 * - useful general-purpose resolver client program
6 * This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software Foundation,
20 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29 static void sysfail(const char *what
, int errnoval
) NONRETURNING
;
30 static void sysfail(const char *what
, int errnoval
) {
31 fprintf(stderr
,"adnshost failed: %s: %s\n",what
,strerror(errnoval
));
36 static void printusage(void) {
38 ("usage: adnshost [global-opts] [query-opts] query-type query-domain\n"
39 " [[query-opts] [query-type] query-domain ...]\n"
40 " adnshost [global-opts] [query-opts] -f|--pipe\n"
42 "global binary options:\n"
43 " +e --no-env No not look at environment variables at all.\n"
44 " -f --pipe Read queries on stdin instead of using args.\n"
45 " -A --asynch Allow answers to be reordered.\n"
46 " -0 --null stdin items are delimited by nulls.\n"
47 "global verbosity level:\n"
48 " -vq --quiet Do not print anything to stderr.\n"
49 " -vn --no-quiet Report unexpected kinds of problem only.\n"
50 " -vd --debug Debugging mode.\n"
51 "other global options:\n"
52 " --help, --version Print usage or version information.\n"
54 "per-query binary options:\n"
55 " -R --search Use the search list.\n"
56 " -Qq --qc-query Let query domains contain quote-requiring chars.\n"
57 " -Qa --qc-anshost Let hostnames in answers contain ...\n"
58 " +Qc --no-qc-cname Prevent CNAME target domains from containing ...\n"
59 " -u --tcp Force use of a virtual circuit.\n"
60 " +fo --no-owner Do not display owner name in output.\n"
61 " +ft --no-type Do not display RR type in output.\n"
62 " +fc --no-show-cname Do not display CNAME target in output.\n"
63 "per-query TTL mode (NB TTL is minimum across whole query reply):\n"
64 " -Tt --ttl-ttl Show the TTL as a TTL.\n"
65 " -Ta --ttl-abs Show the TTL as a time_t when the data might expire.\n"
66 " -Tn --no-ttl Do not show the TTL (default).\n"
67 "per-query cname handling mode:\n"
68 " -cf --cname-reject Call it an error if a CNAME is found.\n"
69 " -cl --cname-loose Allow references to CNAMEs in other RRs.\n"
70 " -cs --cname-ok CNAME ok for query domain, but not in RRs (default).\n"
71 "other per-query options:\n"
72 " -I<id> ) Set the <id> to print in the output with --async.\n"
73 " --asynch-id <id> ) Default is a sequence number in decimal starting at 0.\n"
75 "For binary options, --FOO and --no-FOO are opposites,\n"
76 "as are -X and +X; in each case the default is the one not listed.\n"
77 "Per query options stay set a particular way until they are reset,\n"
78 "whether they appear on the command line or on stdin.\n"
80 "Output format is master file format without class or TTL by default:\n"
81 " [<owner>] [<ttl>] [<type>] <data>\n"
82 "or if the <owner> domain refers to a CNAME and --show-cname is on\n"
83 " [<owner>] [<ttl>] CNAME <cname>\n"
84 " [<cname>] [<ttl>] <type> <data>\n"
85 "When a query fails you get a line like:\n"
86 " ; failed <statustype> [<owner>] [<ttl>] [<type>] <status> \"<status string>\"\n"
87 "If you use --asynch, you don't get that. Instead, each answer (success or\n"
88 "failure) is preceded by a line:\n"
89 " <id> <statustype> <status> <nrrs> [<cname>] \"<status string>\"\n"
90 "where <nrrs> is the number of RRs that follow and <cname> will be `$' or\n"
91 "the canonical name.\n"
93 "With -f, the input should be a list of arguments one per line (ie separated\n"
94 "by newlines), or separated by null characters if -0 or --null was used\n"
98 " 1-6 at least one query failed with statustype:\n"
100 " 2 remotefail ) temporary errors\n"
101 " 3 tempfail __)_________________\n"
103 " 5 misquery ) permanent errors\n"
105 " 10 system trouble\n"
106 " 11 usage problems\n"
108 "Query types (see adns.h):\n"
109 " NS SOA PTR MX RP A - enhanced versions\n"
110 " CNAME HINFO TXT - types with only one version\n"
111 " A- NS- SOA- PTR- MX- RP- - _raw versions\n",
112 stdout
) == EOF
) sysfail("write usage message",errno
);
115 int main(int argc
, const char *const *argv
) {
117 if (fclose(stdout
)) sysfail("finish writing output",errno
);