Merge branch 'master' of github.com:miekg/dns
This commit is contained in:
commit
4a951fc1f8
10
ex/q/q.go
10
ex/q/q.go
|
@ -192,10 +192,6 @@ Flags:
|
|||
|
||||
m.Question[0] = dns.Question{dns.Fqdn(v), qtype, qclass}
|
||||
m.Id = dns.Id()
|
||||
if *query {
|
||||
fmt.Printf("%s", m.String())
|
||||
fmt.Printf("\n;; size: %d bytes\n\n", m.Len())
|
||||
}
|
||||
// Add tsig
|
||||
if *tsig != "" {
|
||||
if algo, name, secret, ok := tsigKeyParse(*tsig); ok {
|
||||
|
@ -206,6 +202,10 @@ Flags:
|
|||
return
|
||||
}
|
||||
}
|
||||
if *query {
|
||||
fmt.Printf("%s", m.String())
|
||||
fmt.Printf("\n;; size: %d bytes\n\n", m.Len())
|
||||
}
|
||||
if qtype == dns.TypeAXFR {
|
||||
c.Net = "tcp"
|
||||
doXfr(c, m, nameserver)
|
||||
|
@ -269,7 +269,7 @@ func tsigKeyParse(s string) (algo, name, secret string, ok bool) {
|
|||
case 3:
|
||||
switch s1[0] {
|
||||
case "hmac-md5":
|
||||
return "hmac-md5.sig-alg.reg.int.", s1[0], s1[1], true
|
||||
return "hmac-md5.sig-alg.reg.int.", s1[1], s1[2], true
|
||||
case "hmac-sha1":
|
||||
return "hmac-sha1.", s1[1], s1[2], true
|
||||
case "hmac-sha256":
|
||||
|
|
|
@ -414,27 +414,6 @@ func TestZoneParsing(t *testing.T) {
|
|||
t.Logf("%d RRs parsed in %.2f s (%.2f RR/s)", i, float32(delta)/1e9, float32(i)/(float32(delta)/1e9))
|
||||
}
|
||||
|
||||
// name. 3600 IN SOA a6.nstld.com. hostmaster.nic.name. 203362132 300 300 1209600 300
|
||||
// name. 10800 IN NS name.
|
||||
// name. 10800 IN NS g6.nstld.com.
|
||||
// name. 7200 IN NS h6.nstld.com.
|
||||
// name. 3600 IN NS j6.nstld.com.
|
||||
// name. 3600 IN NS k6.nstld.com.
|
||||
// name. 10800 IN NS l6.nstld.com.
|
||||
// name. 10800 IN NS a6.nstld.com.
|
||||
// name. 10800 IN NS c6.nstld.com.
|
||||
// name. 10800 IN NS d6.nstld.com.
|
||||
// name. 10800 IN NS f6.nstld.com.
|
||||
// name. 10800 IN NS m6.nstld.com.
|
||||
// 0-0onlus.name. 10800 IN NS ns7.ehiweb.it.
|
||||
// 0-0onlus.name. 10800 IN NS ns8.ehiweb.it.
|
||||
// 0-g.name. 10800 IN MX 10 mx01.nic.name.
|
||||
// 0-g.name. 10800 IN MX 10 mx02.nic.name.
|
||||
// 0-g.name. 10800 IN MX 10 mx03.nic.name.
|
||||
// 0-g.name. 10800 IN MX 10 mx04.nic.name.
|
||||
// 0-g.name. 10800 IN TXT "10 mx\"04.nic"
|
||||
// moutamassey.0-g.name.name. 10800 IN NS ns01.yahoodomains.jp.
|
||||
// moutamassey.0-g.name.name. 10800 IN NS ns02.yahoodomains.jp.
|
||||
func ExampleZone() {
|
||||
zone := `$ORIGIN .
|
||||
$TTL 3600 ; 1 hour
|
||||
|
@ -446,7 +425,7 @@ name IN SOA a6.nstld.com. hostmaster.nic.name. (
|
|||
300 ; minimum (5 minutes)
|
||||
)
|
||||
$TTL 10800 ; 3 hours
|
||||
@ 10800 IN NS @
|
||||
name. 10800 IN NS name.
|
||||
IN NS g6.nstld.com.
|
||||
7200 NS h6.nstld.com.
|
||||
3600 IN NS j6.nstld.com.
|
||||
|
@ -457,6 +436,9 @@ $TTL 10800 ; 3 hours
|
|||
NS d6.nstld.com.
|
||||
NS f6.nstld.com.
|
||||
NS m6.nstld.com.
|
||||
(
|
||||
NS m7.nstld.com.
|
||||
)
|
||||
$ORIGIN name.
|
||||
0-0onlus NS ns7.ehiweb.it.
|
||||
NS ns8.ehiweb.it.
|
||||
|
@ -464,7 +446,6 @@ $ORIGIN name.
|
|||
MX 10 mx02.nic
|
||||
MX 10 mx03.nic
|
||||
MX 10 mx04.nic
|
||||
TXT "10 mx\"04.nic"
|
||||
$ORIGIN 0-g.name
|
||||
moutamassey NS ns01.yahoodomains.jp.
|
||||
NS ns02.yahoodomains.jp.
|
||||
|
@ -473,9 +454,30 @@ moutamassey NS ns01.yahoodomains.jp.
|
|||
for x := range to {
|
||||
fmt.Printf("%s\n", x.RR)
|
||||
}
|
||||
// Output:
|
||||
// name. 3600 IN SOA a6.nstld.com. hostmaster.nic.name. 203362132 300 300 1209600 300
|
||||
// name. 10800 IN NS name.
|
||||
// name. 10800 IN NS g6.nstld.com.
|
||||
// name. 7200 IN NS h6.nstld.com.
|
||||
// name. 3600 IN NS j6.nstld.com.
|
||||
// name. 3600 IN NS k6.nstld.com.
|
||||
// name. 10800 IN NS l6.nstld.com.
|
||||
// name. 10800 IN NS a6.nstld.com.
|
||||
// name. 10800 IN NS c6.nstld.com.
|
||||
// name. 10800 IN NS d6.nstld.com.
|
||||
// name. 10800 IN NS f6.nstld.com.
|
||||
// name. 10800 IN NS m6.nstld.com.
|
||||
// name. 10800 IN NS m7.nstld.com.
|
||||
// 0-0onlus.name. 10800 IN NS ns7.ehiweb.it.
|
||||
// 0-0onlus.name. 10800 IN NS ns8.ehiweb.it.
|
||||
// 0-g.name. 10800 IN MX 10 mx01.nic.name.
|
||||
// 0-g.name. 10800 IN MX 10 mx02.nic.name.
|
||||
// 0-g.name. 10800 IN MX 10 mx03.nic.name.
|
||||
// 0-g.name. 10800 IN MX 10 mx04.nic.name.
|
||||
// moutamassey.0-g.name.name. 10800 IN NS ns01.yahoodomains.jp.
|
||||
// moutamassey.0-g.name.name. 10800 IN NS ns02.yahoodomains.jp.
|
||||
}
|
||||
|
||||
// www.example.com. 3600 IN HIP 2 200100107B1A74DF365639CC39F1D578 AwEAAbdxyhNuSutc5EMzxTs9LBPCIkOFH8cIvM4p9+LrV4e19WzK00+CI6zBCQTdtWsuxKbWIy87UOoJTwkUs7lBu+Upr1gsNrut79ryra+bSRGQb1slImA8YVJyuIDsj7kwzG7jnERNqnWxZ48AWkskmdHaVDP4BcelrTI3rMXdXF5D rvs.example.com.
|
||||
func ExampleHIP() {
|
||||
h := `www.example.com IN HIP ( 2 200100107B1A74DF365639CC39F1D578
|
||||
AwEAAbdxyhNuSutc5EMzxTs9LBPCIkOFH8cIvM4p
|
||||
|
@ -485,14 +487,17 @@ b1slImA8YVJyuIDsj7kwzG7jnERNqnWxZ48AWkskmdHaVDP4BcelrTI3rMXdXF5D
|
|||
if hip, err := NewRR(h); err == nil {
|
||||
fmt.Printf("%s\n", hip.String())
|
||||
}
|
||||
// Output:
|
||||
// www.example.com. 3600 IN HIP 2 200100107B1A74DF365639CC39F1D578 AwEAAbdxyhNuSutc5EMzxTs9LBPCIkOFH8cIvM4p9+LrV4e19WzK00+CI6zBCQTdtWsuxKbWIy87UOoJTwkUs7lBu+Upr1gsNrut79ryra+bSRGQb1slImA8YVJyuIDsj7kwzG7jnERNqnWxZ48AWkskmdHaVDP4BcelrTI3rMXdXF5D rvs.example.com.
|
||||
}
|
||||
|
||||
// example.com. 1000 IN SOA master.example.com. admin.example.com. 1 4294967294 4294967293 4294967295 100
|
||||
func ExampleSOA() {
|
||||
s := "example.com. 1000 SOA master.example.com. admin.example.com. 1 4294967294 4294967293 4294967295 100"
|
||||
if soa, err := NewRR(s); err == nil {
|
||||
fmt.Printf("%s\n", soa.String())
|
||||
}
|
||||
// Output:
|
||||
// example.com. 1000 IN SOA master.example.com. admin.example.com. 1 4294967294 4294967293 4294967295 100
|
||||
}
|
||||
|
||||
func TestLineNumberError(t *testing.T) {
|
||||
|
@ -582,16 +587,6 @@ func TestEmpty(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// 0.0.0.192.IN-ADDR.ARPA. 3600 IN NS SERVER1.EXAMPLE.
|
||||
// 0.0.0.192.IN-ADDR.ARPA. 3600 IN NS SERVER2.EXAMPLE.
|
||||
// 1.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 1.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 2.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 2.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 3.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 3.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 4.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 4.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 5.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 5.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 6.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 6.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 7.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 7.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 8.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 8.0.0.0.192.IN-ADDR.ARPA.
|
||||
func ExampleGenerate() {
|
||||
// From the manual: http://www.bind9.net/manual/bind/9.3.2/Bv9ARM.ch06.html#id2566761
|
||||
zone := "$GENERATE 1-2 0 NS SERVER$.EXAMPLE.\n$GENERATE 1-8 $ CNAME $.0"
|
||||
|
@ -601,6 +596,17 @@ func ExampleGenerate() {
|
|||
fmt.Printf("%s\n", x.RR.String())
|
||||
}
|
||||
}
|
||||
// Output:
|
||||
// 0.0.0.192.IN-ADDR.ARPA. 3600 IN NS SERVER1.EXAMPLE.
|
||||
// 0.0.0.192.IN-ADDR.ARPA. 3600 IN NS SERVER2.EXAMPLE.
|
||||
// 1.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 1.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 2.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 2.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 3.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 3.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 4.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 4.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 5.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 5.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 6.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 6.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 7.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 7.0.0.0.192.IN-ADDR.ARPA.
|
||||
// 8.0.0.192.IN-ADDR.ARPA. 3600 IN CNAME 8.0.0.0.192.IN-ADDR.ARPA.
|
||||
}
|
||||
|
||||
func TestSRVPacking(t *testing.T) {
|
||||
|
|
5
tsig.go
5
tsig.go
|
@ -125,7 +125,7 @@ type tsigWireFmt struct {
|
|||
Ttl uint32
|
||||
// Rdata of the TSIG
|
||||
Algorithm string `dns:"domain-name"`
|
||||
TimeSigned uint64
|
||||
TimeSigned uint64 `dns:"uint48"`
|
||||
Fudge uint16
|
||||
// MACSize, MAC and OrigId excluded
|
||||
Error uint16
|
||||
|
@ -142,7 +142,7 @@ type macWireFmt struct {
|
|||
|
||||
// 3.3. Time values used in TSIG calculations
|
||||
type timerWireFmt struct {
|
||||
TimeSigned uint64
|
||||
TimeSigned uint64 `dns:"uint48"`
|
||||
Fudge uint16
|
||||
}
|
||||
|
||||
|
@ -220,7 +220,6 @@ func TsigVerify(msg []byte, secret, requestMAC string, timersOnly bool) error {
|
|||
}
|
||||
|
||||
buf := tsigBuffer(stripped, tsig, requestMAC, timersOnly)
|
||||
|
||||
ti := uint64(time.Now().Unix()) - tsig.TimeSigned
|
||||
if uint64(tsig.Fudge) < ti {
|
||||
return ErrTime
|
||||
|
|
41
zscan.go
41
zscan.go
|
@ -227,7 +227,8 @@ func parseZone(r io.Reader, origin, f string, t chan Token, include int) {
|
|||
return
|
||||
} else {
|
||||
h.Ttl = ttl
|
||||
defttl = ttl
|
||||
// Don't about the defttl, we should take the $TTL value
|
||||
// defttl = ttl
|
||||
}
|
||||
st = _EXPECT_ANY_NOTTL_BL
|
||||
|
||||
|
@ -246,8 +247,32 @@ func parseZone(r io.Reader, origin, f string, t chan Token, include int) {
|
|||
t <- Token{Error: &ParseError{f, "expecting $INCLUDE value, not this...", l}}
|
||||
return
|
||||
}
|
||||
if e := slurpRemainder(c, f); e != nil {
|
||||
t <- Token{Error: e}
|
||||
neworigin := origin // There may be optionally a new origin set after the filename, if not use current one
|
||||
l := <-c
|
||||
switch l.value {
|
||||
case _BLANK:
|
||||
l := <-c
|
||||
if l.value == _STRING {
|
||||
if _, _, ok := IsDomainName(l.token); !ok {
|
||||
t <- Token{Error: &ParseError{f, "bad origin name", l}}
|
||||
return
|
||||
}
|
||||
// a new origin is specified.
|
||||
if !IsFqdn(l.token) {
|
||||
if origin != "." { // Prevent .. endings
|
||||
neworigin = l.token + "." + origin
|
||||
} else {
|
||||
neworigin = l.token + origin
|
||||
}
|
||||
} else {
|
||||
neworigin = l.token
|
||||
}
|
||||
}
|
||||
case _NEWLINE, _EOF:
|
||||
// Ok
|
||||
default:
|
||||
t <- Token{Error: &ParseError{f, "garbage after $INCLUDE", l}}
|
||||
return
|
||||
}
|
||||
// Start with the new file
|
||||
r1, e1 := os.Open(l.token)
|
||||
|
@ -259,7 +284,7 @@ func parseZone(r io.Reader, origin, f string, t chan Token, include int) {
|
|||
t <- Token{Error: &ParseError{f, "too deeply nested $INCLUDE", l}}
|
||||
return
|
||||
}
|
||||
parseZone(r1, l.token, origin, t, include+1)
|
||||
parseZone(r1, l.token, neworigin, t, include+1)
|
||||
st = _EXPECT_OWNER_DIR
|
||||
case _EXPECT_DIRTTL_BL:
|
||||
if l.value != _BLANK {
|
||||
|
@ -297,6 +322,10 @@ func parseZone(r io.Reader, origin, f string, t chan Token, include int) {
|
|||
if e := slurpRemainder(c, f); e != nil {
|
||||
t <- Token{Error: e}
|
||||
}
|
||||
if _, _, ok := IsDomainName(l.token); !ok {
|
||||
t <- Token{Error: &ParseError{f, "bad origin name", l}}
|
||||
return
|
||||
}
|
||||
if !IsFqdn(l.token) {
|
||||
if origin != "." { // Prevent .. endings
|
||||
origin = l.token + "." + origin
|
||||
|
@ -343,7 +372,7 @@ func parseZone(r io.Reader, origin, f string, t chan Token, include int) {
|
|||
return
|
||||
} else {
|
||||
h.Ttl = ttl
|
||||
defttl = ttl
|
||||
// defttl = ttl // don't set the defttl here
|
||||
}
|
||||
st = _EXPECT_ANY_NOTTL_BL
|
||||
default:
|
||||
|
@ -382,7 +411,7 @@ func parseZone(r io.Reader, origin, f string, t chan Token, include int) {
|
|||
return
|
||||
} else {
|
||||
h.Ttl = ttl
|
||||
defttl = ttl
|
||||
// defttl = ttl // don't set the def ttl anymore
|
||||
}
|
||||
st = _EXPECT_RRTYPE_BL
|
||||
case _RRTYPE:
|
||||
|
|
Loading…
Reference in New Issue