diff --git a/defaults.go b/defaults.go index def6c56d..a29c8c8f 100644 --- a/defaults.go +++ b/defaults.go @@ -212,7 +212,7 @@ func ReverseAddr(addr string) (arpa string, err error) { return string(buf), nil } -// String returns the string representation for the type t +// String returns the string representation for the type t. func (t Type) String() string { if t1, ok := TypeToString[uint16(t)]; ok { return t1 @@ -220,10 +220,15 @@ func (t Type) String() string { return "TYPE" + strconv.Itoa(int(t)) } -// String returns the string representation for the class c +// String returns the string representation for the class c. func (c Class) String() string { if c1, ok := ClassToString[uint16(c)]; ok { return c1 } return "CLASS" + strconv.Itoa(int(c)) } + +// String returns the string representation for the name n. +func (n Name) String() string { + return sprintName(string(n)) +} diff --git a/dns.go b/dns.go index adee04ed..3efbdc08 100644 --- a/dns.go +++ b/dns.go @@ -168,7 +168,7 @@ func (h *RR_Header) String() string { // and maybe other things } - s += NameToString(h.Name) + "\t" + s += sprintName(h.Name) + "\t" s += strconv.FormatInt(int64(h.Ttl), 10) + "\t" s += Class(h.Class).String() + "\t" s += Type(h.Rrtype).String() + "\t" diff --git a/msg.go b/msg.go index 42a4019f..1269e467 100644 --- a/msg.go +++ b/msg.go @@ -528,7 +528,7 @@ func unpackTxt(msg []byte, offset, rdend int) ([]string, int, error) { } func unpackTxtString(msg []byte, offset int) (string, int, error) { - if offset + 1 > len(msg) { + if offset+1 > len(msg) { return "", offset, &Error{err: "overflow unpacking txt"} } l := int(msg[offset]) diff --git a/parse_test.go b/parse_test.go index ab5059a5..f4400e29 100644 --- a/parse_test.go +++ b/parse_test.go @@ -1120,14 +1120,14 @@ func TestMalformedPackets(t *testing.T) { "0021641c0000000100000000000078787878787878787878787303636f6d0000100001", } -// com = 63 6f 6d + // com = 63 6f 6d for _, packet := range packets { data, _ := hex.DecodeString(packet) -// for _, v := range data { -// t.Logf("%s ", string(v)) -// } + // for _, v := range data { + // t.Logf("%s ", string(v)) + // } var msg Msg msg.Unpack(data) -// println(msg.String()) + // println(msg.String()) } } diff --git a/types.go b/types.go index b2f2d95a..4cd94c72 100644 --- a/types.go +++ b/types.go @@ -15,8 +15,9 @@ import ( ) type ( - Type uint16 - Class uint16 + Type uint16 // Type is a DNS type. + Class uint16 // Class is a DNS class. + Name string // Name is a DNS domain name. ) // Packet formats @@ -174,7 +175,7 @@ type Question struct { func (q *Question) String() (s string) { // prefix with ; (as in dig) - s = ";" + NameToString(q.Name) + "\t" + s = ";" + sprintName(q.Name) + "\t" s += Class(q.Qclass).String() + "\t" s += " " + Type(q.Qtype).String() return s @@ -201,7 +202,7 @@ type CNAME struct { } func (rr *CNAME) Header() *RR_Header { return &rr.Hdr } -func (rr *CNAME) copy() RR { return &CNAME{*rr.Hdr.copyHeader(), NameToString(rr.Target)} } +func (rr *CNAME) copy() RR { return &CNAME{*rr.Hdr.copyHeader(), sprintName(rr.Target)} } func (rr *CNAME) String() string { return rr.Hdr.String() + rr.Target } func (rr *CNAME) len() int { return rr.Hdr.len() + len(rr.Target) + 1 } @@ -222,7 +223,7 @@ type MB struct { } func (rr *MB) Header() *RR_Header { return &rr.Hdr } -func (rr *MB) copy() RR { return &MB{*rr.Hdr.copyHeader(), NameToString(rr.Mb)} } +func (rr *MB) copy() RR { return &MB{*rr.Hdr.copyHeader(), sprintName(rr.Mb)} } func (rr *MB) String() string { return rr.Hdr.String() + rr.Mb } func (rr *MB) len() int { return rr.Hdr.len() + len(rr.Mb) + 1 } @@ -235,7 +236,7 @@ type MG struct { func (rr *MG) Header() *RR_Header { return &rr.Hdr } func (rr *MG) copy() RR { return &MG{*rr.Hdr.copyHeader(), rr.Mg} } func (rr *MG) len() int { l := len(rr.Mg) + 1; return rr.Hdr.len() + l } -func (rr *MG) String() string { return rr.Hdr.String() + NameToString(rr.Mg) } +func (rr *MG) String() string { return rr.Hdr.String() + sprintName(rr.Mg) } type MINFO struct { Hdr RR_Header @@ -247,7 +248,7 @@ func (rr *MINFO) Header() *RR_Header { return &rr.Hdr } func (rr *MINFO) copy() RR { return &MINFO{*rr.Hdr.copyHeader(), rr.Rmail, rr.Email} } func (rr *MINFO) String() string { - return rr.Hdr.String() + NameToString(rr.Rmail) + " " + NameToString(rr.Email) + return rr.Hdr.String() + sprintName(rr.Rmail) + " " + sprintName(rr.Email) } func (rr *MINFO) len() int { @@ -266,7 +267,7 @@ func (rr *MR) copy() RR { return &MR{*rr.Hdr.copyHeader(), rr.Mr} } func (rr *MR) len() int { l := len(rr.Mr) + 1; return rr.Hdr.len() + l } func (rr *MR) String() string { - return rr.Hdr.String() + NameToString(rr.Mr) + return rr.Hdr.String() + sprintName(rr.Mr) } type MF struct { @@ -279,7 +280,7 @@ func (rr *MF) copy() RR { return &MF{*rr.Hdr.copyHeader(), rr.Mf} } func (rr *MF) len() int { return rr.Hdr.len() + len(rr.Mf) + 1 } func (rr *MF) String() string { - return rr.Hdr.String() + " " + NameToString(rr.Mf) + return rr.Hdr.String() + " " + sprintName(rr.Mf) } type MD struct { @@ -292,7 +293,7 @@ func (rr *MD) copy() RR { return &MD{*rr.Hdr.copyHeader(), rr.Md} } func (rr *MD) len() int { return rr.Hdr.len() + len(rr.Md) + 1 } func (rr *MD) String() string { - return rr.Hdr.String() + " " + NameToString(rr.Md) + return rr.Hdr.String() + " " + sprintName(rr.Md) } type MX struct { @@ -306,7 +307,7 @@ func (rr *MX) copy() RR { return &MX{*rr.Hdr.copyHeader(), rr.Preferen func (rr *MX) len() int { l := len(rr.Mx) + 1; return rr.Hdr.len() + l + 2 } func (rr *MX) String() string { - return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + NameToString(rr.Mx) + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Mx) } type AFSDB struct { @@ -320,7 +321,7 @@ func (rr *AFSDB) copy() RR { return &AFSDB{*rr.Hdr.copyHeader(), rr.Su func (rr *AFSDB) len() int { l := len(rr.Hostname) + 1; return rr.Hdr.len() + l + 2 } func (rr *AFSDB) String() string { - return rr.Hdr.String() + strconv.Itoa(int(rr.Subtype)) + " " + NameToString(rr.Hostname) + return rr.Hdr.String() + strconv.Itoa(int(rr.Subtype)) + " " + sprintName(rr.Hostname) } type X25 struct { @@ -347,7 +348,7 @@ func (rr *RT) copy() RR { return &RT{*rr.Hdr.copyHeader(), rr.Preferen func (rr *RT) len() int { l := len(rr.Host) + 1; return rr.Hdr.len() + l + 2 } func (rr *RT) String() string { - return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + NameToString(rr.Host) + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Host) } type NS struct { @@ -360,7 +361,7 @@ func (rr *NS) len() int { l := len(rr.Ns) + 1; return rr.Hdr.len() + l func (rr *NS) copy() RR { return &NS{*rr.Hdr.copyHeader(), rr.Ns} } func (rr *NS) String() string { - return rr.Hdr.String() + NameToString(rr.Ns) + return rr.Hdr.String() + sprintName(rr.Ns) } type PTR struct { @@ -373,7 +374,7 @@ func (rr *PTR) copy() RR { return &PTR{*rr.Hdr.copyHeader(), rr.Ptr} } func (rr *PTR) len() int { l := len(rr.Ptr) + 1; return rr.Hdr.len() + l } func (rr *PTR) String() string { - return rr.Hdr.String() + NameToString(rr.Ptr) + return rr.Hdr.String() + sprintName(rr.Ptr) } type RP struct { @@ -407,7 +408,7 @@ func (rr *SOA) copy() RR { } func (rr *SOA) String() string { - return rr.Hdr.String() + NameToString(rr.Ns) + " " + NameToString(rr.Mbox) + + return rr.Hdr.String() + sprintName(rr.Ns) + " " + sprintName(rr.Mbox) + " " + strconv.FormatInt(int64(rr.Serial), 10) + " " + strconv.FormatInt(int64(rr.Refresh), 10) + " " + strconv.FormatInt(int64(rr.Retry), 10) + @@ -435,7 +436,7 @@ func (rr *TXT) copy() RR { func (rr *TXT) String() string { return rr.Hdr.String() + sprintTxt(rr.Txt) } -func NameToString(s string) string { +func sprintName(s string) string { src := []byte(s) dst := make([]byte, 0, len(src)) for i := 0; i < len(src); { @@ -581,7 +582,7 @@ func (rr *SRV) String() string { return rr.Hdr.String() + strconv.Itoa(int(rr.Priority)) + " " + strconv.Itoa(int(rr.Weight)) + " " + - strconv.Itoa(int(rr.Port)) + " " + NameToString(rr.Target) + strconv.Itoa(int(rr.Port)) + " " + sprintName(rr.Target) } type NAPTR struct { @@ -651,7 +652,7 @@ func (rr *DNAME) copy() RR { return &DNAME{*rr.Hdr.copyHeader(), rr.Ta func (rr *DNAME) len() int { l := len(rr.Target) + 1; return rr.Hdr.len() + l } func (rr *DNAME) String() string { - return rr.Hdr.String() + NameToString(rr.Target) + return rr.Hdr.String() + sprintName(rr.Target) } type A struct { @@ -696,7 +697,7 @@ type PX struct { func (rr *PX) Header() *RR_Header { return &rr.Hdr } func (rr *PX) copy() RR { return &PX{*rr.Hdr.copyHeader(), rr.Preference, rr.Map822, rr.Mapx400} } func (rr *PX) String() string { - return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + NameToString(rr.Map822) + " " + NameToString(rr.Mapx400) + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Map822) + " " + sprintName(rr.Mapx400) } func (rr *PX) len() int { return rr.Hdr.len() + 2 + len(rr.Map822) + 1 + len(rr.Mapx400) + 1 } @@ -805,7 +806,7 @@ func (rr *RRSIG) String() string { " " + TimeToString(rr.Expiration) + " " + TimeToString(rr.Inception) + " " + strconv.Itoa(int(rr.KeyTag)) + - " " + NameToString(rr.SignerName) + + " " + sprintName(rr.SignerName) + " " + rr.Signature return s } @@ -829,7 +830,7 @@ func (rr *NSEC) copy() RR { } func (rr *NSEC) String() string { - s := rr.Hdr.String() + NameToString(rr.NextDomain) + s := rr.Hdr.String() + sprintName(rr.NextDomain) for i := 0; i < len(rr.TypeBitMap); i++ { s += " " + Type(rr.TypeBitMap[i]).String() } @@ -924,7 +925,7 @@ func (rr *KX) copy() RR { return &KX{*rr.Hdr.copyHeader(), rr.Preferen func (rr *KX) String() string { return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + - " " + NameToString(rr.Exchanger) + " " + sprintName(rr.Exchanger) } type TA struct { @@ -960,7 +961,7 @@ func (rr *TALINK) len() int { return rr.Hdr.len() + len(rr.PreviousNam func (rr *TALINK) String() string { return rr.Hdr.String() + - " " + NameToString(rr.PreviousName) + " " + NameToString(rr.NextName) + " " + sprintName(rr.PreviousName) + " " + sprintName(rr.NextName) } type SSHFP struct { @@ -1071,7 +1072,7 @@ type NSAPPTR struct { func (rr *NSAPPTR) Header() *RR_Header { return &rr.Hdr } func (rr *NSAPPTR) copy() RR { return &NSAPPTR{*rr.Hdr.copyHeader(), rr.Ptr} } -func (rr *NSAPPTR) String() string { return rr.Hdr.String() + NameToString(rr.Ptr) } +func (rr *NSAPPTR) String() string { return rr.Hdr.String() + sprintName(rr.Ptr) } func (rr *NSAPPTR) len() int { return rr.Hdr.len() + len(rr.Ptr) } type NSEC3 struct { @@ -1270,7 +1271,7 @@ func (rr *HIP) String() string { " " + rr.Hit + " " + rr.PublicKey for _, d := range rr.RendezvousServers { - s += " " + NameToString(d) + s += " " + sprintName(d) } return s } @@ -1398,7 +1399,7 @@ func (rr *LP) copy() RR { return &LP{*rr.Hdr.copyHeader(), rr.Preferen func (rr *LP) len() int { return rr.Hdr.len() + 2 + len(rr.Fqdn) + 1 } func (rr *LP) String() string { - return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + NameToString(rr.Fqdn) + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Fqdn) } type EUI48 struct { diff --git a/zscan.go b/zscan.go index 55d30f46..bb6975fe 100644 --- a/zscan.go +++ b/zscan.go @@ -116,7 +116,7 @@ func NewRR(s string) (RR, error) { return ReadRR(strings.NewReader(s), "") } -// ReadRR reads the RR contained in q. +// ReadRR reads the RR contained in q. // See NewRR for more documentation. func ReadRR(q io.Reader, filename string) (RR, error) { r := <-parseZoneHelper(q, ".", filename, 1)