diff --git a/parse_test.go b/parse_test.go index 5e4c0809..7659bc13 100644 --- a/parse_test.go +++ b/parse_test.go @@ -5,7 +5,6 @@ import ( "os" "strings" "testing" - "text/scanner" "time" ) @@ -96,33 +95,18 @@ func TestDotInName(t *testing.T) { } } -func TestParse(t *testing.T) { - tests := map[string]string{ - "(soa.) (SOA) (soa.) (soa.) (1) (1) (1) (1) (1)()": "soa.\t3600\tIN\tSOA\tsoa. soa. 1 1 1 1 1", - "miek.nl. 3600 IN A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1", - "miek.nl. 3600 IN MX 10 elektron.atoom.net.": "miek.nl.\t3600\tIN\tMX\t10 elektron.atoom.net.", - "miek.nl. IN 3600 A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1", - "miek.nl. A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1", - "miek.nl. IN AAAA ::1": "miek.nl.\t3600\tIN\tAAAA\t::1", - "miek.nl. IN A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1", - "miek.nl. IN DNSKEY 256 3 5 AwEAAb+8lGNCxJgLS8rYVer6EnHVuIkQDghdjdtewDzU3G5R7PbMbKVRvH2Ma7pQyYceoaqWZQirSj72euPWfPxQnMy9ucCylA+FuH9cSjIcPf4PqJfdupHk9X6EBYjxrCLY4p1/yBwgyBIRJtZtAqM3ceAH2WovEJD6rTtOuHo5AluJ": "miek.nl.\t3600\tIN\tDNSKEY\t256 3 5 AwEAAb+8lGNCxJgLS8rYVer6EnHVuIkQDghdjdtewDzU3G5R7PbMbKVRvH2Ma7pQyYceoaqWZQirSj72euPWfPxQnMy9ucCylA+FuH9cSjIcPf4PqJfdupHk9X6EBYjxrCLY4p1/yBwgyBIRJtZtAqM3ceAH2WovEJD6rTtOuHo5AluJ", - "nlnetlabs.nl. 3175 IN DNSKEY 256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh": "nlnetlabs.nl.\t3175\tIN\tDNSKEY\t256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh", - "dnsex.nl. 86400 IN SOA elektron.atoom.net. miekg.atoom.net. 1299256910 14400 3600 604800 86400": "dnsex.nl.\t86400\tIN\tSOA\telektron.atoom.net. miekg.atoom.net. 1299256910 14400 3600 604800 86400", - // RRSIG incep/expir fails (new time api) - "dnsex.nl. 86400 IN RRSIG SOA 8 2 86400 20110403154150 20110304154150 23334 dnsex.nl. QN6hwJQLEBqRVKmO2LgkuRSx9bkKIZxXlTVtHg5SaiN+8RCTckGtUXkQ vmZiBt3RdIWAjaabQYpEZHgvyjfy4Wwu/9RPDYnLt/qoyr4QKAdujchc m+fMDSbbcC7AN08i5D/dUWfNOHXjRJLY7t7AYB9DBt32LazIb0EU9QiW 5Cg=": "dnsex.nl.\t86400\tIN\tRRSIG\tSOA 8 2 86400 20110403154150 20110304154150 23334 dnsex.nl. QN6hwJQLEBqRVKmO2LgkuRSx9bkKIZxXlTVtHg5SaiN+8RCTckGtUXkQvmZiBt3RdIWAjaabQYpEZHgvyjfy4Wwu/9RPDYnLt/qoyr4QKAdujchcm+fMDSbbcC7AN08i5D/dUWfNOHXjRJLY7t7AYB9DBt32LazIb0EU9QiW5Cg=", - } - for i, o := range tests { - rr, e:= NewRR(i) - if e != nil { - t.Log("Failed to parse RR") - t.Fail() - continue - } - if rr.String() != o { - t.Logf("`%s' should be equal to\n`%s', but is `%s'\n", i, o, rr.String()) - t.Fail() +func TestParseZone(t *testing.T) { + zone := `zzzzz.miek.nl. 86400 IN RRSIG NSEC 8 3 86400 20110823011301 20110724011301 12051 miek.nl. lyRljEQFOmajcdo6bBI67DsTlQTGU3ag9vlE07u7ynqt9aYBXyE9mkasAK4V0oI32YGb2pOSB6RbbdHwUmSt+cYhOA49tl2t0Qoi3pH21dicJiupdZuyjfqUEqJlQoEhNXGtP/pRvWjNA4pQeOsOAoWq/BDcWCSQB9mh2LvUOH4= ; {keyid = sksak} +zzzzz.miek.nl. 86400 IN NSEC miek.nl. TXT RRSIG NSEC` + // Need to implementen owner substitution in the lexer. + to := make(chan Token) + go ParseZone(strings.NewReader(zone), to) + for x := range to { + if x.Error == nil { + t.Logf("%v\n", x.Rr) } else { - t.Logf("RR is OK: `%s'", rr.String()) + t.Logf("%v\n", x.Error) + t.Fail() } } } @@ -154,9 +138,9 @@ func TestParseBrace(t *testing.T) { for i, o := range tests { rr, e := NewRR(i) if e != nil { - t.Log("Failed to parse RR: " + e.Error()) + t.Log("Failed to parse RR: " + e.Error()) t.Fail() - continue + continue } if rr.String() != o { t.Logf("`%s' should be equal to\n`%s', but is `%s'\n", i, o, rr.String()) @@ -259,6 +243,7 @@ func TestZoneParsingBigZone(t *testing.T) { } */ +/* func TestLexerBrace(t *testing.T) { f, err := os.Open("/home/miekg/src/tmp/small") if err != nil { @@ -279,3 +264,4 @@ func TestLexerBrace(t *testing.T) { t.Logf("%s ", l) } } +*/ diff --git a/zscan.go b/zscan.go index 32d1852e..b48b1608 100644 --- a/zscan.go +++ b/zscan.go @@ -333,10 +333,10 @@ func zlexer(s scanner.Scanner, c chan lex) { // If not in a brace this ends the comment AND the RR if brace == 0 { owner = true - } l.value = _NEWLINE l.token = "\n" c <- l + } break } if str != "" { diff --git a/zscan_rr.go b/zscan_rr.go index abf23f07..1fbbc2f7 100644 --- a/zscan_rr.go +++ b/zscan_rr.go @@ -238,28 +238,28 @@ func setRRSIG(h RR_Header, c chan lex) (RR, *ParseError) { <-c // _BLANK l = <-c if i, err := dateToTime(l.token); err != nil { - return nil, &ParseError{"bad RRSIG", l} + return nil, &ParseError{"bad RRSIG expiration", l} } else { rr.Expiration = i } <-c // _BLANK l = <-c if i, err := dateToTime(l.token); err != nil { - return nil, &ParseError{"bad RRSIG", l} + return nil, &ParseError{"bad RRSIG inception", l} } else { rr.Inception = i } <-c // _BLANK l = <-c if i, err := strconv.Atoi(l.token); err != nil { - return nil, &ParseError{"bad RRSIG", l} + return nil, &ParseError{"bad RRSIG keytag", l} } else { rr.KeyTag = uint16(i) } <-c // _BLANK l = <-c if !IsDomainName(l.token) { - return nil, &ParseError{"bad RRSIG", l} + return nil, &ParseError{"bad RRSIG signername", l} } else { rr.SignerName = l.token } @@ -267,18 +267,16 @@ func setRRSIG(h RR_Header, c chan lex) (RR, *ParseError) { l = <-c s := "" for l.value != _NEWLINE && l.value != _EOF { - println("Wat hebben we hier", l.token, l.value) switch l.value { case _STRING: s += l.token case _BLANK: // Ok default: - return nil, &ParseError{"bad RRSIG", l} + return nil, &ParseError{"bad RRSIG signature", l} } l = <-c } - println("S", s) rr.Signature = s return rr, nil }