summaryrefslogtreecommitdiff
path: root/programs/lwdnsq/CONTRACT.txt
blob: 77335e8cf494b7366f6a499eb4e3d51326cba39d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
The only delays are after START, and after CNAME.

add the time to each line.

put DNSSEC status on each line.

The format of the replies is:

    <ID> <TIME> <TTL> <TYPE> <TYPE-SPECIFIC> \n
        ^- whitespace.

ID is a unique number that identifies the transaction. It is determined
by the caller. lwdnsq treats this ID as a string, and does nothing
with it other than repeat it on each line.
There is no predetermined bound on the length, but the total line
length of input to lwdnsq must not exceed LWDNSQ_CMDBUF_LEN (1024).
LWDNSQ_CMDBUF_LEN is defined in <freeswan.h>

The output of lwdnsq is currently limited to LWDNSQ_RESULT_LEN_MAX (4096) byte
lines.  LWDNSQ_RESULT_LEN_MAX is defined in <freeswan.h>

Time is a decimal encoded integer, currently 32-bit time (time_t) since Unix
epoch. On systems with a 64-bit time_t, it would be 64-bit in range.

The TTL field gives the number of seconds that the result is valid for.
(starting at the time given). If there is no useful TTL value for the
record, it will be either "0".

Type is a case-insensitive, one of:
structure
     START      (optional comments) acknowledges start of transaction
     DONE	(optional comments) signals the end of data for a transaction

errors
     RETRY	same as for FATAL, but this implies that the data
		was not found, but could be found later.

     FATAL	Following this, is text detailing the fault,
		in a human readable form.
		"FATAL" results likely mean that the lwdnsq should
		be restarted.

     WARNING    Log this result, but do not cancel transaction.

		Errors are still followed by "DONE".



data answers
     DNSSEC	followed by "OKAY" or "not present"
     NAME	followed by canonical name for requested RR,
		i.e. the result of any CNAMEs/DNAMEs that were chased
		by the recursive resolving server.
     CNAME	followed by the name which has been followed.
     CNAMEFROM	the thing that was mapped
     TXT	followed by RR-specific Presentation Format
     SIG	"
     A		"
     AAAA	"
     PTR	"
     KEY	"
     AD-TXT	followed by RR-specific Presentation Format - DNSSEC
     TXT	followed by RR-specific Presentation Format - DNSSEC
     AD-KEY	followed by RR-specific Presentation Format - DNSSEC
     KEY	followed by RR-specific Presentation Format - DNSSEC

If there is no data of the type requested, even after lwdnsq
has attempted to follow CNAMEs, then there will be no resource
records returned. This is the formal indication of the lack of
the records, however, in addition, an error will be returned, of the type:
       RETRY the record "foobar" does not have a RR resource record.

The -ldns library from bind9 will deal with the presentation format,
producing a structure breakout from it. The functions are:

dns_rdata_fromtext(3)
	Presentation Format -> Wire Format
dns_rdata_tostruct(3)
	Wire Format -> C-structure

dns_rdata_totext(3)
	Wire Format -> Presentation Format

(Above from  .../src/bind-9.3.0s20020722/lib/dns/include/dns/rdata.h)

The lwdnsq program uses dns_rdata_totext(3) to format the resource record
(received from lwres in wire format) into its presentation format.

The documentation is in the bind-9.3 source tree, in the header files.
(They are likely all installed into the include directories).