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) 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) len() int { return rr.Hdr.len() + len(rr.Cpu) + len(rr.Os) }
|
||||
func (rr *HINFO) String() string {
|
||||
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 {
|
||||
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.Hdr = h
|
||||
|
||||
l := <-c
|
||||
rr.Cpu = l.token
|
||||
<-c // zBlank
|
||||
l = <-c // zString
|
||||
rr.Os = l.token
|
||||
chunks, e, c1 := endingToTxtSlice(c, "bad HINFO Fields", f)
|
||||
if e != nil {
|
||||
return nil, e, c1
|
||||
}
|
||||
|
||||
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, ""
|
||||
}
|
||||
|
@ -2176,7 +2189,7 @@ var typeToparserFunc = map[uint16]parserFunc{
|
|||
TypeEUI64: parserFunc{setEUI64, false},
|
||||
TypeGID: parserFunc{setGID, false},
|
||||
TypeGPOS: parserFunc{setGPOS, false},
|
||||
TypeHINFO: parserFunc{setHINFO, false},
|
||||
TypeHINFO: parserFunc{setHINFO, true},
|
||||
TypeHIP: parserFunc{setHIP, true},
|
||||
TypeIPSECKEY: parserFunc{setIPSECKEY, true},
|
||||
TypeKX: parserFunc{setKX, false},
|
||||
|
|
Loading…
Reference in New Issue