Support for almost all possible ways to format HINFO record
This commit is contained in:
parent
fe15681571
commit
32bf0823e2
|
@ -1430,3 +1430,25 @@ func TestParseSSHFP(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParseHINFO(t *testing.T) {
|
||||||
|
dt := map[string]string{
|
||||||
|
"example.net. HINFO A B": "example.net. 3600 IN HINFO \"A\" \"B\"",
|
||||||
|
"example.net. HINFO \"A\" \"B\"": "example.net. 3600 IN HINFO \"A\" \"B\"",
|
||||||
|
"example.net. HINFO A B C D E F": "example.net. 3600 IN HINFO \"A\" \"B C D E F\"",
|
||||||
|
"example.net. HINFO AB": "example.net. 3600 IN HINFO \"AB\" \"\"",
|
||||||
|
// "example.net. HINFO PC-Intel-700mhz \"Redhat Linux 7.1\"": "example.net. 3600 IN HINFO \"PC-Intel-700mhz\" \"Redhat Linux 7.1\"",
|
||||||
|
}
|
||||||
|
for i, o := range dt {
|
||||||
|
rr, err := NewRR(i)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("failed to parse RR: ", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if rr.String() != o {
|
||||||
|
t.Errorf("`%s' should be equal to\n`%s', but is `%s'", i, o, rr.String())
|
||||||
|
} else {
|
||||||
|
t.Logf("RR is OK: `%s'", rr.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
6
types.go
6
types.go
|
@ -255,8 +255,10 @@ type HINFO struct {
|
||||||
|
|
||||||
func (rr *HINFO) Header() *RR_Header { return &rr.Hdr }
|
func (rr *HINFO) Header() *RR_Header { return &rr.Hdr }
|
||||||
func (rr *HINFO) copy() RR { return &HINFO{*rr.Hdr.copyHeader(), rr.Cpu, rr.Os} }
|
func (rr *HINFO) copy() RR { return &HINFO{*rr.Hdr.copyHeader(), rr.Cpu, rr.Os} }
|
||||||
func (rr *HINFO) String() string { return rr.Hdr.String() + rr.Cpu + " " + rr.Os }
|
func (rr *HINFO) String() string {
|
||||||
func (rr *HINFO) len() int { return rr.Hdr.len() + len(rr.Cpu) + len(rr.Os) }
|
return rr.Hdr.String() + sprintTxt([]string{rr.Cpu, rr.Os})
|
||||||
|
}
|
||||||
|
func (rr *HINFO) len() int { return rr.Hdr.len() + len(rr.Cpu) + len(rr.Os) }
|
||||||
|
|
||||||
type MB struct {
|
type MB struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
|
|
25
zscan_rr.go
25
zscan_rr.go
|
@ -345,11 +345,24 @@ func setHINFO(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
|
||||||
rr := new(HINFO)
|
rr := new(HINFO)
|
||||||
rr.Hdr = h
|
rr.Hdr = h
|
||||||
|
|
||||||
l := <-c
|
chunks, e, c1 := endingToTxtSlice(c, "bad HINFO Fields", f)
|
||||||
rr.Cpu = l.token
|
if e != nil {
|
||||||
<-c // zBlank
|
return nil, e, c1
|
||||||
l = <-c // zString
|
}
|
||||||
rr.Os = l.token
|
|
||||||
|
if ln := len(chunks); ln == 0 {
|
||||||
|
return rr, nil, ""
|
||||||
|
} else if ln == 1 {
|
||||||
|
// Can we split it?
|
||||||
|
if out := strings.Fields(chunks[0]); len(out) > 1 {
|
||||||
|
chunks = out
|
||||||
|
} else {
|
||||||
|
chunks = append(chunks, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rr.Cpu = chunks[0]
|
||||||
|
rr.Os = strings.Join(chunks[1:], " ")
|
||||||
|
|
||||||
return rr, nil, ""
|
return rr, nil, ""
|
||||||
}
|
}
|
||||||
|
@ -2176,7 +2189,7 @@ var typeToparserFunc = map[uint16]parserFunc{
|
||||||
TypeEUI64: parserFunc{setEUI64, false},
|
TypeEUI64: parserFunc{setEUI64, false},
|
||||||
TypeGID: parserFunc{setGID, false},
|
TypeGID: parserFunc{setGID, false},
|
||||||
TypeGPOS: parserFunc{setGPOS, false},
|
TypeGPOS: parserFunc{setGPOS, false},
|
||||||
TypeHINFO: parserFunc{setHINFO, false},
|
TypeHINFO: parserFunc{setHINFO, true},
|
||||||
TypeHIP: parserFunc{setHIP, true},
|
TypeHIP: parserFunc{setHIP, true},
|
||||||
TypeIPSECKEY: parserFunc{setIPSECKEY, true},
|
TypeIPSECKEY: parserFunc{setIPSECKEY, true},
|
||||||
TypeKX: parserFunc{setKX, false},
|
TypeKX: parserFunc{setKX, false},
|
||||||
|
|
Loading…
Reference in New Issue