mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
* github.com/miekg/dns * Greatly simplify the logic for handling serial numbers. Related code was all over the place. Now it is abstracted into one testable method makeSoa. This simplifies code in many other places. * Update docs/_providers/bind.md: Edit old text. Add SOA description. * SOA records are now treated like any other record internally. You still can't specify them in dnsconfig.js, but that's by design. * The URL for issue 491 was wrong in many places * BIND: Clarify GENERATE_ZONEFILE message
78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
// Copyright 2012 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package ipv4
|
|
|
|
import (
|
|
"errors"
|
|
"net"
|
|
"runtime"
|
|
|
|
"golang.org/x/net/internal/socket"
|
|
)
|
|
|
|
var (
|
|
errInvalidConn = errors.New("invalid connection")
|
|
errMissingAddress = errors.New("missing address")
|
|
errNilHeader = errors.New("nil header")
|
|
errHeaderTooShort = errors.New("header too short")
|
|
errExtHeaderTooShort = errors.New("extension header too short")
|
|
errInvalidConnType = errors.New("invalid conn type")
|
|
errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH)
|
|
|
|
// See https://www.freebsd.org/doc/en/books/porters-handbook/versions.html.
|
|
freebsdVersion uint32
|
|
compatFreeBSD32 bool // 386 emulation on amd64
|
|
)
|
|
|
|
// See golang.org/issue/30899.
|
|
func adjustFreeBSD32(m *socket.Message) {
|
|
// FreeBSD 12.0-RELEASE is affected by https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236737
|
|
if 1200086 <= freebsdVersion && freebsdVersion < 1201000 {
|
|
l := (m.NN + 4 - 1) &^ (4 - 1)
|
|
if m.NN < l && l <= len(m.OOB) {
|
|
m.NN = l
|
|
}
|
|
}
|
|
}
|
|
|
|
func boolint(b bool) int {
|
|
if b {
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func netAddrToIP4(a net.Addr) net.IP {
|
|
switch v := a.(type) {
|
|
case *net.UDPAddr:
|
|
if ip := v.IP.To4(); ip != nil {
|
|
return ip
|
|
}
|
|
case *net.IPAddr:
|
|
if ip := v.IP.To4(); ip != nil {
|
|
return ip
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func opAddr(a net.Addr) net.Addr {
|
|
switch a.(type) {
|
|
case *net.TCPAddr:
|
|
if a == nil {
|
|
return nil
|
|
}
|
|
case *net.UDPAddr:
|
|
if a == nil {
|
|
return nil
|
|
}
|
|
case *net.IPAddr:
|
|
if a == nil {
|
|
return nil
|
|
}
|
|
}
|
|
return a
|
|
}
|