- Re-cloned zonemaster-ldns with --recurse-submodules so the bundled ldns C library source (including Changelog and configure.ac) is present - Added autoconf, automake, libtool to Dockerfile.backend ldns-build stage so libtoolize + autoreconf can generate ldns/configure during make Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
185 lines
6.0 KiB
Groff
185 lines
6.0 KiB
Groff
'\" t
|
|
.TH PCAT-DIFF 1 "08 Mar 2006" "pcat utils"
|
|
.SH NAME
|
|
pcat-diff \- show the difference between two pcat files.
|
|
.SH SYNOPSIS
|
|
.B pcat-diff
|
|
.IR PCAT_FILE1
|
|
.IR PCAT_FILE2
|
|
|
|
.SH DESCRIPTION
|
|
\fBpcat-diff\fR reads in two pcat files and show the differences
|
|
between them.
|
|
Its output is another pcat stream which can then be interpreted by
|
|
pcat-print.
|
|
|
|
pcat-diff can also do advanced checking against a number of specification,
|
|
for instance to count the number of known differences between two
|
|
implementations.
|
|
|
|
You can let pcat-diff do more intelligent checking on the differences between
|
|
two outputs of pcat. In this mode, pcat-diff takes an argument specifying a
|
|
directory containing files whose name end in .match. These files specify
|
|
'Known' differences. It works like this:
|
|
|
|
If a difference between two answer packets is found, the packet is first
|
|
normalized; the packet dates is changed to match, and each section is
|
|
sorted. If these changes still don't make the packets equal, the
|
|
match-specifications in the specified directory are consulted.
|
|
|
|
These specifications contain 3 elements; a 1-line description of the type of
|
|
difference, a specification the question must match, and a specification
|
|
that both answer packets must match.
|
|
|
|
The first line contains the specification, the following lines the
|
|
specifications, separated by a line starting with an exclamation mark.
|
|
|
|
A specification looks like the normal output of drill and dig. It is based
|
|
on the text representation format from the DNS RFCs. It can contain the
|
|
following special characters:
|
|
|
|
* whitespace: whitespace is skipped and ignored
|
|
* ?: Following a question mark, all characters up to the
|
|
next whitespace are optional, so they can either
|
|
exist or not in the answer
|
|
* []: Square brackets contain a list of words/values of
|
|
which exactly one must be present in the packets.
|
|
* *: A star specifies that the packets may contain
|
|
everything until it matches the next character in
|
|
the specification. You can use multiple stars in a
|
|
row, the number of stars specify the number of next
|
|
characters that must match before continuing.
|
|
* &: The ampersand works the same as the *, but in this
|
|
case the value that matches must be exactly the
|
|
same in both packets.
|
|
|
|
There are 2 special cases that can be used instead of a packet description:
|
|
|
|
* BADPACKET: if you use this as the complete description
|
|
of the query packet, this matches any query
|
|
that cannot be parsed
|
|
* NOANSWER: if you use this as the complete description
|
|
of the answer packet, this matches *both*
|
|
packets if *one* had no answer (the other
|
|
packet is ignored, if both packets had no
|
|
answer, they were equal anyway)
|
|
|
|
|
|
Example:
|
|
|
|
Different additional section
|
|
*
|
|
!
|
|
;; ->>HEADER<<- opcode: &, rcode: &, id: &
|
|
;; flags: & ; QUERY: &, ANSWER: &, AUTHORITY: &, ADDITIONAL: &
|
|
;; QUESTION SECTION:
|
|
;; &&&&&
|
|
|
|
;; ANSWER SECTION:
|
|
&&&&&
|
|
|
|
;; AUTHORITY SECTION:
|
|
&&&&&
|
|
|
|
;; ADDITIONAL SECTION:
|
|
*****
|
|
|
|
;; Query time: & msec
|
|
&&&&&
|
|
;; WHEN: &
|
|
;; MSG SIZE rcvd: &
|
|
|
|
The description of this examples is 'Different additional section'.
|
|
|
|
The query specification contains only one *, so every query matches this.
|
|
|
|
The answer specification specifies that the packets must be completely
|
|
equal, except for the additional part. The additional part must, however,
|
|
contain an equal amount of entries (see the & after ADDITIONAL in line 2).
|
|
|
|
In the question section, 5 &'s are used, so that everything passes until the
|
|
packets contain the text ';; AU'. This could of course be expanded to
|
|
completely match the text ';; AUTHORITY SECTION', by using even more
|
|
ampersands.
|
|
|
|
|
|
If pcat-diff in advanced mode encounters a difference which is not known, it
|
|
prints the index number, query, and both answers, and then quits. It is
|
|
expected that the user studies the new and unexpected difference, captures
|
|
it in a match specification, and runs pcat-diff again. To speed up the
|
|
process of finding all differences, you can start from the index number that
|
|
was printed by using the option -s <index>.
|
|
|
|
If you want to know a bit more about why the packets did not match, you can
|
|
specify verbose mode with -v. It is not advisable to do this on the complete
|
|
input, but rather use -s to start with the offending packet. Verbose mode
|
|
produces a LOT of output.
|
|
|
|
If the complete files have been read, and no unknown differences have been
|
|
found, statistics are printed about the known differences encountered.
|
|
Because this can take a long time, you can use '-p <nr>' to print
|
|
preliminary results every nr packets.
|
|
|
|
|
|
.PP
|
|
If PCAT_FILE2 is not given, standard input is read.
|
|
|
|
.SH OPTIONS
|
|
.TP
|
|
\fB-d\fR \fIdirectory\fR
|
|
Directory containing match files, this options sets the advanced checking mode, see manpage
|
|
|
|
.TP
|
|
\fB-h\fR
|
|
Show usage
|
|
|
|
.TP
|
|
\fB-m\fR \fInumber\fR
|
|
only check up to <number> packets
|
|
|
|
.TP
|
|
\fB-o\fR
|
|
show original packets when printing diffs (by default, packets are normalized)
|
|
|
|
.TP
|
|
\fB-p\fR \fInumber\fR
|
|
show intermediate results every <number> packets
|
|
|
|
.TP
|
|
\fB-s\fR \fInumber\fR
|
|
only start checking after <number> packets
|
|
|
|
.TP
|
|
\fB-v\fR
|
|
verbose mode
|
|
|
|
|
|
.SH OUTPUT FORMAT
|
|
The default output of \fBpcat-diff\fR consists "records". Each record has four lines:
|
|
.PP
|
|
1. xxx - (decimal) sequence number
|
|
2. hex dump - query in hex, network order
|
|
3. hex dump - answer of FILE1 in hex, network order
|
|
4. hex dump - answer of FILE2 in hex, network order.
|
|
|
|
The advanced output only prints statistics about the types of differences
|
|
found and their percentages. If an unknown difference is found it prints
|
|
the relevant packets and exits.
|
|
|
|
|
|
.SH ALSO SEE
|
|
Also see pcat(1) and pcat-print(1).
|
|
|
|
.SH AUTHOR
|
|
Written by Miek Gieben for NLnet Labs.
|
|
|
|
.SH REPORTING BUGS
|
|
Report bugs to <dns-team@nlnetlabs.nl>.
|
|
|
|
.SH COPYRIGHT
|
|
Copyright (C) 2005, 2006 NLnet Labs. This is free software. There is NO
|
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE.
|
|
.PP
|
|
Licensed under the BSD License.
|