1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

BIND: Enable hermetic zone builds (#2275)

Co-authored-by: Tom Limoncelli <tal@whatexit.org>
This commit is contained in:
Tom Limoncelli
2023-04-25 18:00:11 -05:00
committed by GitHub
parent b24e7ef126
commit fba40d5373
3 changed files with 25 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import (
"golang.org/x/net/idna" "golang.org/x/net/idna"
"github.com/StackExchange/dnscontrol/v3/models" "github.com/StackExchange/dnscontrol/v3/models"
"github.com/StackExchange/dnscontrol/v3/pkg/bindserial"
"github.com/StackExchange/dnscontrol/v3/pkg/credsfile" "github.com/StackExchange/dnscontrol/v3/pkg/credsfile"
"github.com/StackExchange/dnscontrol/v3/pkg/diff2" "github.com/StackExchange/dnscontrol/v3/pkg/diff2"
"github.com/StackExchange/dnscontrol/v3/pkg/nameservers" "github.com/StackExchange/dnscontrol/v3/pkg/nameservers"
@ -68,6 +69,11 @@ func (args *PreviewArgs) flags() []cli.Flag {
Destination: &args.Full, Destination: &args.Full,
Usage: `Add headings, providers names, notifications of no changes, etc`, Usage: `Add headings, providers names, notifications of no changes, etc`,
}) })
flags = append(flags, &cli.Int64Flag{
Name: "bindserial",
Destination: &bindserial.ForcedValue,
Usage: `Force BIND serial numbers to this value (for reproducibility)`,
})
return flags return flags
} }

11
pkg/bindserial/main.go Normal file
View File

@ -0,0 +1,11 @@
package bindserial
// NB(tlim): Yes, its gross to use a global variable for this.
// However there's no cleaner way to do it. Ideally we'd add a way to
// have per-provider flags or settings on the command line. At least
// by isolating it to this file we limit the blast radius of this bad
// decision.
// ForceBindSerial if non-zero, BIND will generate SOA serial numbers
// using this value.
var ForcedValue int64

View File

@ -4,6 +4,8 @@ import (
"log" "log"
"strconv" "strconv"
"time" "time"
"github.com/StackExchange/dnscontrol/v3/pkg/bindserial"
) )
var nowFunc = time.Now var nowFunc = time.Now
@ -18,6 +20,12 @@ func generateSerial(oldSerial uint32) uint32 {
// that is smaller than the old one, we punt and increment the old number. // that is smaller than the old one, we punt and increment the old number.
// At no time will a serial number == 0 be returned. // At no time will a serial number == 0 be returned.
if bindserial.ForcedValue != 0 {
// https://github.com/StackExchange/dnscontrol/issues/1859
// User needs to have reproducible builds and BIND generates
return uint32(bindserial.ForcedValue & 0xFFFF)
}
original := oldSerial original := oldSerial
var newSerial uint32 var newSerial uint32