Only pack NSEC3/NSEC3PARAM salt when it is not empty (#474)

* Only pack when salt is not empty

* Actually generate things properly

* Use string literal
This commit is contained in:
Roland Bracewell Shoemaker 2017-03-21 12:35:21 -07:00 committed by Miek Gieben
parent 25ac7f1714
commit fb16e4c487
2 changed files with 23 additions and 10 deletions

View File

@ -139,8 +139,17 @@ return off, err
case st.Tag(i) == `dns:"base64"`: case st.Tag(i) == `dns:"base64"`:
o("off, err = packStringBase64(rr.%s, msg, off)\n") o("off, err = packStringBase64(rr.%s, msg, off)\n")
case strings.HasPrefix(st.Tag(i), `dns:"size-hex:SaltLength`): // Hack to fix empty salt length for NSEC3 case strings.HasPrefix(st.Tag(i), `dns:"size-hex:SaltLength`):
o("if rr.%s == \"-\" { /* do nothing, empty salt */ }\n") // directly write instead of using o() so we get the error check in the correct place
field := st.Field(i).Name()
fmt.Fprintf(b, `// Only pack salt if value is not "-", i.e. empty
if rr.%s != "-" {
off, err = packStringHex(rr.%s, msg, off)
if err != nil {
return off, err
}
}
`, field, field)
continue continue
case strings.HasPrefix(st.Tag(i), `dns:"size-hex`): // size-hex can be packed just like hex case strings.HasPrefix(st.Tag(i), `dns:"size-hex`): // size-hex can be packed just like hex
fallthrough fallthrough

20
zmsg.go
View File

@ -801,10 +801,12 @@ func (rr *NSEC3) pack(msg []byte, off int, compression map[string]int, compress
if err != nil { if err != nil {
return off, err return off, err
} }
if rr.Salt == "-" { /* do nothing, empty salt */ // Only pack salt if value is not "-", i.e. empty
} if rr.Salt != "-" {
if err != nil { off, err = packStringHex(rr.Salt, msg, off)
return off, err if err != nil {
return off, err
}
} }
off, err = packUint8(rr.HashLength, msg, off) off, err = packUint8(rr.HashLength, msg, off)
if err != nil { if err != nil {
@ -844,10 +846,12 @@ func (rr *NSEC3PARAM) pack(msg []byte, off int, compression map[string]int, comp
if err != nil { if err != nil {
return off, err return off, err
} }
if rr.Salt == "-" { /* do nothing, empty salt */ // Only pack salt if value is not "-", i.e. empty
} if rr.Salt != "-" {
if err != nil { off, err = packStringHex(rr.Salt, msg, off)
return off, err if err != nil {
return off, err
}
} }
rr.Header().Rdlength = uint16(off - headerEnd) rr.Header().Rdlength = uint16(off - headerEnd)
return off, nil return off, nil