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

get-zones output should work as input into preview (#688)

* Add tests for get-zones
* fix CAA, SSHFP, TLSA and other bugs
* New format for get-zones: "djs" which is js but uses "disco commas"
* Print diffs using github.com/andreyvit/diff

Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
This commit is contained in:
Tom Limoncelli
2020-03-10 11:32:47 -04:00
committed by GitHub
parent 67e78f7e15
commit 4edf360854
30 changed files with 4993 additions and 37 deletions

View File

@ -38,17 +38,27 @@ ARGUMENTS:
zone: One or more zones (domains) to download; or "all".
FORMATS:
--format=js dnsconfig.js format (not perfect, but a decent first draft)
--format=js dnsconfig.js format (not perfect, just a decent first draft)
--format=djs js with disco commas
--format=zone BIND Zonefile format
--format=tsv TAB separated value (useful for AWK)
--format=nameonly Just print the zone names
The columns in --format=tsv are:
FQDN (the label with the domain)
ShortName (just the label, "@" if it is the naked domain)
TTL
Record Type (A, AAAA, CNAME, etc.)
Target and arguments (quoted like in a zonefile)
The --ttl flag only applies to zone/js/djs formats.
EXAMPLES:
dnscontrol get-zones myr53 ROUTE53 example.com
dnscontrol get-zones gmain GANDI_V5 example.comn other.com
dnscontrol get-zones cfmain CLOUDFLAREAPI all
dnscontrol get-zones -format=tsv bind BIND example.com
dnscontrol get-zones -format=js -out=draft.js glcoud GCLOUD example.com`,
dnscontrol get-zones -format=djs -out=draft.js glcoud GCLOUD example.com`,
}
}())
@ -105,7 +115,7 @@ func (args *GetZoneArgs) flags() []cli.Flag {
Name: "format",
Destination: &args.OutputFormat,
Value: "zone",
Usage: `Output format: js zone tsv nameonly`,
Usage: `Output format: js djs zone tsv nameonly`,
})
flags = append(flags, &cli.StringFlag{
Name: "out",
@ -165,7 +175,7 @@ func GetZone(args GetZoneArgs) error {
return nil
}
// actually fetch all of the records
// fetch all of the records
zoneRecs := make([]models.Records, len(zones))
for i, zone := range zones {
recs, err := provider.GetZoneRecords(zone)
@ -175,14 +185,15 @@ func GetZone(args GetZoneArgs) error {
zoneRecs[i] = recs
}
// Write it out:
// Write the heading:
if args.OutputFormat == "js" {
if args.OutputFormat == "js" || args.OutputFormat == "djs" {
fmt.Fprintf(w, `var %s = NewDnsProvider("%s", "%s");`+"\n",
args.CredName, args.CredName, args.ProviderName)
fmt.Fprintf(w, `var REG_CHANGEME = NewRegistrar("ThirdParty", "NONE");`+"\n")
}
// now print all zones
// print each zone
for i, recs := range zoneRecs {
zoneName := zones[i]
@ -194,19 +205,26 @@ func GetZone(args GetZoneArgs) error {
prettyzone.WriteZoneFileRC(w, z.Records, zoneName, uint32(args.DefaultTTL), nil)
fmt.Fprintln(w)
case "js":
fmt.Fprintf(w, `D("%s", REG_CHANGEME,`, zoneName)
fmt.Fprintf(w, "\n\tDnsProvider(%s)", args.CredName)
case "js", "djs":
sep := ",\n\t" // Commas at EOL
if args.OutputFormat == "djs" {
sep = "\n\t, " // Funky comma mode
}
fmt.Fprintf(w, `D("%s", REG_CHANGEME%s`, zoneName, sep)
var o []string
o = append(o, fmt.Sprintf("DnsProvider(%s)", args.CredName))
defaultTTL := uint32(args.DefaultTTL)
if defaultTTL == 0 {
defaultTTL = prettyzone.MostCommonTTL(recs)
}
if defaultTTL != models.DefaultTTL && defaultTTL != 0 {
fmt.Fprintf(w, "\n\tDefaultTTL(%d)", defaultTTL)
o = append(o, fmt.Sprintf("DefaultTTL(%d)", defaultTTL))
}
for _, rec := range recs {
fmt.Fprint(w, formatDsl(zoneName, rec, defaultTTL))
o = append(o, formatDsl(zoneName, rec, defaultTTL))
}
out := strings.Join(o, sep)
fmt.Fprint(w, strings.ReplaceAll(out, "\n\t, //", "\n\t//, "))
fmt.Fprint(w, "\n)\n")
case "tsv":
@ -233,23 +251,47 @@ func formatDsl(zonename string, rec *models.RecordConfig, defaultTTL uint32) str
}
switch rec.Type { // #rtype_variations
case "CAA":
return makeCaa(rec, ttlop)
case "MX":
target = fmt.Sprintf("%d, '%s'", rec.MxPreference, rec.GetTargetField())
case "SSHFP":
target = fmt.Sprintf("%d, %d, '%s'", rec.SshfpAlgorithm, rec.SshfpFingerprint, rec.GetTargetField())
case "SOA":
rec.Type = "//SOA"
target = fmt.Sprintf("'%s', '%s', %d, %d, %d, %d, %d", rec.GetTargetField(), rec.SoaMbox, rec.SoaSerial, rec.SoaRefresh, rec.SoaRetry, rec.SoaExpire, rec.SoaMinttl)
case "SRV":
target = fmt.Sprintf("%d, %d, %d, '%s'", rec.SrvPriority, rec.SrvWeight, rec.SrvPort, rec.GetTargetField())
case "TLSA":
target = fmt.Sprintf("%d, %d, %d, '%s'", rec.TlsaUsage, rec.TlsaSelector, rec.TlsaMatchingType, rec.GetTargetField())
case "TXT":
if len(rec.TxtStrings) == 1 {
target = `'` + rec.TxtStrings[0] + `'`
} else {
target = `['` + strings.Join(rec.TxtStrings, `', '`) + `']`
}
// TODO(tlim): If this is an SPF record, generate a SPF_BUILDER().
case "NS":
// NS records at the apex should be NAMESERVER() records.
if rec.Name == "@" {
return fmt.Sprintf(",\n\tNAMESERVER('%s')", target)
return fmt.Sprintf("NAMESERVER('%s')", target)
}
target = "'" + target + "'"
default:
target = "'" + target + "'"
}
return fmt.Sprintf(",\n\t%s('%s', %s%s)", rec.Type, rec.Name, target, ttlop)
return fmt.Sprintf("%s('%s', %s%s)", rec.Type, rec.Name, target, ttlop)
}
func makeCaa(rec *models.RecordConfig, ttlop string) string {
var target string
if rec.CaaFlag == 128 {
target = fmt.Sprintf("'%s', '%s', CAA_CRITICAL", rec.CaaTag, rec.GetTargetField())
} else {
target = fmt.Sprintf("'%s', '%s'", rec.CaaTag, rec.GetTargetField())
}
return fmt.Sprintf("%s('%s', %s%s)", rec.Type, rec.Name, target, ttlop)
// TODO(tlim): Generate a CAA_BUILDER() instead?
}

80
commands/gz_test.go Normal file
View File

@ -0,0 +1,80 @@
package commands
import (
"fmt"
"io/ioutil"
"log"
"os"
"testing"
"github.com/andreyvit/diff"
_ "github.com/StackExchange/dnscontrol/v2/providers/_all"
)
func TestFormatTypes(t *testing.T) {
/*
Input: Converted to: Should match contents of:
test_data/$DOMAIN.zone js test_data/$DOMAIN.zone.js
test_data/$DOMAIN.zone tsv test_data/$DOMAIN.zone.tsv
test_data/$DOMAIN.zone zone test_data/$DOMAIN.zone.zone
*/
for _, domain := range []string{"simple.com", "example.org"} {
t.Run(domain+"/js", func(t *testing.T) { testFormat(t, domain, "js") })
t.Run(domain+"/tsv", func(t *testing.T) { testFormat(t, domain, "tsv") })
t.Run(domain+"/zone", func(t *testing.T) { testFormat(t, domain, "zone") })
}
}
func testFormat(t *testing.T, domain, format string) {
t.Helper()
expectedFilename := fmt.Sprintf("test_data/%s.zone.%s", domain, format)
outputFiletmpl := fmt.Sprintf("%s.zone.%s.*.txt", domain, format)
outfile, err := ioutil.TempFile("", outputFiletmpl)
if err != nil {
log.Fatal(err)
}
defer os.Remove(outfile.Name())
// Convert test data to the experiment output.
gzargs := GetZoneArgs{
ZoneNames: []string{domain},
OutputFormat: format,
OutputFile: outfile.Name(),
CredName: "bind",
ProviderName: "BIND",
}
gzargs.CredsFile = "test_data/creds.json"
// Read the zonefile and convert
err = GetZone(gzargs)
if err != nil {
log.Fatal(err)
}
// Read the actual result:
got, err := ioutil.ReadFile(outfile.Name())
if err != nil {
log.Fatal(err)
}
// Read the expected result
want, err := ioutil.ReadFile(expectedFilename)
if err != nil {
log.Fatal(err)
}
// // Update got -> want
// err = ioutil.WriteFile(expectedFilename, got, 0644)
// if err != nil {
// log.Fatal(err)
// }
if w, g := string(want), string(got); w != g {
t.Errorf("testFormat mismatch (-got +want):\n%s", diff.LineDiff(g, w))
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,355 @@
var bind = NewDnsProvider("bind", "BIND");
var REG_CHANGEME = NewRegistrar("ThirdParty", "NONE");
D("example.org", REG_CHANGEME,
DnsProvider(bind),
DefaultTTL(7200),
//SOA('@', 'ns1.example.org.', 'hostmaster.example.org.', 2020030700, 7200, 3600, 864000, 7200, TTL(43200)),
NAMESERVER('ns1.example.org.'),
NAMESERVER('ns2.example.org.'),
NAMESERVER('ns-a.example.net.'),
NAMESERVER('friend-dns.example.com.'),
MX('@', 10, 'mx.example.org.'),
TXT('@', 'v=spf1 ip4:192.0.2.25 ip6:2001:db8::1:25 mx include:_spf.example.com ~all'),
SRV('_client._smtp', 1, 1, 1, 'example.org.'),
SRV('_client._smtp.mx', 1, 2, 1, 'mx.example.org.'),
SRV('_client._smtp.foo', 1, 2, 1, 'foo.example.org.'),
SRV('_kerberos._tcp', 10, 1, 88, 'kerb-service.example.org.'),
SRV('_kerberos._udp', 10, 1, 88, 'kerb-service.example.org.'),
SRV('_kpasswd._udp', 10, 1, 464, 'kerb-service.example.org.'),
SRV('_kerberos-adm._tcp', 10, 1, 749, 'kerb-service.example.org.'),
TXT('_kerberos', 'EXAMPLE.ORG'),
SRV('_ldap._tcp', 0, 0, 0, '.'),
SRV('_ldap._udp', 0, 0, 0, '.'),
SRV('_jabber._tcp', 10, 2, 5269, 'xmpp-s2s.example.org.'),
SRV('_xmpp-server._tcp', 10, 2, 5269, 'xmpp-s2s.example.org.'),
SRV('_xmpp-client._tcp', 10, 2, 5222, 'xmpp.example.org.'),
SRV('_im._sip', 0, 0, 0, '.'),
SRV('_pres._sip', 0, 0, 0, '.'),
SRV('_sip+d2t._tcp', 0, 0, 0, '.'),
SRV('_sips+d2t._tcp', 0, 0, 0, '.'),
SRV('_sip+d2u._udp', 0, 0, 0, '.'),
SRV('_sip+d2s._sctp', 0, 0, 0, '.'),
SRV('_sips+d2s._sctp', 0, 0, 0, '.'),
SRV('_submission._tcp', 10, 10, 587, 'smtp.example.org.'),
SRV('_submissions._tcp', 10, 10, 465, 'smtp.example.org.'),
SRV('_imap._tcp', 10, 10, 143, 'imap.example.org.'),
SRV('_imaps._tcp', 10, 10, 993, 'imap.example.org.'),
SRV('_pop3._tcp', 0, 0, 0, '.'),
SRV('_pop3s._tcp', 0, 0, 0, '.'),
SRV('_sieve._tcp', 10, 10, 4190, 'imap.example.org.'),
TXT('dns-moreinfo', ['Fred Bloggs, TZ=America/New_York', 'Chat-Service-X: @handle1', 'Chat-Service-Y: federated-handle@example.org']),
SRV('_pgpkey-http._tcp', 0, 0, 0, '.'),
SRV('_pgpkey-https._tcp', 0, 0, 0, '.'),
SRV('_hkp._tcp', 0, 0, 0, '.'),
SRV('_openpgpkey._tcp', 10, 10, 443, 'openpgpkey.example.org.'),
SRV('_finger._tcp', 10, 10, 79, 'barbican.example.org.'),
SRV('_avatars-sec._tcp', 10, 10, 443, 'avatars.example.org.'),
A('@', '192.0.2.1'),
AAAA('@', '2001:db8::1:1'),
TXT('_adsp._domainkey', 'dkim=all'),
TXT('_dmarc', 'v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s'),
TXT('d201911._domainkey', ['v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4SmyE5Tz5/wPL8cb2AKuHnlFeLMOhAl1UX/NYaeDCKMWoBPTgZRT0jonKLmV2UscHdodXu5ZsLr/NAuLCp7HmPLReLz7kxKncP6ppveKxc1aq5SPTKeWe77p6BptlahHc35eiXsZRpTsEzrbEOainy1IWEd+w9p1gWbrSutwE22z0i4V88nQ9UBa1ks', '6cVGxXBZFovWC+i28aGs6Lc7cSfHG5+Mrg3ud5X4evYXTGFMPpunMcCsXrqmS5a+5gRSEMZhngha/cHjLwaJnWzKaywNWF5XOsCjL94QkS0joB7lnGOHMNSZBCcu542Y3Ht3SgHhlpkF9mIbIRfpzA9IoSQIDAQAB']),
TXT('d201911e2._domainkey', 'v=DKIM1; k=ed25519; p=GBt2k2L39KUb39fg5brOppXDHXvISy0+ECGgPld/bIo='),
TXT('d202003._domainkey', ['v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv/1tQvOEs7xtKNm7PbPgY4hQjwHVvqqkDb0+TeqZHYRSczQ3c0LFJrIDFiPIdwQe/7AuKrxvATSh/uXKZ3EP4ouMgROPZnUxVXENeetJj+pc3nfGwTKUBTTTth+SO74gdIWsntjvAfduzosC4ZkxbDwZ9c253qXARGvGu+LB/iAeq0ngEbm5fU13+Jo', 'pv0d4dR6oGe9GvMEnGGLZzNrxWl1BPe2x5JZ5/X/3fW8vJx3OgRB5N6fqbAJ6HZ9kcbikDH4lPPl9RIoprFk7mmwno/nXLQYGhPobmqq8wLkDiXEkWtYa5lzujz3XI3Zkk8ZIOGvdbVVfAttT0IVPnYkOhQIDAQAB']),
TXT('d202003e2._domainkey', 'v=DKIM1; k=ed25519; p=DQI5d9sNMrr0SLDoAi071IFOyKnlbR29hAQdqVQecQg='),
TXT('_report', 'r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;'),
TXT('_smtp._tls', 'v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org'),
TXT('_smtp-tlsrpt', 'v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org'),
TXT('example.net._report._dmarc', 'v=DMARC1'),
TXT('example.com._report._dmarc', 'v=DMARC1'),
TXT('xn--2j5b.xn--9t4b11yi5a._report._dmarc', 'v=DMARC1'),
TXT('special.test._report._dmarc', 'v=DMARC1'),
TXT('xn--qck5b9a5eml3bze.xn--zckzah._report._dmarc', 'v=DMARC1'),
CNAME('*._smimecert', '_ourca-smimea.example.org.'),
PTR('b._dns-sd._udp', 'field.example.org.'),
PTR('lb._dns-sd._udp', 'field.example.org.'),
PTR('r._dns-sd._udp', 'field.example.org.'),
NS('field', 'ns1.example.org.'),
NS('field', 'ns2.example.org.'),
A('barbican', '192.0.2.1'),
AAAA('barbican', '2001:db8::1:1'),
A('barbican.ipv4', '192.0.2.1'),
AAAA('barbican.ipv6', '2001:db8::1:1'),
A('megalomaniac', '198.51.100.254'),
AAAA('megalomaniac', '2001:db8:ffef::254'),
A('megalomaniac.ipv4', '198.51.100.254'),
AAAA('megalomaniac.ipv6', '2001:db8:ffef::254'),
SSHFP('megalomaniac', 1, 2, '4e9ced94d3caf2ce915f85a63ce7279d5118a79ea03dac59cf4859b825d2f619'),
SSHFP('megalomaniac', 3, 2, 'd3556a3db83ab9ccec39dc6693dd2f3e28b178c9bba61880924821c426cc61eb'),
SSHFP('megalomaniac', 4, 2, 'c60c9d9d4728668f5f46986ff0c5b416c5e913862c4970cbfe211a6f44a111b4'),
SSHFP('megalomaniac.ipv4', 1, 2, '4e9ced94d3caf2ce915f85a63ce7279d5118a79ea03dac59cf4859b825d2f619'),
SSHFP('megalomaniac.ipv4', 3, 2, 'd3556a3db83ab9ccec39dc6693dd2f3e28b178c9bba61880924821c426cc61eb'),
SSHFP('megalomaniac.ipv4', 4, 2, 'c60c9d9d4728668f5f46986ff0c5b416c5e913862c4970cbfe211a6f44a111b4'),
SSHFP('megalomaniac.ipv6', 1, 2, '4e9ced94d3caf2ce915f85a63ce7279d5118a79ea03dac59cf4859b825d2f619'),
SSHFP('megalomaniac.ipv6', 3, 2, 'd3556a3db83ab9ccec39dc6693dd2f3e28b178c9bba61880924821c426cc61eb'),
SSHFP('megalomaniac.ipv6', 4, 2, 'c60c9d9d4728668f5f46986ff0c5b416c5e913862c4970cbfe211a6f44a111b4'),
A('tower', '192.0.2.42'),
AAAA('tower', '2001:db8::1:42'),
A('tower.ipv4', '192.0.2.42'),
AAAA('tower.ipv6', '2001:db8::1:42'),
SSHFP('tower', 1, 2, '0f211d236e94768911a294f38653c4af6fa935a5b06c975d8162f59142571451'),
SSHFP('tower', 3, 2, '88bf7b7401c11fa2e84871efb06cd73d8fc409154605b354db2dda0b82fe1160'),
SSHFP('tower', 4, 2, '6d30900be0faaae73568fc007a87b4d076cf9a351ecacc1106aef726c34ad61d'),
SSHFP('tower.ipv4', 1, 2, '0f211d236e94768911a294f38653c4af6fa935a5b06c975d8162f59142571451'),
SSHFP('tower.ipv4', 3, 2, '88bf7b7401c11fa2e84871efb06cd73d8fc409154605b354db2dda0b82fe1160'),
SSHFP('tower.ipv4', 4, 2, '6d30900be0faaae73568fc007a87b4d076cf9a351ecacc1106aef726c34ad61d'),
SSHFP('tower.ipv6', 1, 2, '0f211d236e94768911a294f38653c4af6fa935a5b06c975d8162f59142571451'),
SSHFP('tower.ipv6', 3, 2, '88bf7b7401c11fa2e84871efb06cd73d8fc409154605b354db2dda0b82fe1160'),
SSHFP('tower.ipv6', 4, 2, '6d30900be0faaae73568fc007a87b4d076cf9a351ecacc1106aef726c34ad61d'),
A('vcs', '192.0.2.228'),
AAAA('vcs', '2001:db8::48:4558:4456:4353'),
A('vcs.ipv4', '192.0.2.228'),
AAAA('vcs.ipv6', '2001:db8::48:4558:4456:4353'),
CNAME('git', 'vcs.example.org.'),
CNAME('git.ipv4', 'vcs.ipv4.example.org.'),
CNAME('git.ipv6', 'vcs.ipv6.example.org.'),
AAAA('svn', '2001:db8::48:4558:73:766e'),
SSHFP('vcs', 1, 2, 'b518be390babdf43cb2d598aa6befa6ce6878546bf107b829d0cfc65253a97d4'),
SSHFP('vcs', 3, 2, 'e92545dc0bf501f72333ddeb7a37afc2c5b408ce39a3ad95fbc66236f0077323'),
SSHFP('vcs', 4, 2, '02289441124a487095a6cda2e946c6a8ed9087faf3592ec4135536c3e615521c'),
SSHFP('vcs.ipv4', 1, 2, 'b518be390babdf43cb2d598aa6befa6ce6878546bf107b829d0cfc65253a97d4'),
SSHFP('vcs.ipv4', 3, 2, 'e92545dc0bf501f72333ddeb7a37afc2c5b408ce39a3ad95fbc66236f0077323'),
SSHFP('vcs.ipv4', 4, 2, '02289441124a487095a6cda2e946c6a8ed9087faf3592ec4135536c3e615521c'),
SSHFP('vcs.ipv6', 1, 2, 'b518be390babdf43cb2d598aa6befa6ce6878546bf107b829d0cfc65253a97d4'),
SSHFP('vcs.ipv6', 3, 2, 'e92545dc0bf501f72333ddeb7a37afc2c5b408ce39a3ad95fbc66236f0077323'),
SSHFP('vcs.ipv6', 4, 2, '02289441124a487095a6cda2e946c6a8ed9087faf3592ec4135536c3e615521c'),
A('nsauth', '192.0.2.53'),
AAAA('nsauth', '2001:db8::53:1'),
A('nsauth.ipv4', '192.0.2.53'),
AAAA('nsauth.ipv6', '2001:db8::53:1'),
SSHFP('nsauth', 1, 2, '895804ae022fff643b2677563cb850607c5bb564d9919896c521098c8abc40f2'),
SSHFP('nsauth', 3, 2, '28a65470badae611375747e1a803211c41e3d71e97741fa92ccbdf7b01f34e42'),
SSHFP('nsauth', 4, 2, '6e10445c0649c03fa83e18b1873e5b89b3a20893ecb48d01e7cedb3dd563ecf0'),
SSHFP('nsauth.ipv4', 1, 2, '895804ae022fff643b2677563cb850607c5bb564d9919896c521098c8abc40f2'),
SSHFP('nsauth.ipv4', 3, 2, '28a65470badae611375747e1a803211c41e3d71e97741fa92ccbdf7b01f34e42'),
SSHFP('nsauth.ipv4', 4, 2, '6e10445c0649c03fa83e18b1873e5b89b3a20893ecb48d01e7cedb3dd563ecf0'),
SSHFP('nsauth.ipv6', 1, 2, '895804ae022fff643b2677563cb850607c5bb564d9919896c521098c8abc40f2'),
SSHFP('nsauth.ipv6', 3, 2, '28a65470badae611375747e1a803211c41e3d71e97741fa92ccbdf7b01f34e42'),
SSHFP('nsauth.ipv6', 4, 2, '6e10445c0649c03fa83e18b1873e5b89b3a20893ecb48d01e7cedb3dd563ecf0'),
A('ns1', '192.0.2.53'),
AAAA('ns1', '2001:db8::53:1'),
A('ns2', '203.0.113.53'),
AAAA('ns2', '2001:db8:113::53'),
A('hermes', '192.0.2.25'),
AAAA('hermes', '2001:db8::48:4558:736d:7470'),
AAAA('hermes', '2001:db8::48:4558:696d:6170'),
A('hermes.ipv4', '192.0.2.25'),
AAAA('hermes.ipv6', '2001:db8::48:4558:736d:7470'),
AAAA('hermes.ipv6', '2001:db8::48:4558:696d:6170'),
SSHFP('hermes', 1, 2, '4472ff5bd0528cd49216af4503ba6a1c48f121d0292a31d6af193e5000af4966'),
SSHFP('hermes', 3, 2, 'eaba20c1565676a5229184ccfcf82d0ee408f91757a67d9fa51a0b6f3db4a33b'),
SSHFP('hermes', 4, 2, 'a9d89920e599d04363c8b35a4ce66c1ed257ea1d16981f060b6aed080bbb7a7c'),
SSHFP('hermes.ipv4', 1, 2, '4472ff5bd0528cd49216af4503ba6a1c48f121d0292a31d6af193e5000af4966'),
SSHFP('hermes.ipv4', 3, 2, 'eaba20c1565676a5229184ccfcf82d0ee408f91757a67d9fa51a0b6f3db4a33b'),
SSHFP('hermes.ipv4', 4, 2, 'a9d89920e599d04363c8b35a4ce66c1ed257ea1d16981f060b6aed080bbb7a7c'),
SSHFP('hermes.ipv6', 1, 2, '4472ff5bd0528cd49216af4503ba6a1c48f121d0292a31d6af193e5000af4966'),
SSHFP('hermes.ipv6', 3, 2, 'eaba20c1565676a5229184ccfcf82d0ee408f91757a67d9fa51a0b6f3db4a33b'),
SSHFP('hermes.ipv6', 4, 2, 'a9d89920e599d04363c8b35a4ce66c1ed257ea1d16981f060b6aed080bbb7a7c'),
A('kerb-service', '192.0.2.88'),
AAAA('kerb-service', '2001:db8::48:4558:6b65:7262'),
A('security', '192.0.2.92'),
AAAA('security', '2001:db8::48:4558:53:4543'),
A('security.ipv4', '192.0.2.92'),
AAAA('security.ipv6', '2001:db8::48:4558:53:4543'),
A('services', '192.0.2.93'),
AAAA('services', '2001:db8::48:4558:5345:5256'),
A('services.ipv4', '192.0.2.93'),
AAAA('services.ipv6', '2001:db8::48:4558:5345:5256'),
A('openpgpkey', '192.0.2.92'),
AAAA('openpgpkey', '2001:db8::48:4558:53:4543'),
CNAME('finger', 'barbican.example.org.'),
CNAME('finger.ipv4', 'barbican.ipv4.example.org.'),
CNAME('finger.ipv6', 'barbican.ipv6.example.org.'),
A('avatars', '192.0.2.93'),
AAAA('avatars', '2001:db8::48:4558:5345:5256'),
CNAME('dict', 'services.example.org.'),
CNAME('people', 'services.example.org.'),
CNAME('people.ipv4', 'services.ipv4.example.org.'),
CNAME('people.ipv6', 'services.ipv6.example.org.'),
CNAME('wpad', 'services.example.org.'),
CNAME('www', 'services.example.org.'),
CNAME('www.ipv4', 'services.ipv4.example.org.'),
CNAME('www.ipv6', 'services.ipv6.example.org.'),
CAA('@', 'issue', 'example.net'),
CAA('@', 'issue', 'letsencrypt.org\; accounturi=https://acme-v01.api.letsencrypt.org/acme/reg/1234567'),
CAA('@', 'issue', 'letsencrypt.org\; accounturi=https://acme-staging-v02.api.letsencrypt.org/acme/acct/23456789'),
CAA('@', 'issue', 'letsencrypt.org\; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/76543210'),
CAA('@', 'issuewild', ';'),
CAA('@', 'iodef', 'mailto:security@example.org'),
TLSA('_ourcaca4-tlsa', 2, 0, 1, 'ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488'),
TLSA('_ourcaca5-tlsa', 2, 0, 1, '11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1'),
TLSA('_cacert-c3-tlsa', 2, 0, 1, '4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8'),
TLSA('_letsencrypt-tlsa', 2, 1, 1, '60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18'),
TLSA('_letsencrypt-tlsa', 2, 1, 1, 'b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b'),
TLSA('_amazon-tlsa', 2, 0, 1, '8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e'),
TLSA('_amazon-tlsa', 2, 0, 1, '1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4'),
TLSA('_amazon-tlsa', 2, 0, 1, '18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4'),
TLSA('_amazon-tlsa', 2, 0, 1, 'e35d28419ed02025cfa69038cd623962458da5c695fbdea3c22b0bfb25897092'),
TLSA('_ourca-tlsa', 2, 0, 1, 'ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488'),
TLSA('_ourca-tlsa', 2, 0, 1, '11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1'),
TLSA('_ourca-cacert-tlsa', 2, 0, 1, 'ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488'),
TLSA('_ourca-cacert-tlsa', 2, 0, 1, '11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1'),
TLSA('_ourca-cacert-tlsa', 2, 0, 1, '4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8'),
TLSA('_ourca-le-tlsa', 2, 0, 1, 'ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488'),
TLSA('_ourca-le-tlsa', 2, 0, 1, '11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1'),
TLSA('_ourca-le-tlsa', 2, 1, 1, '60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18'),
TLSA('_ourca-le-tlsa', 2, 1, 1, 'b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b'),
TLSA('_ourca-cacert-le-tlsa', 2, 0, 1, 'ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488'),
TLSA('_ourca-cacert-le-tlsa', 2, 0, 1, '11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1'),
TLSA('_ourca-cacert-le-tlsa', 2, 0, 1, '4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8'),
TLSA('_ourca-cacert-le-tlsa', 2, 1, 1, '60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18'),
TLSA('_ourca-cacert-le-tlsa', 2, 1, 1, 'b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b'),
TLSA('_cacert-le-tlsa', 2, 0, 1, '4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8'),
TLSA('_cacert-le-tlsa', 2, 1, 1, '60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18'),
TLSA('_cacert-le-tlsa', 2, 1, 1, 'b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b'),
TLSA('_le-amazon-tlsa', 2, 1, 1, '60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18'),
TLSA('_le-amazon-tlsa', 2, 1, 1, 'b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b'),
TLSA('_le-amazon-tlsa', 2, 0, 1, '8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e'),
TLSA('_le-amazon-tlsa', 2, 0, 1, '1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4'),
TLSA('_le-amazon-tlsa', 2, 0, 1, '18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4'),
TLSA('_le-amazon-tlsa', 2, 0, 1, 'e35d28419ed02025cfa69038cd623962458da5c695fbdea3c22b0bfb25897092'),
TLSA('_ourca-le-amazon-tlsa', 2, 0, 1, 'ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488'),
TLSA('_ourca-le-amazon-tlsa', 2, 0, 1, '11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1'),
TLSA('_ourca-le-amazon-tlsa', 2, 1, 1, '60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18'),
TLSA('_ourca-le-amazon-tlsa', 2, 1, 1, 'b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b'),
TLSA('_ourca-le-amazon-tlsa', 2, 0, 1, '8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e'),
TLSA('_ourca-le-amazon-tlsa', 2, 0, 1, '1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4'),
TLSA('_ourca-le-amazon-tlsa', 2, 0, 1, '18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4'),
TLSA('_ourca-le-amazon-tlsa', 2, 0, 1, 'e35d28419ed02025cfa69038cd623962458da5c695fbdea3c22b0bfb25897092'),
CNAME('_443._tcp.www', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.www.ipv4', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.www.ipv6', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.people', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.people.ipv4', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.people.ipv6', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.git', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.svn', '_ourca-le-tlsa.example.org.'),
CNAME('_5222._tcp.xmpp', '_ourca-le-tlsa.example.org.'),
CNAME('_5223._tcp.xmpp', '_ourca-le-tlsa.example.org.'),
CNAME('_5269._tcp.xmpp-s2s', '_ourca-le-tlsa.example.org.'),
CNAME('_25._tcp.mx', '_ourca-le-tlsa.example.org.'),
CNAME('_26._tcp.mx', '_ourca-le-tlsa.example.org.'),
CNAME('_27._tcp.mx', '_ourca-le-tlsa.example.org.'),
CNAME('_465._tcp.smtp46', '_ourca-le-tlsa.example.org.'),
CNAME('_587._tcp.smtp46', '_ourca-le-tlsa.example.org.'),
CNAME('_1465._tcp.smtp46', '_ourca-le-tlsa.example.org.'),
CNAME('_1587._tcp.smtp46', '_ourca-le-tlsa.example.org.'),
CNAME('_465._tcp.smtp', '_ourca-le-tlsa.example.org.'),
CNAME('_587._tcp.smtp', '_ourca-le-tlsa.example.org.'),
CNAME('_1465._tcp.smtp', '_ourca-le-tlsa.example.org.'),
CNAME('_1587._tcp.smtp', '_ourca-le-tlsa.example.org.'),
CNAME('_143._tcp.imap46', '_ourca-le-tlsa.example.org.'),
CNAME('_993._tcp.imap46', '_ourca-le-tlsa.example.org.'),
CNAME('_143._tcp.imap', '_ourca-le-tlsa.example.org.'),
CNAME('_993._tcp.imap', '_ourca-le-tlsa.example.org.'),
CNAME('_4190._tcp.imap', '_ourca-le-tlsa.example.org.'),
CNAME('www.security', 'security.example.org.'),
CNAME('www.security.ipv4', 'security.ipv4.example.org.'),
CNAME('www.security.ipv6', 'security.ipv6.example.org.'),
CNAME('_443._tcp.www.security', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.www.security.ipv4', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.www.security.ipv6', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.security', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.security.ipv4', '_ourca-le-tlsa.example.org.'),
CNAME('_443._tcp.security.ipv6', '_ourca-le-tlsa.example.org.'),
CNAME('_acme-challenge', '_acme-challenge.chat-acme.d.example.net.', TTL(15)),
CNAME('_acme-challenge.xmpp', '_acme-challenge.xmpp.chat-acme.d.example.net.', TTL(15)),
CNAME('_acme-challenge.chat', '_acme-challenge.chat.chat-acme.d.example.net.', TTL(15)),
CNAME('_acme-challenge.conference', '_acme-challenge.conference.chat-acme.d.example.net.', TTL(15)),
CNAME('_acme-challenge.proxy-chatfiles', '_acme-challenge.proxy-chatfiles.chat-acme.d.example.net.', TTL(15)),
CNAME('_acme-challenge.pubsub.xmpp', '_acme-challenge.pubsub.xmpp.chat-acme.d.example.net.', TTL(15)),
AAAA('imap', '2001:db8::48:4558:696d:6170'),
A('imap', '192.0.2.25'),
AAAA('smtp', '2001:db8::48:4558:736d:7470'),
A('smtp', '192.0.2.25'),
A('smtp46', '192.0.2.25'),
AAAA('smtp46', '2001:db8::48:4558:736d:7470'),
A('imap46', '192.0.2.25'),
AAAA('imap46', '2001:db8::48:4558:696d:6170'),
A('mx', '192.0.2.25'),
AAAA('mx', '2001:db8::48:4558:736d:7470'),
A('mx.ipv4', '192.0.2.25'),
AAAA('mx.ipv6', '2001:db8::48:4558:736d:7470'),
TXT('mx', 'v=spf1 a include:_spflarge.example.net -all'),
TXT('_mta-sts', 'v=STSv1; id=20191231r1;'),
TXT('mta-sts', 'v=STSv1; id=20191231r1;'),
A('mta-sts', '192.0.2.93'),
AAAA('mta-sts', '2001:db8::48:4558:5345:5256'),
AAAA('xmpp.ipv6', '2001:db8::f0ab:cdef:1234:f00f'),
AAAA('xmpp-s2s.ipv6', '2001:db8::f0ab:cdef:1234:f00f'),
A('xmpp', '203.0.113.175'),
AAAA('xmpp', '2001:db8::f0ab:cdef:1234:f00f'),
A('xmpp-s2s', '203.0.113.175'),
AAAA('xmpp-s2s', '2001:db8::f0ab:cdef:1234:f00f'),
CNAME('proxy-chatfiles', 'xmpp.example.org.'),
CNAME('fileproxy.xmpp', 'xmpp.example.org.'),
CNAME('conference', 'xmpp-s2s.example.org.'),
SRV('_xmpp-server._tcp.conference', 10, 2, 5269, 'xmpp-s2s.example.org.'),
CNAME('pubsub.xmpp', 'xmpp-s2s.example.org.'),
A('chat', '203.0.113.175'),
AAAA('chat', '2001:db8::f0ab:cdef:1234:f00f'),
CNAME('proxy-chatfiles.chat', 'chat.example.org.'),
CNAME('fileproxy.chat', 'chat.example.org.'),
CNAME('conference.chat', 'chat.example.org.'),
CNAME('pubsub.chat', 'chat.example.org.'),
SRV('_xmpp-server._tcp.conference', 10, 2, 5269, 'chat.example.org.'),
AAAA('auth', '2001:db8::48:4558:6175:7468'),
AAAA('kpeople', '2001:db8::48:4558:6b70:706c'),
AAAA('ocsp.security', '2001:db8::48:4558:6f63:7370'),
AAAA('webauth', '2001:db8::48:4558:7765:6261'),
A('news-feed', '192.0.2.93'),
AAAA('news-feed', '2001:db8::48:4558:6e6e:7470'),
CNAME('go', 'abcdefghijklmn.cloudfront.net.'),
A('foo', '192.0.2.200'),
MX('gladys', 10, 'mx.example.org.'),
TXT('_adsp._domainkey.gladys', 'dkim=all'),
TXT('_dmarc.gladys', 'v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s'),
TXT('_report.gladys', 'r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;'),
TXT('_smtp._tls.gladys', 'v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org'),
TXT('_smtp-tlsrpt.gladys', 'v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org'),
MX('fred', 10, 'mx.example.org.'),
A('fred', '192.0.2.93'),
AAAA('fred', '2001:db8::48:4558:5345:5256'),
TXT('fred', 'v=spf1 ip4:192.0.2.25 ip6:2001:db8::1:25 mx include:_spf.example.com ~all'),
TXT('d201911._domainkey.fred', ['v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8/OMUa3PnWh9LqXFVwlAgYDdTtbq3zTtTOSBmJq5yWauzXYcUuSmhW7CsV0QQlacCsQgJlwg9Nl1vO1TosAj5EKUCLTeSqjlWrM7KXKPx8FT71Q9H9wXX4MHUyGrqHFo0OPzcmtHwqcd8AD6MIvJHSRoAfiPPBp8Euc0wGnJZdGS75Hk+wA3MQ2/Tlz', 'P2eenyiFyqmUTAGOYsGC/tREsWPiegR/OVxNGlzTY6quHsuVK7UYtIyFnYx9PGWdl3b3p7VjQ5V0Rp+2CLtVrCuS6Zs+/3NhZdM7mdD0a9Jgxakwa1le5YmB5lHTGF7T8quy6TlKe9lMUIRNjqTHfSFz/MwIDAQAB']),
TXT('d201911e2._domainkey.fred', 'v=DKIM1; k=ed25519; p=rQNsV9YcPJn/WYI1EDLjNbN/VuX1Hqq/oe4htbnhv+A='),
TXT('d202003._domainkey.fred', ['v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvpnx7tnRxAnE/poIRbVb2i+f1uQCXWnBHzHurgEyZX0CmGaiJuCbr8SWOW2PoXq9YX8gIv2TS3uzwGv/4yA2yX9Z9zar1LeWUfGgMWLdCol9xfmWrI+6MUzxuwhw/mXwzigbI4bHoakh3ez/i3J9KPS85GfrOODqA1emR13f2pG8EzAcje+rwW2PtYj', 'c0h+FMDpeLuPYyYszFbNlrkVUneesxnoz+o4x/s6P14ZoRqz5CR7u6G02HwnNaHads5Eto6FYYErUUTtFmgWuYabHxgLVGRdRQs6B5OBYT/3L2q/lAgmEgdy/QL+c0Psfj99/XQmO8fcM0scBzw2ukQzcUwIDAQAB']),
TXT('d202003e2._domainkey.fred', 'v=DKIM1; k=ed25519; p=0DAPp/IRLYFI/Z4YSgJRi4gr7xcu1/EfJ5mjVn10aAw='),
TXT('_adsp._domainkey.fred', 'dkim=all'),
TXT('_dmarc.fred', 'v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s'),
TXT('_report.fred', 'r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;'),
TXT('_smtp._tls.fred', 'v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org'),
TXT('_smtp-tlsrpt.fred', 'v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org'),
MX('mailtest', 10, 'mx.example.org.'),
TXT('d201911._domainkey.mailtest', ['v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo9xHnjHyhm1weA6FjOqM8LKVsklFt26HXWoe/0XCdmBG4i/UzQ7RiSgWO4kv7anPK6qf6rtL1xYsHufaRXG8yLsZxz+BbUP99eZvxZX78tMg4cGf+yU6uFxulCbOzsMy+8Cc3bbQTtIWYjyWBwnHdRRrCkQxjZ5KAd+x7ZB5qzqg2/eLJ7fCuNsr/xn', '0XTY6XYgug95e3h4CEW3Y+bkG81AMeJmT/hoVTcXvT/Gm6ZOUmx6faQWIHSW7qOR3VS6S75HOuclEUk0gt9r7OQHKl01sXh8g02SHRk8SUMEoNVayqplYZTFFF01Z192m7enmpp+St+HHUIT6jW/CAMCO3wIDAQAB']),
TXT('d201911e2._domainkey.mailtest', 'v=DKIM1; k=ed25519; p=afulDDnhaTzdqKQN0jtWV04eOhAcyBk3NCyVheOf53Y='),
TXT('d202003._domainkey.mailtest', ['v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs2BTVZaVLvL3qZBPaF7tRR0SdOKe+hjcpQ5fqO48lEuYiyTb6lkn8DPjDK11gTN3au0Bm+y8KC7ITKSJosuJXytxt3wqc61Pwtmb/Cy7GzmOF1AuegydB3/88VbgHT5DZucHrh6+ValZk4Trkx+/1K26Uo+h2KL2n/Ldb1y91ATHujp8DqxAOhiZ7KN', 'aS1okNRRB4/14jPufAbeiN8/iBPiY5Hl80KHmpjM+7vvjb5jiecZ1ZrVDj7eTES4pmVh2v1c106mZLieoqDPYaf/HVbCM4E4n1B6kjbboSOpANADIcqXxGJQ7Be7/Sk9f7KwRusrsMHXmBHgm4wPmwGVZ3QIDAQAB']),
TXT('d202003e2._domainkey.mailtest', 'v=DKIM1; k=ed25519; p=iqwH/hhozFdeo1xnuldr8KUi7O7g+DzmC+f0SYMKVDc='),
TXT('_adsp._domainkey.mailtest', 'dkim=all'),
TXT('_dmarc.mailtest', 'v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s'),
TXT('_report.mailtest', 'r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;'),
TXT('_smtp._tls.mailtest', 'v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org'),
TXT('_smtp-tlsrpt.mailtest', 'v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org'),
SRV('_pgpkey-http._tcp.sks', 0, 0, 0, '.'),
SRV('_pgpkey-https._tcp.sks', 0, 0, 0, '.'),
SRV('_hkp._tcp.sks', 0, 0, 0, '.'),
SRV('_pgpkey-http._tcp.sks-peer', 0, 0, 0, '.'),
SRV('_pgpkey-https._tcp.sks-peer', 0, 0, 0, '.'),
SRV('_hkp._tcp.sks-peer', 0, 0, 0, '.'),
NS('yoyo', 'ns5.he.net.'),
NS('yoyo', 'ns4.he.net.'),
NS('yoyo', 'ns3.he.net.'),
NS('yoyo', 'ns2.he.net.'),
NS('yoyo', 'ns1.he.net.'),
NS('khard', 'ns-cloud-d1.googledomains.com.'),
NS('khard', 'ns-cloud-d2.googledomains.com.'),
NS('khard', 'ns-cloud-d3.googledomains.com.'),
NS('khard', 'ns-cloud-d4.googledomains.com.'),
MX('realhost', 0, '.'),
TXT('realhost', 'v=spf1 -all'),
TLSA('_25._tcp.realhost', 3, 0, 0, '0000000000000000000000000000000000000000000000000000000000000000'),
CNAME('_fedcba9876543210fedcba9876543210.go', '_45678901234abcdef45678901234abcd.ggedgsdned.acm-validations.aws.'),
CNAME('opqrstuvwxyz', 'gv-abcdefghijklmn.dv.googlehosted.com.'),
CNAME('zyxwvutsrqpo', 'gv-nmlkjihgfedcba.dv.googlehosted.com.'),
CNAME('0123456789abcdef0123456789abcdef', 'verify.bing.com.')
)

View File

@ -0,0 +1,349 @@
example.org @ 43200 IN SOA ns1.example.org. hostmaster.example.org. 2020030700 7200 3600 864000 7200
example.org @ 7200 IN NS ns1.example.org.
example.org @ 7200 IN NS ns2.example.org.
example.org @ 7200 IN NS ns-a.example.net.
example.org @ 7200 IN NS friend-dns.example.com.
example.org @ 7200 IN MX 10 mx.example.org.
example.org @ 7200 IN TXT "v=spf1 ip4:192.0.2.25 ip6:2001:db8::1:25 mx include:_spf.example.com ~all"
_client._smtp.example.org _client._smtp 7200 IN SRV 1 1 1 example.org.
_client._smtp.mx.example.org _client._smtp.mx 7200 IN SRV 1 2 1 mx.example.org.
_client._smtp.foo.example.org _client._smtp.foo 7200 IN SRV 1 2 1 foo.example.org.
_kerberos._tcp.example.org _kerberos._tcp 7200 IN SRV 10 1 88 kerb-service.example.org.
_kerberos._udp.example.org _kerberos._udp 7200 IN SRV 10 1 88 kerb-service.example.org.
_kpasswd._udp.example.org _kpasswd._udp 7200 IN SRV 10 1 464 kerb-service.example.org.
_kerberos-adm._tcp.example.org _kerberos-adm._tcp 7200 IN SRV 10 1 749 kerb-service.example.org.
_kerberos.example.org _kerberos 7200 IN TXT "EXAMPLE.ORG"
_ldap._tcp.example.org _ldap._tcp 7200 IN SRV 0 0 0 .
_ldap._udp.example.org _ldap._udp 7200 IN SRV 0 0 0 .
_jabber._tcp.example.org _jabber._tcp 7200 IN SRV 10 2 5269 xmpp-s2s.example.org.
_xmpp-server._tcp.example.org _xmpp-server._tcp 7200 IN SRV 10 2 5269 xmpp-s2s.example.org.
_xmpp-client._tcp.example.org _xmpp-client._tcp 7200 IN SRV 10 2 5222 xmpp.example.org.
_im._sip.example.org _im._sip 7200 IN SRV 0 0 0 .
_pres._sip.example.org _pres._sip 7200 IN SRV 0 0 0 .
_sip+d2t._tcp.example.org _sip+d2t._tcp 7200 IN SRV 0 0 0 .
_sips+d2t._tcp.example.org _sips+d2t._tcp 7200 IN SRV 0 0 0 .
_sip+d2u._udp.example.org _sip+d2u._udp 7200 IN SRV 0 0 0 .
_sip+d2s._sctp.example.org _sip+d2s._sctp 7200 IN SRV 0 0 0 .
_sips+d2s._sctp.example.org _sips+d2s._sctp 7200 IN SRV 0 0 0 .
_submission._tcp.example.org _submission._tcp 7200 IN SRV 10 10 587 smtp.example.org.
_submissions._tcp.example.org _submissions._tcp 7200 IN SRV 10 10 465 smtp.example.org.
_imap._tcp.example.org _imap._tcp 7200 IN SRV 10 10 143 imap.example.org.
_imaps._tcp.example.org _imaps._tcp 7200 IN SRV 10 10 993 imap.example.org.
_pop3._tcp.example.org _pop3._tcp 7200 IN SRV 0 0 0 .
_pop3s._tcp.example.org _pop3s._tcp 7200 IN SRV 0 0 0 .
_sieve._tcp.example.org _sieve._tcp 7200 IN SRV 10 10 4190 imap.example.org.
dns-moreinfo.example.org dns-moreinfo 7200 IN TXT "Fred Bloggs, TZ=America/New_York" "Chat-Service-X: @handle1" "Chat-Service-Y: federated-handle@example.org"
_pgpkey-http._tcp.example.org _pgpkey-http._tcp 7200 IN SRV 0 0 0 .
_pgpkey-https._tcp.example.org _pgpkey-https._tcp 7200 IN SRV 0 0 0 .
_hkp._tcp.example.org _hkp._tcp 7200 IN SRV 0 0 0 .
_openpgpkey._tcp.example.org _openpgpkey._tcp 7200 IN SRV 10 10 443 openpgpkey.example.org.
_finger._tcp.example.org _finger._tcp 7200 IN SRV 10 10 79 barbican.example.org.
_avatars-sec._tcp.example.org _avatars-sec._tcp 7200 IN SRV 10 10 443 avatars.example.org.
example.org @ 7200 IN A 192.0.2.1
example.org @ 7200 IN AAAA 2001:db8::1:1
_adsp._domainkey.example.org _adsp._domainkey 7200 IN TXT "dkim=all"
_dmarc.example.org _dmarc 7200 IN TXT "v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s"
d201911._domainkey.example.org d201911._domainkey 7200 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4SmyE5Tz5/wPL8cb2AKuHnlFeLMOhAl1UX/NYaeDCKMWoBPTgZRT0jonKLmV2UscHdodXu5ZsLr/NAuLCp7HmPLReLz7kxKncP6ppveKxc1aq5SPTKeWe77p6BptlahHc35eiXsZRpTsEzrbEOainy1IWEd+w9p1gWbrSutwE22z0i4V88nQ9UBa1ks" "6cVGxXBZFovWC+i28aGs6Lc7cSfHG5+Mrg3ud5X4evYXTGFMPpunMcCsXrqmS5a+5gRSEMZhngha/cHjLwaJnWzKaywNWF5XOsCjL94QkS0joB7lnGOHMNSZBCcu542Y3Ht3SgHhlpkF9mIbIRfpzA9IoSQIDAQAB"
d201911e2._domainkey.example.org d201911e2._domainkey 7200 IN TXT "v=DKIM1; k=ed25519; p=GBt2k2L39KUb39fg5brOppXDHXvISy0+ECGgPld/bIo="
d202003._domainkey.example.org d202003._domainkey 7200 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv/1tQvOEs7xtKNm7PbPgY4hQjwHVvqqkDb0+TeqZHYRSczQ3c0LFJrIDFiPIdwQe/7AuKrxvATSh/uXKZ3EP4ouMgROPZnUxVXENeetJj+pc3nfGwTKUBTTTth+SO74gdIWsntjvAfduzosC4ZkxbDwZ9c253qXARGvGu+LB/iAeq0ngEbm5fU13+Jo" "pv0d4dR6oGe9GvMEnGGLZzNrxWl1BPe2x5JZ5/X/3fW8vJx3OgRB5N6fqbAJ6HZ9kcbikDH4lPPl9RIoprFk7mmwno/nXLQYGhPobmqq8wLkDiXEkWtYa5lzujz3XI3Zkk8ZIOGvdbVVfAttT0IVPnYkOhQIDAQAB"
d202003e2._domainkey.example.org d202003e2._domainkey 7200 IN TXT "v=DKIM1; k=ed25519; p=DQI5d9sNMrr0SLDoAi071IFOyKnlbR29hAQdqVQecQg="
_report.example.org _report 7200 IN TXT "r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;"
_smtp._tls.example.org _smtp._tls 7200 IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
_smtp-tlsrpt.example.org _smtp-tlsrpt 7200 IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
example.net._report._dmarc.example.org example.net._report._dmarc 7200 IN TXT "v=DMARC1"
example.com._report._dmarc.example.org example.com._report._dmarc 7200 IN TXT "v=DMARC1"
xn--2j5b.xn--9t4b11yi5a._report._dmarc.example.org xn--2j5b.xn--9t4b11yi5a._report._dmarc 7200 IN TXT "v=DMARC1"
special.test._report._dmarc.example.org special.test._report._dmarc 7200 IN TXT "v=DMARC1"
xn--qck5b9a5eml3bze.xn--zckzah._report._dmarc.example.org xn--qck5b9a5eml3bze.xn--zckzah._report._dmarc 7200 IN TXT "v=DMARC1"
*._smimecert.example.org *._smimecert 7200 IN CNAME _ourca-smimea.example.org.
b._dns-sd._udp.example.org b._dns-sd._udp 7200 IN PTR field.example.org.
lb._dns-sd._udp.example.org lb._dns-sd._udp 7200 IN PTR field.example.org.
r._dns-sd._udp.example.org r._dns-sd._udp 7200 IN PTR field.example.org.
field.example.org field 7200 IN NS ns1.example.org.
field.example.org field 7200 IN NS ns2.example.org.
barbican.example.org barbican 7200 IN A 192.0.2.1
barbican.example.org barbican 7200 IN AAAA 2001:db8::1:1
barbican.ipv4.example.org barbican.ipv4 7200 IN A 192.0.2.1
barbican.ipv6.example.org barbican.ipv6 7200 IN AAAA 2001:db8::1:1
megalomaniac.example.org megalomaniac 7200 IN A 198.51.100.254
megalomaniac.example.org megalomaniac 7200 IN AAAA 2001:db8:ffef::254
megalomaniac.ipv4.example.org megalomaniac.ipv4 7200 IN A 198.51.100.254
megalomaniac.ipv6.example.org megalomaniac.ipv6 7200 IN AAAA 2001:db8:ffef::254
megalomaniac.example.org megalomaniac 7200 IN SSHFP 1 2 4E9CED94D3CAF2CE915F85A63CE7279D5118A79EA03DAC59CF4859B825D2F619
megalomaniac.example.org megalomaniac 7200 IN SSHFP 3 2 D3556A3DB83AB9CCEC39DC6693DD2F3E28B178C9BBA61880924821C426CC61EB
megalomaniac.example.org megalomaniac 7200 IN SSHFP 4 2 C60C9D9D4728668F5F46986FF0C5B416C5E913862C4970CBFE211A6F44A111B4
megalomaniac.ipv4.example.org megalomaniac.ipv4 7200 IN SSHFP 1 2 4E9CED94D3CAF2CE915F85A63CE7279D5118A79EA03DAC59CF4859B825D2F619
megalomaniac.ipv4.example.org megalomaniac.ipv4 7200 IN SSHFP 3 2 D3556A3DB83AB9CCEC39DC6693DD2F3E28B178C9BBA61880924821C426CC61EB
megalomaniac.ipv4.example.org megalomaniac.ipv4 7200 IN SSHFP 4 2 C60C9D9D4728668F5F46986FF0C5B416C5E913862C4970CBFE211A6F44A111B4
megalomaniac.ipv6.example.org megalomaniac.ipv6 7200 IN SSHFP 1 2 4E9CED94D3CAF2CE915F85A63CE7279D5118A79EA03DAC59CF4859B825D2F619
megalomaniac.ipv6.example.org megalomaniac.ipv6 7200 IN SSHFP 3 2 D3556A3DB83AB9CCEC39DC6693DD2F3E28B178C9BBA61880924821C426CC61EB
megalomaniac.ipv6.example.org megalomaniac.ipv6 7200 IN SSHFP 4 2 C60C9D9D4728668F5F46986FF0C5B416C5E913862C4970CBFE211A6F44A111B4
tower.example.org tower 7200 IN A 192.0.2.42
tower.example.org tower 7200 IN AAAA 2001:db8::1:42
tower.ipv4.example.org tower.ipv4 7200 IN A 192.0.2.42
tower.ipv6.example.org tower.ipv6 7200 IN AAAA 2001:db8::1:42
tower.example.org tower 7200 IN SSHFP 1 2 0F211D236E94768911A294F38653C4AF6FA935A5B06C975D8162F59142571451
tower.example.org tower 7200 IN SSHFP 3 2 88BF7B7401C11FA2E84871EFB06CD73D8FC409154605B354DB2DDA0B82FE1160
tower.example.org tower 7200 IN SSHFP 4 2 6D30900BE0FAAAE73568FC007A87B4D076CF9A351ECACC1106AEF726C34AD61D
tower.ipv4.example.org tower.ipv4 7200 IN SSHFP 1 2 0F211D236E94768911A294F38653C4AF6FA935A5B06C975D8162F59142571451
tower.ipv4.example.org tower.ipv4 7200 IN SSHFP 3 2 88BF7B7401C11FA2E84871EFB06CD73D8FC409154605B354DB2DDA0B82FE1160
tower.ipv4.example.org tower.ipv4 7200 IN SSHFP 4 2 6D30900BE0FAAAE73568FC007A87B4D076CF9A351ECACC1106AEF726C34AD61D
tower.ipv6.example.org tower.ipv6 7200 IN SSHFP 1 2 0F211D236E94768911A294F38653C4AF6FA935A5B06C975D8162F59142571451
tower.ipv6.example.org tower.ipv6 7200 IN SSHFP 3 2 88BF7B7401C11FA2E84871EFB06CD73D8FC409154605B354DB2DDA0B82FE1160
tower.ipv6.example.org tower.ipv6 7200 IN SSHFP 4 2 6D30900BE0FAAAE73568FC007A87B4D076CF9A351ECACC1106AEF726C34AD61D
vcs.example.org vcs 7200 IN A 192.0.2.228
vcs.example.org vcs 7200 IN AAAA 2001:db8::48:4558:4456:4353
vcs.ipv4.example.org vcs.ipv4 7200 IN A 192.0.2.228
vcs.ipv6.example.org vcs.ipv6 7200 IN AAAA 2001:db8::48:4558:4456:4353
git.example.org git 7200 IN CNAME vcs.example.org.
git.ipv4.example.org git.ipv4 7200 IN CNAME vcs.ipv4.example.org.
git.ipv6.example.org git.ipv6 7200 IN CNAME vcs.ipv6.example.org.
svn.example.org svn 7200 IN AAAA 2001:db8::48:4558:73:766e
vcs.example.org vcs 7200 IN SSHFP 1 2 B518BE390BABDF43CB2D598AA6BEFA6CE6878546BF107B829D0CFC65253A97D4
vcs.example.org vcs 7200 IN SSHFP 3 2 E92545DC0BF501F72333DDEB7A37AFC2C5B408CE39A3AD95FBC66236F0077323
vcs.example.org vcs 7200 IN SSHFP 4 2 02289441124A487095A6CDA2E946C6A8ED9087FAF3592EC4135536C3E615521C
vcs.ipv4.example.org vcs.ipv4 7200 IN SSHFP 1 2 B518BE390BABDF43CB2D598AA6BEFA6CE6878546BF107B829D0CFC65253A97D4
vcs.ipv4.example.org vcs.ipv4 7200 IN SSHFP 3 2 E92545DC0BF501F72333DDEB7A37AFC2C5B408CE39A3AD95FBC66236F0077323
vcs.ipv4.example.org vcs.ipv4 7200 IN SSHFP 4 2 02289441124A487095A6CDA2E946C6A8ED9087FAF3592EC4135536C3E615521C
vcs.ipv6.example.org vcs.ipv6 7200 IN SSHFP 1 2 B518BE390BABDF43CB2D598AA6BEFA6CE6878546BF107B829D0CFC65253A97D4
vcs.ipv6.example.org vcs.ipv6 7200 IN SSHFP 3 2 E92545DC0BF501F72333DDEB7A37AFC2C5B408CE39A3AD95FBC66236F0077323
vcs.ipv6.example.org vcs.ipv6 7200 IN SSHFP 4 2 02289441124A487095A6CDA2E946C6A8ED9087FAF3592EC4135536C3E615521C
nsauth.example.org nsauth 7200 IN A 192.0.2.53
nsauth.example.org nsauth 7200 IN AAAA 2001:db8::53:1
nsauth.ipv4.example.org nsauth.ipv4 7200 IN A 192.0.2.53
nsauth.ipv6.example.org nsauth.ipv6 7200 IN AAAA 2001:db8::53:1
nsauth.example.org nsauth 7200 IN SSHFP 1 2 895804AE022FFF643B2677563CB850607C5BB564D9919896C521098C8ABC40F2
nsauth.example.org nsauth 7200 IN SSHFP 3 2 28A65470BADAE611375747E1A803211C41E3D71E97741FA92CCBDF7B01F34E42
nsauth.example.org nsauth 7200 IN SSHFP 4 2 6E10445C0649C03FA83E18B1873E5B89B3A20893ECB48D01E7CEDB3DD563ECF0
nsauth.ipv4.example.org nsauth.ipv4 7200 IN SSHFP 1 2 895804AE022FFF643B2677563CB850607C5BB564D9919896C521098C8ABC40F2
nsauth.ipv4.example.org nsauth.ipv4 7200 IN SSHFP 3 2 28A65470BADAE611375747E1A803211C41E3D71E97741FA92CCBDF7B01F34E42
nsauth.ipv4.example.org nsauth.ipv4 7200 IN SSHFP 4 2 6E10445C0649C03FA83E18B1873E5B89B3A20893ECB48D01E7CEDB3DD563ECF0
nsauth.ipv6.example.org nsauth.ipv6 7200 IN SSHFP 1 2 895804AE022FFF643B2677563CB850607C5BB564D9919896C521098C8ABC40F2
nsauth.ipv6.example.org nsauth.ipv6 7200 IN SSHFP 3 2 28A65470BADAE611375747E1A803211C41E3D71E97741FA92CCBDF7B01F34E42
nsauth.ipv6.example.org nsauth.ipv6 7200 IN SSHFP 4 2 6E10445C0649C03FA83E18B1873E5B89B3A20893ECB48D01E7CEDB3DD563ECF0
ns1.example.org ns1 7200 IN A 192.0.2.53
ns1.example.org ns1 7200 IN AAAA 2001:db8::53:1
ns2.example.org ns2 7200 IN A 203.0.113.53
ns2.example.org ns2 7200 IN AAAA 2001:db8:113::53
hermes.example.org hermes 7200 IN A 192.0.2.25
hermes.example.org hermes 7200 IN AAAA 2001:db8::48:4558:736d:7470
hermes.example.org hermes 7200 IN AAAA 2001:db8::48:4558:696d:6170
hermes.ipv4.example.org hermes.ipv4 7200 IN A 192.0.2.25
hermes.ipv6.example.org hermes.ipv6 7200 IN AAAA 2001:db8::48:4558:736d:7470
hermes.ipv6.example.org hermes.ipv6 7200 IN AAAA 2001:db8::48:4558:696d:6170
hermes.example.org hermes 7200 IN SSHFP 1 2 4472FF5BD0528CD49216AF4503BA6A1C48F121D0292A31D6AF193E5000AF4966
hermes.example.org hermes 7200 IN SSHFP 3 2 EABA20C1565676A5229184CCFCF82D0EE408F91757A67D9FA51A0B6F3DB4A33B
hermes.example.org hermes 7200 IN SSHFP 4 2 A9D89920E599D04363C8B35A4CE66C1ED257EA1D16981F060B6AED080BBB7A7C
hermes.ipv4.example.org hermes.ipv4 7200 IN SSHFP 1 2 4472FF5BD0528CD49216AF4503BA6A1C48F121D0292A31D6AF193E5000AF4966
hermes.ipv4.example.org hermes.ipv4 7200 IN SSHFP 3 2 EABA20C1565676A5229184CCFCF82D0EE408F91757A67D9FA51A0B6F3DB4A33B
hermes.ipv4.example.org hermes.ipv4 7200 IN SSHFP 4 2 A9D89920E599D04363C8B35A4CE66C1ED257EA1D16981F060B6AED080BBB7A7C
hermes.ipv6.example.org hermes.ipv6 7200 IN SSHFP 1 2 4472FF5BD0528CD49216AF4503BA6A1C48F121D0292A31D6AF193E5000AF4966
hermes.ipv6.example.org hermes.ipv6 7200 IN SSHFP 3 2 EABA20C1565676A5229184CCFCF82D0EE408F91757A67D9FA51A0B6F3DB4A33B
hermes.ipv6.example.org hermes.ipv6 7200 IN SSHFP 4 2 A9D89920E599D04363C8B35A4CE66C1ED257EA1D16981F060B6AED080BBB7A7C
kerb-service.example.org kerb-service 7200 IN A 192.0.2.88
kerb-service.example.org kerb-service 7200 IN AAAA 2001:db8::48:4558:6b65:7262
security.example.org security 7200 IN A 192.0.2.92
security.example.org security 7200 IN AAAA 2001:db8::48:4558:53:4543
security.ipv4.example.org security.ipv4 7200 IN A 192.0.2.92
security.ipv6.example.org security.ipv6 7200 IN AAAA 2001:db8::48:4558:53:4543
services.example.org services 7200 IN A 192.0.2.93
services.example.org services 7200 IN AAAA 2001:db8::48:4558:5345:5256
services.ipv4.example.org services.ipv4 7200 IN A 192.0.2.93
services.ipv6.example.org services.ipv6 7200 IN AAAA 2001:db8::48:4558:5345:5256
openpgpkey.example.org openpgpkey 7200 IN A 192.0.2.92
openpgpkey.example.org openpgpkey 7200 IN AAAA 2001:db8::48:4558:53:4543
finger.example.org finger 7200 IN CNAME barbican.example.org.
finger.ipv4.example.org finger.ipv4 7200 IN CNAME barbican.ipv4.example.org.
finger.ipv6.example.org finger.ipv6 7200 IN CNAME barbican.ipv6.example.org.
avatars.example.org avatars 7200 IN A 192.0.2.93
avatars.example.org avatars 7200 IN AAAA 2001:db8::48:4558:5345:5256
dict.example.org dict 7200 IN CNAME services.example.org.
people.example.org people 7200 IN CNAME services.example.org.
people.ipv4.example.org people.ipv4 7200 IN CNAME services.ipv4.example.org.
people.ipv6.example.org people.ipv6 7200 IN CNAME services.ipv6.example.org.
wpad.example.org wpad 7200 IN CNAME services.example.org.
www.example.org www 7200 IN CNAME services.example.org.
www.ipv4.example.org www.ipv4 7200 IN CNAME services.ipv4.example.org.
www.ipv6.example.org www.ipv6 7200 IN CNAME services.ipv6.example.org.
example.org @ 7200 IN CAA 0 issue "example.net"
example.org @ 7200 IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-v01.api.letsencrypt.org/acme/reg/1234567"
example.org @ 7200 IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-staging-v02.api.letsencrypt.org/acme/acct/23456789"
example.org @ 7200 IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/76543210"
example.org @ 7200 IN CAA 0 issuewild ";"
example.org @ 7200 IN CAA 0 iodef "mailto:security@example.org"
_ourcaca4-tlsa.example.org _ourcaca4-tlsa 7200 IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
_ourcaca5-tlsa.example.org _ourcaca5-tlsa 7200 IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
_cacert-c3-tlsa.example.org _cacert-c3-tlsa 7200 IN TLSA 2 0 1 4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8
_letsencrypt-tlsa.example.org _letsencrypt-tlsa 7200 IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
_letsencrypt-tlsa.example.org _letsencrypt-tlsa 7200 IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_amazon-tlsa.example.org _amazon-tlsa 7200 IN TLSA 2 0 1 8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e
_amazon-tlsa.example.org _amazon-tlsa 7200 IN TLSA 2 0 1 1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4
_amazon-tlsa.example.org _amazon-tlsa 7200 IN TLSA 2 0 1 18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4
_amazon-tlsa.example.org _amazon-tlsa 7200 IN TLSA 2 0 1 e35d28419ed02025cfa69038cd623962458da5c695fbdea3c22b0bfb25897092
_ourca-tlsa.example.org _ourca-tlsa 7200 IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
_ourca-tlsa.example.org _ourca-tlsa 7200 IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
_ourca-cacert-tlsa.example.org _ourca-cacert-tlsa 7200 IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
_ourca-cacert-tlsa.example.org _ourca-cacert-tlsa 7200 IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
_ourca-cacert-tlsa.example.org _ourca-cacert-tlsa 7200 IN TLSA 2 0 1 4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8
_ourca-le-tlsa.example.org _ourca-le-tlsa 7200 IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
_ourca-le-tlsa.example.org _ourca-le-tlsa 7200 IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
_ourca-le-tlsa.example.org _ourca-le-tlsa 7200 IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
_ourca-le-tlsa.example.org _ourca-le-tlsa 7200 IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_ourca-cacert-le-tlsa.example.org _ourca-cacert-le-tlsa 7200 IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
_ourca-cacert-le-tlsa.example.org _ourca-cacert-le-tlsa 7200 IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
_ourca-cacert-le-tlsa.example.org _ourca-cacert-le-tlsa 7200 IN TLSA 2 0 1 4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8
_ourca-cacert-le-tlsa.example.org _ourca-cacert-le-tlsa 7200 IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
_ourca-cacert-le-tlsa.example.org _ourca-cacert-le-tlsa 7200 IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_cacert-le-tlsa.example.org _cacert-le-tlsa 7200 IN TLSA 2 0 1 4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8
_cacert-le-tlsa.example.org _cacert-le-tlsa 7200 IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
_cacert-le-tlsa.example.org _cacert-le-tlsa 7200 IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_le-amazon-tlsa.example.org _le-amazon-tlsa 7200 IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
_le-amazon-tlsa.example.org _le-amazon-tlsa 7200 IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_le-amazon-tlsa.example.org _le-amazon-tlsa 7200 IN TLSA 2 0 1 8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e
_le-amazon-tlsa.example.org _le-amazon-tlsa 7200 IN TLSA 2 0 1 1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4
_le-amazon-tlsa.example.org _le-amazon-tlsa 7200 IN TLSA 2 0 1 18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4
_le-amazon-tlsa.example.org _le-amazon-tlsa 7200 IN TLSA 2 0 1 e35d28419ed02025cfa69038cd623962458da5c695fbdea3c22b0bfb25897092
_ourca-le-amazon-tlsa.example.org _ourca-le-amazon-tlsa 7200 IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
_ourca-le-amazon-tlsa.example.org _ourca-le-amazon-tlsa 7200 IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
_ourca-le-amazon-tlsa.example.org _ourca-le-amazon-tlsa 7200 IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
_ourca-le-amazon-tlsa.example.org _ourca-le-amazon-tlsa 7200 IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_ourca-le-amazon-tlsa.example.org _ourca-le-amazon-tlsa 7200 IN TLSA 2 0 1 8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e
_ourca-le-amazon-tlsa.example.org _ourca-le-amazon-tlsa 7200 IN TLSA 2 0 1 1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4
_ourca-le-amazon-tlsa.example.org _ourca-le-amazon-tlsa 7200 IN TLSA 2 0 1 18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4
_ourca-le-amazon-tlsa.example.org _ourca-le-amazon-tlsa 7200 IN TLSA 2 0 1 e35d28419ed02025cfa69038cd623962458da5c695fbdea3c22b0bfb25897092
_443._tcp.www.example.org _443._tcp.www 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.www.ipv4.example.org _443._tcp.www.ipv4 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.www.ipv6.example.org _443._tcp.www.ipv6 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.people.example.org _443._tcp.people 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.people.ipv4.example.org _443._tcp.people.ipv4 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.people.ipv6.example.org _443._tcp.people.ipv6 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.git.example.org _443._tcp.git 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.svn.example.org _443._tcp.svn 7200 IN CNAME _ourca-le-tlsa.example.org.
_5222._tcp.xmpp.example.org _5222._tcp.xmpp 7200 IN CNAME _ourca-le-tlsa.example.org.
_5223._tcp.xmpp.example.org _5223._tcp.xmpp 7200 IN CNAME _ourca-le-tlsa.example.org.
_5269._tcp.xmpp-s2s.example.org _5269._tcp.xmpp-s2s 7200 IN CNAME _ourca-le-tlsa.example.org.
_25._tcp.mx.example.org _25._tcp.mx 7200 IN CNAME _ourca-le-tlsa.example.org.
_26._tcp.mx.example.org _26._tcp.mx 7200 IN CNAME _ourca-le-tlsa.example.org.
_27._tcp.mx.example.org _27._tcp.mx 7200 IN CNAME _ourca-le-tlsa.example.org.
_465._tcp.smtp46.example.org _465._tcp.smtp46 7200 IN CNAME _ourca-le-tlsa.example.org.
_587._tcp.smtp46.example.org _587._tcp.smtp46 7200 IN CNAME _ourca-le-tlsa.example.org.
_1465._tcp.smtp46.example.org _1465._tcp.smtp46 7200 IN CNAME _ourca-le-tlsa.example.org.
_1587._tcp.smtp46.example.org _1587._tcp.smtp46 7200 IN CNAME _ourca-le-tlsa.example.org.
_465._tcp.smtp.example.org _465._tcp.smtp 7200 IN CNAME _ourca-le-tlsa.example.org.
_587._tcp.smtp.example.org _587._tcp.smtp 7200 IN CNAME _ourca-le-tlsa.example.org.
_1465._tcp.smtp.example.org _1465._tcp.smtp 7200 IN CNAME _ourca-le-tlsa.example.org.
_1587._tcp.smtp.example.org _1587._tcp.smtp 7200 IN CNAME _ourca-le-tlsa.example.org.
_143._tcp.imap46.example.org _143._tcp.imap46 7200 IN CNAME _ourca-le-tlsa.example.org.
_993._tcp.imap46.example.org _993._tcp.imap46 7200 IN CNAME _ourca-le-tlsa.example.org.
_143._tcp.imap.example.org _143._tcp.imap 7200 IN CNAME _ourca-le-tlsa.example.org.
_993._tcp.imap.example.org _993._tcp.imap 7200 IN CNAME _ourca-le-tlsa.example.org.
_4190._tcp.imap.example.org _4190._tcp.imap 7200 IN CNAME _ourca-le-tlsa.example.org.
www.security.example.org www.security 7200 IN CNAME security.example.org.
www.security.ipv4.example.org www.security.ipv4 7200 IN CNAME security.ipv4.example.org.
www.security.ipv6.example.org www.security.ipv6 7200 IN CNAME security.ipv6.example.org.
_443._tcp.www.security.example.org _443._tcp.www.security 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.www.security.ipv4.example.org _443._tcp.www.security.ipv4 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.www.security.ipv6.example.org _443._tcp.www.security.ipv6 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.security.example.org _443._tcp.security 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.security.ipv4.example.org _443._tcp.security.ipv4 7200 IN CNAME _ourca-le-tlsa.example.org.
_443._tcp.security.ipv6.example.org _443._tcp.security.ipv6 7200 IN CNAME _ourca-le-tlsa.example.org.
_acme-challenge.example.org _acme-challenge 15 IN CNAME _acme-challenge.chat-acme.d.example.net.
_acme-challenge.xmpp.example.org _acme-challenge.xmpp 15 IN CNAME _acme-challenge.xmpp.chat-acme.d.example.net.
_acme-challenge.chat.example.org _acme-challenge.chat 15 IN CNAME _acme-challenge.chat.chat-acme.d.example.net.
_acme-challenge.conference.example.org _acme-challenge.conference 15 IN CNAME _acme-challenge.conference.chat-acme.d.example.net.
_acme-challenge.proxy-chatfiles.example.org _acme-challenge.proxy-chatfiles 15 IN CNAME _acme-challenge.proxy-chatfiles.chat-acme.d.example.net.
_acme-challenge.pubsub.xmpp.example.org _acme-challenge.pubsub.xmpp 15 IN CNAME _acme-challenge.pubsub.xmpp.chat-acme.d.example.net.
imap.example.org imap 7200 IN AAAA 2001:db8::48:4558:696d:6170
imap.example.org imap 7200 IN A 192.0.2.25
smtp.example.org smtp 7200 IN AAAA 2001:db8::48:4558:736d:7470
smtp.example.org smtp 7200 IN A 192.0.2.25
smtp46.example.org smtp46 7200 IN A 192.0.2.25
smtp46.example.org smtp46 7200 IN AAAA 2001:db8::48:4558:736d:7470
imap46.example.org imap46 7200 IN A 192.0.2.25
imap46.example.org imap46 7200 IN AAAA 2001:db8::48:4558:696d:6170
mx.example.org mx 7200 IN A 192.0.2.25
mx.example.org mx 7200 IN AAAA 2001:db8::48:4558:736d:7470
mx.ipv4.example.org mx.ipv4 7200 IN A 192.0.2.25
mx.ipv6.example.org mx.ipv6 7200 IN AAAA 2001:db8::48:4558:736d:7470
mx.example.org mx 7200 IN TXT "v=spf1 a include:_spflarge.example.net -all"
_mta-sts.example.org _mta-sts 7200 IN TXT "v=STSv1; id=20191231r1;"
mta-sts.example.org mta-sts 7200 IN TXT "v=STSv1; id=20191231r1;"
mta-sts.example.org mta-sts 7200 IN A 192.0.2.93
mta-sts.example.org mta-sts 7200 IN AAAA 2001:db8::48:4558:5345:5256
xmpp.ipv6.example.org xmpp.ipv6 7200 IN AAAA 2001:db8::f0ab:cdef:1234:f00f
xmpp-s2s.ipv6.example.org xmpp-s2s.ipv6 7200 IN AAAA 2001:db8::f0ab:cdef:1234:f00f
xmpp.example.org xmpp 7200 IN A 203.0.113.175
xmpp.example.org xmpp 7200 IN AAAA 2001:db8::f0ab:cdef:1234:f00f
xmpp-s2s.example.org xmpp-s2s 7200 IN A 203.0.113.175
xmpp-s2s.example.org xmpp-s2s 7200 IN AAAA 2001:db8::f0ab:cdef:1234:f00f
proxy-chatfiles.example.org proxy-chatfiles 7200 IN CNAME xmpp.example.org.
fileproxy.xmpp.example.org fileproxy.xmpp 7200 IN CNAME xmpp.example.org.
conference.example.org conference 7200 IN CNAME xmpp-s2s.example.org.
_xmpp-server._tcp.conference.example.org _xmpp-server._tcp.conference 7200 IN SRV 10 2 5269 xmpp-s2s.example.org.
pubsub.xmpp.example.org pubsub.xmpp 7200 IN CNAME xmpp-s2s.example.org.
chat.example.org chat 7200 IN A 203.0.113.175
chat.example.org chat 7200 IN AAAA 2001:db8::f0ab:cdef:1234:f00f
proxy-chatfiles.chat.example.org proxy-chatfiles.chat 7200 IN CNAME chat.example.org.
fileproxy.chat.example.org fileproxy.chat 7200 IN CNAME chat.example.org.
conference.chat.example.org conference.chat 7200 IN CNAME chat.example.org.
pubsub.chat.example.org pubsub.chat 7200 IN CNAME chat.example.org.
_xmpp-server._tcp.conference.example.org _xmpp-server._tcp.conference 7200 IN SRV 10 2 5269 chat.example.org.
auth.example.org auth 7200 IN AAAA 2001:db8::48:4558:6175:7468
kpeople.example.org kpeople 7200 IN AAAA 2001:db8::48:4558:6b70:706c
ocsp.security.example.org ocsp.security 7200 IN AAAA 2001:db8::48:4558:6f63:7370
webauth.example.org webauth 7200 IN AAAA 2001:db8::48:4558:7765:6261
news-feed.example.org news-feed 7200 IN A 192.0.2.93
news-feed.example.org news-feed 7200 IN AAAA 2001:db8::48:4558:6e6e:7470
go.example.org go 7200 IN CNAME abcdefghijklmn.cloudfront.net.
foo.example.org foo 7200 IN A 192.0.2.200
gladys.example.org gladys 7200 IN MX 10 mx.example.org.
_adsp._domainkey.gladys.example.org _adsp._domainkey.gladys 7200 IN TXT "dkim=all"
_dmarc.gladys.example.org _dmarc.gladys 7200 IN TXT "v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s"
_report.gladys.example.org _report.gladys 7200 IN TXT "r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;"
_smtp._tls.gladys.example.org _smtp._tls.gladys 7200 IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
_smtp-tlsrpt.gladys.example.org _smtp-tlsrpt.gladys 7200 IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
fred.example.org fred 7200 IN MX 10 mx.example.org.
fred.example.org fred 7200 IN A 192.0.2.93
fred.example.org fred 7200 IN AAAA 2001:db8::48:4558:5345:5256
fred.example.org fred 7200 IN TXT "v=spf1 ip4:192.0.2.25 ip6:2001:db8::1:25 mx include:_spf.example.com ~all"
d201911._domainkey.fred.example.org d201911._domainkey.fred 7200 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8/OMUa3PnWh9LqXFVwlAgYDdTtbq3zTtTOSBmJq5yWauzXYcUuSmhW7CsV0QQlacCsQgJlwg9Nl1vO1TosAj5EKUCLTeSqjlWrM7KXKPx8FT71Q9H9wXX4MHUyGrqHFo0OPzcmtHwqcd8AD6MIvJHSRoAfiPPBp8Euc0wGnJZdGS75Hk+wA3MQ2/Tlz" "P2eenyiFyqmUTAGOYsGC/tREsWPiegR/OVxNGlzTY6quHsuVK7UYtIyFnYx9PGWdl3b3p7VjQ5V0Rp+2CLtVrCuS6Zs+/3NhZdM7mdD0a9Jgxakwa1le5YmB5lHTGF7T8quy6TlKe9lMUIRNjqTHfSFz/MwIDAQAB"
d201911e2._domainkey.fred.example.org d201911e2._domainkey.fred 7200 IN TXT "v=DKIM1; k=ed25519; p=rQNsV9YcPJn/WYI1EDLjNbN/VuX1Hqq/oe4htbnhv+A="
d202003._domainkey.fred.example.org d202003._domainkey.fred 7200 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvpnx7tnRxAnE/poIRbVb2i+f1uQCXWnBHzHurgEyZX0CmGaiJuCbr8SWOW2PoXq9YX8gIv2TS3uzwGv/4yA2yX9Z9zar1LeWUfGgMWLdCol9xfmWrI+6MUzxuwhw/mXwzigbI4bHoakh3ez/i3J9KPS85GfrOODqA1emR13f2pG8EzAcje+rwW2PtYj" "c0h+FMDpeLuPYyYszFbNlrkVUneesxnoz+o4x/s6P14ZoRqz5CR7u6G02HwnNaHads5Eto6FYYErUUTtFmgWuYabHxgLVGRdRQs6B5OBYT/3L2q/lAgmEgdy/QL+c0Psfj99/XQmO8fcM0scBzw2ukQzcUwIDAQAB"
d202003e2._domainkey.fred.example.org d202003e2._domainkey.fred 7200 IN TXT "v=DKIM1; k=ed25519; p=0DAPp/IRLYFI/Z4YSgJRi4gr7xcu1/EfJ5mjVn10aAw="
_adsp._domainkey.fred.example.org _adsp._domainkey.fred 7200 IN TXT "dkim=all"
_dmarc.fred.example.org _dmarc.fred 7200 IN TXT "v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s"
_report.fred.example.org _report.fred 7200 IN TXT "r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;"
_smtp._tls.fred.example.org _smtp._tls.fred 7200 IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
_smtp-tlsrpt.fred.example.org _smtp-tlsrpt.fred 7200 IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
mailtest.example.org mailtest 7200 IN MX 10 mx.example.org.
d201911._domainkey.mailtest.example.org d201911._domainkey.mailtest 7200 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo9xHnjHyhm1weA6FjOqM8LKVsklFt26HXWoe/0XCdmBG4i/UzQ7RiSgWO4kv7anPK6qf6rtL1xYsHufaRXG8yLsZxz+BbUP99eZvxZX78tMg4cGf+yU6uFxulCbOzsMy+8Cc3bbQTtIWYjyWBwnHdRRrCkQxjZ5KAd+x7ZB5qzqg2/eLJ7fCuNsr/xn" "0XTY6XYgug95e3h4CEW3Y+bkG81AMeJmT/hoVTcXvT/Gm6ZOUmx6faQWIHSW7qOR3VS6S75HOuclEUk0gt9r7OQHKl01sXh8g02SHRk8SUMEoNVayqplYZTFFF01Z192m7enmpp+St+HHUIT6jW/CAMCO3wIDAQAB"
d201911e2._domainkey.mailtest.example.org d201911e2._domainkey.mailtest 7200 IN TXT "v=DKIM1; k=ed25519; p=afulDDnhaTzdqKQN0jtWV04eOhAcyBk3NCyVheOf53Y="
d202003._domainkey.mailtest.example.org d202003._domainkey.mailtest 7200 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs2BTVZaVLvL3qZBPaF7tRR0SdOKe+hjcpQ5fqO48lEuYiyTb6lkn8DPjDK11gTN3au0Bm+y8KC7ITKSJosuJXytxt3wqc61Pwtmb/Cy7GzmOF1AuegydB3/88VbgHT5DZucHrh6+ValZk4Trkx+/1K26Uo+h2KL2n/Ldb1y91ATHujp8DqxAOhiZ7KN" "aS1okNRRB4/14jPufAbeiN8/iBPiY5Hl80KHmpjM+7vvjb5jiecZ1ZrVDj7eTES4pmVh2v1c106mZLieoqDPYaf/HVbCM4E4n1B6kjbboSOpANADIcqXxGJQ7Be7/Sk9f7KwRusrsMHXmBHgm4wPmwGVZ3QIDAQAB"
d202003e2._domainkey.mailtest.example.org d202003e2._domainkey.mailtest 7200 IN TXT "v=DKIM1; k=ed25519; p=iqwH/hhozFdeo1xnuldr8KUi7O7g+DzmC+f0SYMKVDc="
_adsp._domainkey.mailtest.example.org _adsp._domainkey.mailtest 7200 IN TXT "dkim=all"
_dmarc.mailtest.example.org _dmarc.mailtest 7200 IN TXT "v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s"
_report.mailtest.example.org _report.mailtest 7200 IN TXT "r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;"
_smtp._tls.mailtest.example.org _smtp._tls.mailtest 7200 IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
_smtp-tlsrpt.mailtest.example.org _smtp-tlsrpt.mailtest 7200 IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
_pgpkey-http._tcp.sks.example.org _pgpkey-http._tcp.sks 7200 IN SRV 0 0 0 .
_pgpkey-https._tcp.sks.example.org _pgpkey-https._tcp.sks 7200 IN SRV 0 0 0 .
_hkp._tcp.sks.example.org _hkp._tcp.sks 7200 IN SRV 0 0 0 .
_pgpkey-http._tcp.sks-peer.example.org _pgpkey-http._tcp.sks-peer 7200 IN SRV 0 0 0 .
_pgpkey-https._tcp.sks-peer.example.org _pgpkey-https._tcp.sks-peer 7200 IN SRV 0 0 0 .
_hkp._tcp.sks-peer.example.org _hkp._tcp.sks-peer 7200 IN SRV 0 0 0 .
yoyo.example.org yoyo 7200 IN NS ns5.he.net.
yoyo.example.org yoyo 7200 IN NS ns4.he.net.
yoyo.example.org yoyo 7200 IN NS ns3.he.net.
yoyo.example.org yoyo 7200 IN NS ns2.he.net.
yoyo.example.org yoyo 7200 IN NS ns1.he.net.
khard.example.org khard 7200 IN NS ns-cloud-d1.googledomains.com.
khard.example.org khard 7200 IN NS ns-cloud-d2.googledomains.com.
khard.example.org khard 7200 IN NS ns-cloud-d3.googledomains.com.
khard.example.org khard 7200 IN NS ns-cloud-d4.googledomains.com.
realhost.example.org realhost 7200 IN MX 0 .
realhost.example.org realhost 7200 IN TXT "v=spf1 -all"
_25._tcp.realhost.example.org _25._tcp.realhost 7200 IN TLSA 3 0 0 0000000000000000000000000000000000000000000000000000000000000000
_fedcba9876543210fedcba9876543210.go.example.org _fedcba9876543210fedcba9876543210.go 7200 IN CNAME _45678901234abcdef45678901234abcd.ggedgsdned.acm-validations.aws.
opqrstuvwxyz.example.org opqrstuvwxyz 7200 IN CNAME gv-abcdefghijklmn.dv.googlehosted.com.
zyxwvutsrqpo.example.org zyxwvutsrqpo 7200 IN CNAME gv-nmlkjihgfedcba.dv.googlehosted.com.
0123456789abcdef0123456789abcdef.example.org 0123456789abcdef0123456789abcdef 7200 IN CNAME verify.bing.com.
Can't render this file because it contains an unexpected character in line 35 and column 84.

View File

@ -0,0 +1,352 @@
$ORIGIN example.org.
$TTL 7200
@ 43200 IN SOA ns1.example.org. hostmaster.example.org. 2020030700 7200 3600 864000 7200
IN NS friend-dns.example.com.
IN NS ns-a.example.net.
IN NS ns1.example.org.
IN NS ns2.example.org.
IN A 192.0.2.1
IN AAAA 2001:db8::1:1
IN MX 10 mx.example.org.
IN TXT "v=spf1 ip4:192.0.2.25 ip6:2001:db8::1:25 mx include:_spf.example.com ~all"
IN CAA 0 iodef "mailto:security@example.org"
IN CAA 0 issue "example.net"
IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-staging-v02.api.letsencrypt.org/acme/acct/23456789"
IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-v01.api.letsencrypt.org/acme/reg/1234567"
IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/76543210"
IN CAA 0 issuewild ";"
0123456789abcdef0123456789abcdef IN CNAME verify.bing.com.
_acme-challenge 15 IN CNAME _acme-challenge.chat-acme.d.example.net.
_amazon-tlsa IN TLSA 2 0 1 18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4
IN TLSA 2 0 1 1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4
IN TLSA 2 0 1 8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e
IN TLSA 2 0 1 e35d28419ed02025cfa69038cd623962458da5c695fbdea3c22b0bfb25897092
_cacert-c3-tlsa IN TLSA 2 0 1 4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8
_cacert-le-tlsa IN TLSA 2 0 1 4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8
IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_dmarc IN TXT "v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s"
example.com._report._dmarc IN TXT "v=DMARC1"
example.net._report._dmarc IN TXT "v=DMARC1"
special.test._report._dmarc IN TXT "v=DMARC1"
xn--2j5b.xn--9t4b11yi5a._report._dmarc IN TXT "v=DMARC1"
xn--qck5b9a5eml3bze.xn--zckzah._report._dmarc IN TXT "v=DMARC1"
_adsp._domainkey IN TXT "dkim=all"
d201911._domainkey IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4SmyE5Tz5/wPL8cb2AKuHnlFeLMOhAl1UX/NYaeDCKMWoBPTgZRT0jonKLmV2UscHdodXu5ZsLr/NAuLCp7HmPLReLz7kxKncP6ppveKxc1aq5SPTKeWe77p6BptlahHc35eiXsZRpTsEzrbEOainy1IWEd+w9p1gWbrSutwE22z0i4V88nQ9UBa1ks" "6cVGxXBZFovWC+i28aGs6Lc7cSfHG5+Mrg3ud5X4evYXTGFMPpunMcCsXrqmS5a+5gRSEMZhngha/cHjLwaJnWzKaywNWF5XOsCjL94QkS0joB7lnGOHMNSZBCcu542Y3Ht3SgHhlpkF9mIbIRfpzA9IoSQIDAQAB"
d201911e2._domainkey IN TXT "v=DKIM1; k=ed25519; p=GBt2k2L39KUb39fg5brOppXDHXvISy0+ECGgPld/bIo="
d202003._domainkey IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv/1tQvOEs7xtKNm7PbPgY4hQjwHVvqqkDb0+TeqZHYRSczQ3c0LFJrIDFiPIdwQe/7AuKrxvATSh/uXKZ3EP4ouMgROPZnUxVXENeetJj+pc3nfGwTKUBTTTth+SO74gdIWsntjvAfduzosC4ZkxbDwZ9c253qXARGvGu+LB/iAeq0ngEbm5fU13+Jo" "pv0d4dR6oGe9GvMEnGGLZzNrxWl1BPe2x5JZ5/X/3fW8vJx3OgRB5N6fqbAJ6HZ9kcbikDH4lPPl9RIoprFk7mmwno/nXLQYGhPobmqq8wLkDiXEkWtYa5lzujz3XI3Zkk8ZIOGvdbVVfAttT0IVPnYkOhQIDAQAB"
d202003e2._domainkey IN TXT "v=DKIM1; k=ed25519; p=DQI5d9sNMrr0SLDoAi071IFOyKnlbR29hAQdqVQecQg="
_kerberos IN TXT "EXAMPLE.ORG"
_le-amazon-tlsa IN TLSA 2 0 1 18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4
IN TLSA 2 0 1 1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4
IN TLSA 2 0 1 8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e
IN TLSA 2 0 1 e35d28419ed02025cfa69038cd623962458da5c695fbdea3c22b0bfb25897092
IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_letsencrypt-tlsa IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_mta-sts IN TXT "v=STSv1; id=20191231r1;"
_ourca-cacert-le-tlsa IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
IN TLSA 2 0 1 4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8
IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_ourca-cacert-tlsa IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
IN TLSA 2 0 1 4edde9e55ca453b388887caa25d5c5c5bccf2891d73b87495808293d5fac83c8
IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
_ourca-le-amazon-tlsa IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
IN TLSA 2 0 1 18ce6cfe7bf14e60b2e347b8dfe868cb31d02ebb3ada271569f50343b46db3a4
IN TLSA 2 0 1 1ba5b2aa8c65401a82960118f80bec4f62304d83cec4713a19c39c011ea46db4
IN TLSA 2 0 1 8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e
IN TLSA 2 0 1 e35d28419ed02025cfa69038cd623962458da5c695fbdea3c22b0bfb25897092
IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_ourca-le-tlsa IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
IN TLSA 2 1 1 60b87575447dcba2a36b7d11ac09fb24a9db406fee12d2cc90180517616e8a18
IN TLSA 2 1 1 b111dd8a1c2091a89bd4fd60c57f0716cce50feeff8137cdbee0326e02cf362b
_ourca-tlsa IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
_ourcaca4-tlsa IN TLSA 2 0 1 ea99063a0a3bda9727032cf82da238698b90ba729300703d3956943635f96488
_ourcaca5-tlsa IN TLSA 2 0 1 11f058f61f97b8adc66ef4801f918c71b10e5c1e3d39afde10408b3026647ef1
_report IN TXT "r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;"
_sip+d2s._sctp IN SRV 0 0 0 .
_sips+d2s._sctp IN SRV 0 0 0 .
_im._sip IN SRV 0 0 0 .
_pres._sip IN SRV 0 0 0 .
*._smimecert IN CNAME _ourca-smimea.example.org.
_client._smtp IN SRV 1 1 1 example.org.
_smtp-tlsrpt IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
_avatars-sec._tcp IN SRV 10 10 443 avatars.example.org.
_finger._tcp IN SRV 10 10 79 barbican.example.org.
_hkp._tcp IN SRV 0 0 0 .
_imap._tcp IN SRV 10 10 143 imap.example.org.
_imaps._tcp IN SRV 10 10 993 imap.example.org.
_jabber._tcp IN SRV 10 2 5269 xmpp-s2s.example.org.
_kerberos._tcp IN SRV 10 1 88 kerb-service.example.org.
_kerberos-adm._tcp IN SRV 10 1 749 kerb-service.example.org.
_ldap._tcp IN SRV 0 0 0 .
_openpgpkey._tcp IN SRV 10 10 443 openpgpkey.example.org.
_pgpkey-http._tcp IN SRV 0 0 0 .
_pgpkey-https._tcp IN SRV 0 0 0 .
_pop3._tcp IN SRV 0 0 0 .
_pop3s._tcp IN SRV 0 0 0 .
_sieve._tcp IN SRV 10 10 4190 imap.example.org.
_sip+d2t._tcp IN SRV 0 0 0 .
_sips+d2t._tcp IN SRV 0 0 0 .
_submission._tcp IN SRV 10 10 587 smtp.example.org.
_submissions._tcp IN SRV 10 10 465 smtp.example.org.
_xmpp-client._tcp IN SRV 10 2 5222 xmpp.example.org.
_xmpp-server._tcp IN SRV 10 2 5269 xmpp-s2s.example.org.
_smtp._tls IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
b._dns-sd._udp IN PTR field.example.org.
lb._dns-sd._udp IN PTR field.example.org.
r._dns-sd._udp IN PTR field.example.org.
_kerberos._udp IN SRV 10 1 88 kerb-service.example.org.
_kpasswd._udp IN SRV 10 1 464 kerb-service.example.org.
_ldap._udp IN SRV 0 0 0 .
_sip+d2u._udp IN SRV 0 0 0 .
auth IN AAAA 2001:db8::48:4558:6175:7468
avatars IN A 192.0.2.93
IN AAAA 2001:db8::48:4558:5345:5256
barbican IN A 192.0.2.1
IN AAAA 2001:db8::1:1
chat IN A 203.0.113.175
IN AAAA 2001:db8::f0ab:cdef:1234:f00f
_acme-challenge.chat 15 IN CNAME _acme-challenge.chat.chat-acme.d.example.net.
conference.chat IN CNAME chat.example.org.
fileproxy.chat IN CNAME chat.example.org.
proxy-chatfiles.chat IN CNAME chat.example.org.
pubsub.chat IN CNAME chat.example.org.
conference IN CNAME xmpp-s2s.example.org.
_acme-challenge.conference 15 IN CNAME _acme-challenge.conference.chat-acme.d.example.net.
_xmpp-server._tcp.conference IN SRV 10 2 5269 chat.example.org.
IN SRV 10 2 5269 xmpp-s2s.example.org.
dict IN CNAME services.example.org.
dns-moreinfo IN TXT "Fred Bloggs, TZ=America/New_York" "Chat-Service-X: @handle1" "Chat-Service-Y: federated-handle@example.org"
field IN NS ns1.example.org.
IN NS ns2.example.org.
finger IN CNAME barbican.example.org.
foo IN A 192.0.2.200
_client._smtp.foo IN SRV 1 2 1 foo.example.org.
fred IN A 192.0.2.93
IN AAAA 2001:db8::48:4558:5345:5256
IN MX 10 mx.example.org.
IN TXT "v=spf1 ip4:192.0.2.25 ip6:2001:db8::1:25 mx include:_spf.example.com ~all"
_dmarc.fred IN TXT "v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s"
_adsp._domainkey.fred IN TXT "dkim=all"
d201911._domainkey.fred IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8/OMUa3PnWh9LqXFVwlAgYDdTtbq3zTtTOSBmJq5yWauzXYcUuSmhW7CsV0QQlacCsQgJlwg9Nl1vO1TosAj5EKUCLTeSqjlWrM7KXKPx8FT71Q9H9wXX4MHUyGrqHFo0OPzcmtHwqcd8AD6MIvJHSRoAfiPPBp8Euc0wGnJZdGS75Hk+wA3MQ2/Tlz" "P2eenyiFyqmUTAGOYsGC/tREsWPiegR/OVxNGlzTY6quHsuVK7UYtIyFnYx9PGWdl3b3p7VjQ5V0Rp+2CLtVrCuS6Zs+/3NhZdM7mdD0a9Jgxakwa1le5YmB5lHTGF7T8quy6TlKe9lMUIRNjqTHfSFz/MwIDAQAB"
d201911e2._domainkey.fred IN TXT "v=DKIM1; k=ed25519; p=rQNsV9YcPJn/WYI1EDLjNbN/VuX1Hqq/oe4htbnhv+A="
d202003._domainkey.fred IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvpnx7tnRxAnE/poIRbVb2i+f1uQCXWnBHzHurgEyZX0CmGaiJuCbr8SWOW2PoXq9YX8gIv2TS3uzwGv/4yA2yX9Z9zar1LeWUfGgMWLdCol9xfmWrI+6MUzxuwhw/mXwzigbI4bHoakh3ez/i3J9KPS85GfrOODqA1emR13f2pG8EzAcje+rwW2PtYj" "c0h+FMDpeLuPYyYszFbNlrkVUneesxnoz+o4x/s6P14ZoRqz5CR7u6G02HwnNaHads5Eto6FYYErUUTtFmgWuYabHxgLVGRdRQs6B5OBYT/3L2q/lAgmEgdy/QL+c0Psfj99/XQmO8fcM0scBzw2ukQzcUwIDAQAB"
d202003e2._domainkey.fred IN TXT "v=DKIM1; k=ed25519; p=0DAPp/IRLYFI/Z4YSgJRi4gr7xcu1/EfJ5mjVn10aAw="
_report.fred IN TXT "r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;"
_smtp-tlsrpt.fred IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
_smtp._tls.fred IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
git IN CNAME vcs.example.org.
_443._tcp.git IN CNAME _ourca-le-tlsa.example.org.
gladys IN MX 10 mx.example.org.
_dmarc.gladys IN TXT "v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s"
_adsp._domainkey.gladys IN TXT "dkim=all"
_report.gladys IN TXT "r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;"
_smtp-tlsrpt.gladys IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
_smtp._tls.gladys IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
go IN CNAME abcdefghijklmn.cloudfront.net.
_fedcba9876543210fedcba9876543210.go IN CNAME _45678901234abcdef45678901234abcd.ggedgsdned.acm-validations.aws.
hermes IN A 192.0.2.25
IN AAAA 2001:db8::48:4558:696d:6170
IN AAAA 2001:db8::48:4558:736d:7470
IN SSHFP 1 2 4472FF5BD0528CD49216AF4503BA6A1C48F121D0292A31D6AF193E5000AF4966
IN SSHFP 3 2 EABA20C1565676A5229184CCFCF82D0EE408F91757A67D9FA51A0B6F3DB4A33B
IN SSHFP 4 2 A9D89920E599D04363C8B35A4CE66C1ED257EA1D16981F060B6AED080BBB7A7C
imap IN A 192.0.2.25
IN AAAA 2001:db8::48:4558:696d:6170
_143._tcp.imap IN CNAME _ourca-le-tlsa.example.org.
_4190._tcp.imap IN CNAME _ourca-le-tlsa.example.org.
_993._tcp.imap IN CNAME _ourca-le-tlsa.example.org.
imap46 IN A 192.0.2.25
IN AAAA 2001:db8::48:4558:696d:6170
_143._tcp.imap46 IN CNAME _ourca-le-tlsa.example.org.
_993._tcp.imap46 IN CNAME _ourca-le-tlsa.example.org.
barbican.ipv4 IN A 192.0.2.1
finger.ipv4 IN CNAME barbican.ipv4.example.org.
git.ipv4 IN CNAME vcs.ipv4.example.org.
hermes.ipv4 IN A 192.0.2.25
IN SSHFP 1 2 4472FF5BD0528CD49216AF4503BA6A1C48F121D0292A31D6AF193E5000AF4966
IN SSHFP 3 2 EABA20C1565676A5229184CCFCF82D0EE408F91757A67D9FA51A0B6F3DB4A33B
IN SSHFP 4 2 A9D89920E599D04363C8B35A4CE66C1ED257EA1D16981F060B6AED080BBB7A7C
megalomaniac.ipv4 IN A 198.51.100.254
IN SSHFP 1 2 4E9CED94D3CAF2CE915F85A63CE7279D5118A79EA03DAC59CF4859B825D2F619
IN SSHFP 3 2 D3556A3DB83AB9CCEC39DC6693DD2F3E28B178C9BBA61880924821C426CC61EB
IN SSHFP 4 2 C60C9D9D4728668F5F46986FF0C5B416C5E913862C4970CBFE211A6F44A111B4
mx.ipv4 IN A 192.0.2.25
nsauth.ipv4 IN A 192.0.2.53
IN SSHFP 1 2 895804AE022FFF643B2677563CB850607C5BB564D9919896C521098C8ABC40F2
IN SSHFP 3 2 28A65470BADAE611375747E1A803211C41E3D71E97741FA92CCBDF7B01F34E42
IN SSHFP 4 2 6E10445C0649C03FA83E18B1873E5B89B3A20893ECB48D01E7CEDB3DD563ECF0
people.ipv4 IN CNAME services.ipv4.example.org.
_443._tcp.people.ipv4 IN CNAME _ourca-le-tlsa.example.org.
security.ipv4 IN A 192.0.2.92
_443._tcp.security.ipv4 IN CNAME _ourca-le-tlsa.example.org.
www.security.ipv4 IN CNAME security.ipv4.example.org.
_443._tcp.www.security.ipv4 IN CNAME _ourca-le-tlsa.example.org.
services.ipv4 IN A 192.0.2.93
tower.ipv4 IN A 192.0.2.42
IN SSHFP 1 2 0F211D236E94768911A294F38653C4AF6FA935A5B06C975D8162F59142571451
IN SSHFP 3 2 88BF7B7401C11FA2E84871EFB06CD73D8FC409154605B354DB2DDA0B82FE1160
IN SSHFP 4 2 6D30900BE0FAAAE73568FC007A87B4D076CF9A351ECACC1106AEF726C34AD61D
vcs.ipv4 IN A 192.0.2.228
IN SSHFP 1 2 B518BE390BABDF43CB2D598AA6BEFA6CE6878546BF107B829D0CFC65253A97D4
IN SSHFP 3 2 E92545DC0BF501F72333DDEB7A37AFC2C5B408CE39A3AD95FBC66236F0077323
IN SSHFP 4 2 02289441124A487095A6CDA2E946C6A8ED9087FAF3592EC4135536C3E615521C
www.ipv4 IN CNAME services.ipv4.example.org.
_443._tcp.www.ipv4 IN CNAME _ourca-le-tlsa.example.org.
barbican.ipv6 IN AAAA 2001:db8::1:1
finger.ipv6 IN CNAME barbican.ipv6.example.org.
git.ipv6 IN CNAME vcs.ipv6.example.org.
hermes.ipv6 IN AAAA 2001:db8::48:4558:696d:6170
IN AAAA 2001:db8::48:4558:736d:7470
IN SSHFP 1 2 4472FF5BD0528CD49216AF4503BA6A1C48F121D0292A31D6AF193E5000AF4966
IN SSHFP 3 2 EABA20C1565676A5229184CCFCF82D0EE408F91757A67D9FA51A0B6F3DB4A33B
IN SSHFP 4 2 A9D89920E599D04363C8B35A4CE66C1ED257EA1D16981F060B6AED080BBB7A7C
megalomaniac.ipv6 IN AAAA 2001:db8:ffef::254
IN SSHFP 1 2 4E9CED94D3CAF2CE915F85A63CE7279D5118A79EA03DAC59CF4859B825D2F619
IN SSHFP 3 2 D3556A3DB83AB9CCEC39DC6693DD2F3E28B178C9BBA61880924821C426CC61EB
IN SSHFP 4 2 C60C9D9D4728668F5F46986FF0C5B416C5E913862C4970CBFE211A6F44A111B4
mx.ipv6 IN AAAA 2001:db8::48:4558:736d:7470
nsauth.ipv6 IN AAAA 2001:db8::53:1
IN SSHFP 1 2 895804AE022FFF643B2677563CB850607C5BB564D9919896C521098C8ABC40F2
IN SSHFP 3 2 28A65470BADAE611375747E1A803211C41E3D71E97741FA92CCBDF7B01F34E42
IN SSHFP 4 2 6E10445C0649C03FA83E18B1873E5B89B3A20893ECB48D01E7CEDB3DD563ECF0
people.ipv6 IN CNAME services.ipv6.example.org.
_443._tcp.people.ipv6 IN CNAME _ourca-le-tlsa.example.org.
security.ipv6 IN AAAA 2001:db8::48:4558:53:4543
_443._tcp.security.ipv6 IN CNAME _ourca-le-tlsa.example.org.
www.security.ipv6 IN CNAME security.ipv6.example.org.
_443._tcp.www.security.ipv6 IN CNAME _ourca-le-tlsa.example.org.
services.ipv6 IN AAAA 2001:db8::48:4558:5345:5256
tower.ipv6 IN AAAA 2001:db8::1:42
IN SSHFP 1 2 0F211D236E94768911A294F38653C4AF6FA935A5B06C975D8162F59142571451
IN SSHFP 3 2 88BF7B7401C11FA2E84871EFB06CD73D8FC409154605B354DB2DDA0B82FE1160
IN SSHFP 4 2 6D30900BE0FAAAE73568FC007A87B4D076CF9A351ECACC1106AEF726C34AD61D
vcs.ipv6 IN AAAA 2001:db8::48:4558:4456:4353
IN SSHFP 1 2 B518BE390BABDF43CB2D598AA6BEFA6CE6878546BF107B829D0CFC65253A97D4
IN SSHFP 3 2 E92545DC0BF501F72333DDEB7A37AFC2C5B408CE39A3AD95FBC66236F0077323
IN SSHFP 4 2 02289441124A487095A6CDA2E946C6A8ED9087FAF3592EC4135536C3E615521C
www.ipv6 IN CNAME services.ipv6.example.org.
_443._tcp.www.ipv6 IN CNAME _ourca-le-tlsa.example.org.
xmpp.ipv6 IN AAAA 2001:db8::f0ab:cdef:1234:f00f
xmpp-s2s.ipv6 IN AAAA 2001:db8::f0ab:cdef:1234:f00f
kerb-service IN A 192.0.2.88
IN AAAA 2001:db8::48:4558:6b65:7262
khard IN NS ns-cloud-d1.googledomains.com.
IN NS ns-cloud-d2.googledomains.com.
IN NS ns-cloud-d3.googledomains.com.
IN NS ns-cloud-d4.googledomains.com.
kpeople IN AAAA 2001:db8::48:4558:6b70:706c
mailtest IN MX 10 mx.example.org.
_dmarc.mailtest IN TXT "v=DMARC1; p=none; sp=none; rua=mailto:dmarc-notify@example.org; ruf=mailto:dmarc-notify@example.org; adkim=s"
_adsp._domainkey.mailtest IN TXT "dkim=all"
d201911._domainkey.mailtest IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo9xHnjHyhm1weA6FjOqM8LKVsklFt26HXWoe/0XCdmBG4i/UzQ7RiSgWO4kv7anPK6qf6rtL1xYsHufaRXG8yLsZxz+BbUP99eZvxZX78tMg4cGf+yU6uFxulCbOzsMy+8Cc3bbQTtIWYjyWBwnHdRRrCkQxjZ5KAd+x7ZB5qzqg2/eLJ7fCuNsr/xn" "0XTY6XYgug95e3h4CEW3Y+bkG81AMeJmT/hoVTcXvT/Gm6ZOUmx6faQWIHSW7qOR3VS6S75HOuclEUk0gt9r7OQHKl01sXh8g02SHRk8SUMEoNVayqplYZTFFF01Z192m7enmpp+St+HHUIT6jW/CAMCO3wIDAQAB"
d201911e2._domainkey.mailtest IN TXT "v=DKIM1; k=ed25519; p=afulDDnhaTzdqKQN0jtWV04eOhAcyBk3NCyVheOf53Y="
d202003._domainkey.mailtest IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs2BTVZaVLvL3qZBPaF7tRR0SdOKe+hjcpQ5fqO48lEuYiyTb6lkn8DPjDK11gTN3au0Bm+y8KC7ITKSJosuJXytxt3wqc61Pwtmb/Cy7GzmOF1AuegydB3/88VbgHT5DZucHrh6+ValZk4Trkx+/1K26Uo+h2KL2n/Ldb1y91ATHujp8DqxAOhiZ7KN" "aS1okNRRB4/14jPufAbeiN8/iBPiY5Hl80KHmpjM+7vvjb5jiecZ1ZrVDj7eTES4pmVh2v1c106mZLieoqDPYaf/HVbCM4E4n1B6kjbboSOpANADIcqXxGJQ7Be7/Sk9f7KwRusrsMHXmBHgm4wPmwGVZ3QIDAQAB"
d202003e2._domainkey.mailtest IN TXT "v=DKIM1; k=ed25519; p=iqwH/hhozFdeo1xnuldr8KUi7O7g+DzmC+f0SYMKVDc="
_report.mailtest IN TXT "r=abuse-reports@example.org; rf=ARF; re=postmaster@example.org;"
_smtp-tlsrpt.mailtest IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
_smtp._tls.mailtest IN TXT "v=TLSRPTv1; rua=mailto:smtp-tls-reports@example.org"
megalomaniac IN A 198.51.100.254
IN AAAA 2001:db8:ffef::254
IN SSHFP 1 2 4E9CED94D3CAF2CE915F85A63CE7279D5118A79EA03DAC59CF4859B825D2F619
IN SSHFP 3 2 D3556A3DB83AB9CCEC39DC6693DD2F3E28B178C9BBA61880924821C426CC61EB
IN SSHFP 4 2 C60C9D9D4728668F5F46986FF0C5B416C5E913862C4970CBFE211A6F44A111B4
mta-sts IN A 192.0.2.93
IN AAAA 2001:db8::48:4558:5345:5256
IN TXT "v=STSv1; id=20191231r1;"
mx IN A 192.0.2.25
IN AAAA 2001:db8::48:4558:736d:7470
IN TXT "v=spf1 a include:_spflarge.example.net -all"
_client._smtp.mx IN SRV 1 2 1 mx.example.org.
_25._tcp.mx IN CNAME _ourca-le-tlsa.example.org.
_26._tcp.mx IN CNAME _ourca-le-tlsa.example.org.
_27._tcp.mx IN CNAME _ourca-le-tlsa.example.org.
news-feed IN A 192.0.2.93
IN AAAA 2001:db8::48:4558:6e6e:7470
ns1 IN A 192.0.2.53
IN AAAA 2001:db8::53:1
ns2 IN A 203.0.113.53
IN AAAA 2001:db8:113::53
nsauth IN A 192.0.2.53
IN AAAA 2001:db8::53:1
IN SSHFP 1 2 895804AE022FFF643B2677563CB850607C5BB564D9919896C521098C8ABC40F2
IN SSHFP 3 2 28A65470BADAE611375747E1A803211C41E3D71E97741FA92CCBDF7B01F34E42
IN SSHFP 4 2 6E10445C0649C03FA83E18B1873E5B89B3A20893ECB48D01E7CEDB3DD563ECF0
openpgpkey IN A 192.0.2.92
IN AAAA 2001:db8::48:4558:53:4543
opqrstuvwxyz IN CNAME gv-abcdefghijklmn.dv.googlehosted.com.
people IN CNAME services.example.org.
_443._tcp.people IN CNAME _ourca-le-tlsa.example.org.
proxy-chatfiles IN CNAME xmpp.example.org.
_acme-challenge.proxy-chatfiles 15 IN CNAME _acme-challenge.proxy-chatfiles.chat-acme.d.example.net.
realhost IN MX 0 .
IN TXT "v=spf1 -all"
_25._tcp.realhost IN TLSA 3 0 0 0000000000000000000000000000000000000000000000000000000000000000
security IN A 192.0.2.92
IN AAAA 2001:db8::48:4558:53:4543
_443._tcp.security IN CNAME _ourca-le-tlsa.example.org.
ocsp.security IN AAAA 2001:db8::48:4558:6f63:7370
www.security IN CNAME security.example.org.
_443._tcp.www.security IN CNAME _ourca-le-tlsa.example.org.
services IN A 192.0.2.93
IN AAAA 2001:db8::48:4558:5345:5256
_hkp._tcp.sks IN SRV 0 0 0 .
_pgpkey-http._tcp.sks IN SRV 0 0 0 .
_pgpkey-https._tcp.sks IN SRV 0 0 0 .
_hkp._tcp.sks-peer IN SRV 0 0 0 .
_pgpkey-http._tcp.sks-peer IN SRV 0 0 0 .
_pgpkey-https._tcp.sks-peer IN SRV 0 0 0 .
smtp IN A 192.0.2.25
IN AAAA 2001:db8::48:4558:736d:7470
_1465._tcp.smtp IN CNAME _ourca-le-tlsa.example.org.
_1587._tcp.smtp IN CNAME _ourca-le-tlsa.example.org.
_465._tcp.smtp IN CNAME _ourca-le-tlsa.example.org.
_587._tcp.smtp IN CNAME _ourca-le-tlsa.example.org.
smtp46 IN A 192.0.2.25
IN AAAA 2001:db8::48:4558:736d:7470
_1465._tcp.smtp46 IN CNAME _ourca-le-tlsa.example.org.
_1587._tcp.smtp46 IN CNAME _ourca-le-tlsa.example.org.
_465._tcp.smtp46 IN CNAME _ourca-le-tlsa.example.org.
_587._tcp.smtp46 IN CNAME _ourca-le-tlsa.example.org.
svn IN AAAA 2001:db8::48:4558:73:766e
_443._tcp.svn IN CNAME _ourca-le-tlsa.example.org.
tower IN A 192.0.2.42
IN AAAA 2001:db8::1:42
IN SSHFP 1 2 0F211D236E94768911A294F38653C4AF6FA935A5B06C975D8162F59142571451
IN SSHFP 3 2 88BF7B7401C11FA2E84871EFB06CD73D8FC409154605B354DB2DDA0B82FE1160
IN SSHFP 4 2 6D30900BE0FAAAE73568FC007A87B4D076CF9A351ECACC1106AEF726C34AD61D
vcs IN A 192.0.2.228
IN AAAA 2001:db8::48:4558:4456:4353
IN SSHFP 1 2 B518BE390BABDF43CB2D598AA6BEFA6CE6878546BF107B829D0CFC65253A97D4
IN SSHFP 3 2 E92545DC0BF501F72333DDEB7A37AFC2C5B408CE39A3AD95FBC66236F0077323
IN SSHFP 4 2 02289441124A487095A6CDA2E946C6A8ED9087FAF3592EC4135536C3E615521C
webauth IN AAAA 2001:db8::48:4558:7765:6261
wpad IN CNAME services.example.org.
www IN CNAME services.example.org.
_443._tcp.www IN CNAME _ourca-le-tlsa.example.org.
xmpp IN A 203.0.113.175
IN AAAA 2001:db8::f0ab:cdef:1234:f00f
_acme-challenge.xmpp 15 IN CNAME _acme-challenge.xmpp.chat-acme.d.example.net.
_5222._tcp.xmpp IN CNAME _ourca-le-tlsa.example.org.
_5223._tcp.xmpp IN CNAME _ourca-le-tlsa.example.org.
fileproxy.xmpp IN CNAME xmpp.example.org.
pubsub.xmpp IN CNAME xmpp-s2s.example.org.
_acme-challenge.pubsub.xmpp 15 IN CNAME _acme-challenge.pubsub.xmpp.chat-acme.d.example.net.
xmpp-s2s IN A 203.0.113.175
IN AAAA 2001:db8::f0ab:cdef:1234:f00f
_5269._tcp.xmpp-s2s IN CNAME _ourca-le-tlsa.example.org.
yoyo IN NS ns1.he.net.
IN NS ns2.he.net.
IN NS ns3.he.net.
IN NS ns4.he.net.
IN NS ns5.he.net.
zyxwvutsrqpo IN CNAME gv-nmlkjihgfedcba.dv.googlehosted.com.

View File

@ -0,0 +1,21 @@
$ORIGIN simple.com.
$TTL 300
@ IN SOA ns3.serverfault.com. sysadmin.stackoverflow.com. 2020022300 3600 600 604800 1440
172800 IN NS ns-1313.awsdns-36.org.
172800 IN NS ns-736.awsdns-28.net.
172800 IN NS ns-cloud-c1.googledomains.com.
172800 IN NS ns-cloud-c2.googledomains.com.
IN MX 1 aspmx.l.google.com.
IN MX 5 alt1.aspmx.l.google.com.
IN MX 5 alt2.aspmx.l.google.com.
IN MX 10 alt3.aspmx.l.google.com.
IN MX 10 alt4.aspmx.l.google.com.
IN TXT "google-site-verification=O54a_pYHGr4EB8iLoGFgX8OTZ1DkP1KWnOLpx0YCazI"
IN TXT "v=spf1 mx include:mktomail.com ~all"
m1._domainkey IN TXT "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZfEV2C82eJ4OA3Mslz4C6msjYYalg1eUcHeJQ//QM1hOZSvn4qz+hSKGi7jwNDqsZNzM8vCt2+XzdDYL3JddwUEhoDsIsZsJW0qzIVVLLWCg6TLNS3FpVyjc171o94dpoHFekfswWDoEwFQ03Woq2jchYWBrbUf7MMcdEj/EQqwIDAQAB"
dev IN CNAME stackoverflowsandbox2.mktoweb.com.
dev-email IN CNAME mkto-sj310056.com.
m1._domainkey.dev-email IN TXT "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIBezZ2Gc+/3PghWk+YOE6T9HdwgUTMTR0Fne2i51MNN9Qs7AqDitVdG/949iDbI2fPNZSnKtOcnlLYwvve9MhMAMI1nZ26ILhgaBJi2BMZQpGFlO4ucuo/Uj4DPZ5Ge/NZHCX0CRhAhR5sRmL2OffNcFXFrymzUuz4KzI/NyUiwIDAQAB"
email IN CNAME mkto-sj280138.com.
info IN CNAME stackoverflow.mktoweb.com.
_sip._tcp IN SRV 10 60 5060 bigbox.example.com.

View File

@ -0,0 +1,24 @@
var bind = NewDnsProvider("bind", "BIND");
var REG_CHANGEME = NewRegistrar("ThirdParty", "NONE");
D("simple.com", REG_CHANGEME,
DnsProvider(bind),
//SOA('@', 'ns3.serverfault.com.', 'sysadmin.stackoverflow.com.', 2020022300, 3600, 600, 604800, 1440),
NAMESERVER('ns-1313.awsdns-36.org.'),
NAMESERVER('ns-736.awsdns-28.net.'),
NAMESERVER('ns-cloud-c1.googledomains.com.'),
NAMESERVER('ns-cloud-c2.googledomains.com.'),
MX('@', 1, 'aspmx.l.google.com.'),
MX('@', 5, 'alt1.aspmx.l.google.com.'),
MX('@', 5, 'alt2.aspmx.l.google.com.'),
MX('@', 10, 'alt3.aspmx.l.google.com.'),
MX('@', 10, 'alt4.aspmx.l.google.com.'),
TXT('@', 'google-site-verification=O54a_pYHGr4EB8iLoGFgX8OTZ1DkP1KWnOLpx0YCazI'),
TXT('@', 'v=spf1 mx include:mktomail.com ~all'),
TXT('m1._domainkey', 'v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZfEV2C82eJ4OA3Mslz4C6msjYYalg1eUcHeJQ//QM1hOZSvn4qz+hSKGi7jwNDqsZNzM8vCt2+XzdDYL3JddwUEhoDsIsZsJW0qzIVVLLWCg6TLNS3FpVyjc171o94dpoHFekfswWDoEwFQ03Woq2jchYWBrbUf7MMcdEj/EQqwIDAQAB'),
CNAME('dev', 'stackoverflowsandbox2.mktoweb.com.'),
CNAME('dev-email', 'mkto-sj310056.com.'),
TXT('m1._domainkey.dev-email', 'v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIBezZ2Gc+/3PghWk+YOE6T9HdwgUTMTR0Fne2i51MNN9Qs7AqDitVdG/949iDbI2fPNZSnKtOcnlLYwvve9MhMAMI1nZ26ILhgaBJi2BMZQpGFlO4ucuo/Uj4DPZ5Ge/NZHCX0CRhAhR5sRmL2OffNcFXFrymzUuz4KzI/NyUiwIDAQAB'),
CNAME('email', 'mkto-sj280138.com.'),
CNAME('info', 'stackoverflow.mktoweb.com.'),
SRV('_sip._tcp', 10, 60, 5060, 'bigbox.example.com.')
)

View File

@ -0,0 +1,19 @@
simple.com @ 300 IN SOA ns3.serverfault.com. sysadmin.stackoverflow.com. 2020022300 3600 600 604800 1440
simple.com @ 172800 IN NS ns-1313.awsdns-36.org.
simple.com @ 172800 IN NS ns-736.awsdns-28.net.
simple.com @ 172800 IN NS ns-cloud-c1.googledomains.com.
simple.com @ 172800 IN NS ns-cloud-c2.googledomains.com.
simple.com @ 300 IN MX 1 aspmx.l.google.com.
simple.com @ 300 IN MX 5 alt1.aspmx.l.google.com.
simple.com @ 300 IN MX 5 alt2.aspmx.l.google.com.
simple.com @ 300 IN MX 10 alt3.aspmx.l.google.com.
simple.com @ 300 IN MX 10 alt4.aspmx.l.google.com.
simple.com @ 300 IN TXT "google-site-verification=O54a_pYHGr4EB8iLoGFgX8OTZ1DkP1KWnOLpx0YCazI"
simple.com @ 300 IN TXT "v=spf1 mx include:mktomail.com ~all"
m1._domainkey.simple.com m1._domainkey 300 IN TXT "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZfEV2C82eJ4OA3Mslz4C6msjYYalg1eUcHeJQ//QM1hOZSvn4qz+hSKGi7jwNDqsZNzM8vCt2+XzdDYL3JddwUEhoDsIsZsJW0qzIVVLLWCg6TLNS3FpVyjc171o94dpoHFekfswWDoEwFQ03Woq2jchYWBrbUf7MMcdEj/EQqwIDAQAB"
dev.simple.com dev 300 IN CNAME stackoverflowsandbox2.mktoweb.com.
dev-email.simple.com dev-email 300 IN CNAME mkto-sj310056.com.
m1._domainkey.dev-email.simple.com m1._domainkey.dev-email 300 IN TXT "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIBezZ2Gc+/3PghWk+YOE6T9HdwgUTMTR0Fne2i51MNN9Qs7AqDitVdG/949iDbI2fPNZSnKtOcnlLYwvve9MhMAMI1nZ26ILhgaBJi2BMZQpGFlO4ucuo/Uj4DPZ5Ge/NZHCX0CRhAhR5sRmL2OffNcFXFrymzUuz4KzI/NyUiwIDAQAB"
email.simple.com email 300 IN CNAME mkto-sj280138.com.
info.simple.com info 300 IN CNAME stackoverflow.mktoweb.com.
_sip._tcp.simple.com _sip._tcp 300 IN SRV 10 60 5060 bigbox.example.com.
1 simple.com @ 300 IN SOA ns3.serverfault.com. sysadmin.stackoverflow.com. 2020022300 3600 600 604800 1440
2 simple.com @ 172800 IN NS ns-1313.awsdns-36.org.
3 simple.com @ 172800 IN NS ns-736.awsdns-28.net.
4 simple.com @ 172800 IN NS ns-cloud-c1.googledomains.com.
5 simple.com @ 172800 IN NS ns-cloud-c2.googledomains.com.
6 simple.com @ 300 IN MX 1 aspmx.l.google.com.
7 simple.com @ 300 IN MX 5 alt1.aspmx.l.google.com.
8 simple.com @ 300 IN MX 5 alt2.aspmx.l.google.com.
9 simple.com @ 300 IN MX 10 alt3.aspmx.l.google.com.
10 simple.com @ 300 IN MX 10 alt4.aspmx.l.google.com.
11 simple.com @ 300 IN TXT google-site-verification=O54a_pYHGr4EB8iLoGFgX8OTZ1DkP1KWnOLpx0YCazI
12 simple.com @ 300 IN TXT v=spf1 mx include:mktomail.com ~all
13 m1._domainkey.simple.com m1._domainkey 300 IN TXT v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZfEV2C82eJ4OA3Mslz4C6msjYYalg1eUcHeJQ//QM1hOZSvn4qz+hSKGi7jwNDqsZNzM8vCt2+XzdDYL3JddwUEhoDsIsZsJW0qzIVVLLWCg6TLNS3FpVyjc171o94dpoHFekfswWDoEwFQ03Woq2jchYWBrbUf7MMcdEj/EQqwIDAQAB
14 dev.simple.com dev 300 IN CNAME stackoverflowsandbox2.mktoweb.com.
15 dev-email.simple.com dev-email 300 IN CNAME mkto-sj310056.com.
16 m1._domainkey.dev-email.simple.com m1._domainkey.dev-email 300 IN TXT v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIBezZ2Gc+/3PghWk+YOE6T9HdwgUTMTR0Fne2i51MNN9Qs7AqDitVdG/949iDbI2fPNZSnKtOcnlLYwvve9MhMAMI1nZ26ILhgaBJi2BMZQpGFlO4ucuo/Uj4DPZ5Ge/NZHCX0CRhAhR5sRmL2OffNcFXFrymzUuz4KzI/NyUiwIDAQAB
17 email.simple.com email 300 IN CNAME mkto-sj280138.com.
18 info.simple.com info 300 IN CNAME stackoverflow.mktoweb.com.
19 _sip._tcp.simple.com _sip._tcp 300 IN SRV 10 60 5060 bigbox.example.com.

View File

@ -0,0 +1,22 @@
$ORIGIN simple.com.
$TTL 300
@ IN SOA ns3.serverfault.com. sysadmin.stackoverflow.com. 2020022300 3600 600 604800 1440
172800 IN NS ns-1313.awsdns-36.org.
172800 IN NS ns-736.awsdns-28.net.
172800 IN NS ns-cloud-c1.googledomains.com.
172800 IN NS ns-cloud-c2.googledomains.com.
IN MX 1 aspmx.l.google.com.
IN MX 5 alt1.aspmx.l.google.com.
IN MX 5 alt2.aspmx.l.google.com.
IN MX 10 alt3.aspmx.l.google.com.
IN MX 10 alt4.aspmx.l.google.com.
IN TXT "google-site-verification=O54a_pYHGr4EB8iLoGFgX8OTZ1DkP1KWnOLpx0YCazI"
IN TXT "v=spf1 mx include:mktomail.com ~all"
m1._domainkey IN TXT "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZfEV2C82eJ4OA3Mslz4C6msjYYalg1eUcHeJQ//QM1hOZSvn4qz+hSKGi7jwNDqsZNzM8vCt2+XzdDYL3JddwUEhoDsIsZsJW0qzIVVLLWCg6TLNS3FpVyjc171o94dpoHFekfswWDoEwFQ03Woq2jchYWBrbUf7MMcdEj/EQqwIDAQAB"
_sip._tcp IN SRV 10 60 5060 bigbox.example.com.
dev IN CNAME stackoverflowsandbox2.mktoweb.com.
dev-email IN CNAME mkto-sj310056.com.
m1._domainkey.dev-email IN TXT "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIBezZ2Gc+/3PghWk+YOE6T9HdwgUTMTR0Fne2i51MNN9Qs7AqDitVdG/949iDbI2fPNZSnKtOcnlLYwvve9MhMAMI1nZ26ILhgaBJi2BMZQpGFlO4ucuo/Uj4DPZ5Ge/NZHCX0CRhAhR5sRmL2OffNcFXFrymzUuz4KzI/NyUiwIDAQAB"
email IN CNAME mkto-sj280138.com.
info IN CNAME stackoverflow.mktoweb.com.

View File

@ -19,7 +19,7 @@ Syntax:
dnscontrol get-zones [command options] credkey provider zone [...]
--creds value Provider credentials JSON file (default: "creds.json")
--format value Output format: js zone tsv nameonly (default: "zone")
--format value Output format: js djs zone tsv nameonly (default: "zone")
--out value Instead of stdout, write to this file
--ttl value Default TTL (0 picks the zone's most common TTL) (default: 0)
@ -29,31 +29,34 @@ ARGUMENTS:
zone: One or more zones (domains) to download; or "all".
FORMATS:
--format=js dnsconfig.js format (not perfect, but a decent first draft)
--format=js dnsconfig.js format (not perfect, just a decent first draft)
--format=djs js with disco commas
--format=zone BIND Zonefile format
--format=tsv TAB separated value (useful for AWK)
--format=nameonly Just print the zone names
When using `tsv`, the columns are:
The columns in --format=tsv are:
FQDN (the label with the domain)
ShortName (just the label, "@" if it is the naked domain)
TTL
Record Type (A, AAAA, CNAME, etc.)
Target and arguments (quoted like in a zonefile)
The --ttl flag applies to zone and js formats.
The --ttl flag only applies to zone/js/djs formats.
EXAMPLES:
dnscontrol get-zones myr53 ROUTE53 example.com
dnscontrol get-zones gmain GANDI_V5 example.comn other.com
dnscontrol get-zones cfmain CLOUDFLAREAPI all
dnscontrol get-zones -format=tsv bind BIND example.com
dnscontrol get-zones -format=js -out=draft.js glcoud GCLOUD example.com`,
dnscontrol get-zones -format=djs -out=draft.js glcoud GCLOUD example.com`,
Read a zonefile, generate a JS file, then use the JS file to see how
different it is from the zonefile:
# Example commands
dnscontrol get-zone --format=js -out=foo.djs bind BIND example.org
dnscontrol preview --config foo.js
dnscontrol get-zone
# Developer Note

7
go.mod
View File

@ -10,6 +10,7 @@ require (
github.com/Azure/go-autorest/autorest/to v0.3.0
github.com/DisposaBoy/JsonConfigReader v0.0.0-20171218180944-5ea4d0ddac55
github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883
github.com/aws/aws-sdk-go v1.29.1
github.com/billputer/go-namecheap v0.0.0-20170915210158-0c7adb0710f8
github.com/cenkalti/backoff v2.1.1+incompatible // indirect
@ -21,6 +22,7 @@ require (
github.com/go-acme/lego v2.7.2+incompatible
github.com/gobwas/glob v0.2.4-0.20181002190808-e7a84e9525fe
github.com/golang/protobuf v1.3.3 // indirect
github.com/google/go-cmp v0.4.0 // indirect
github.com/google/go-github v17.0.0+incompatible
github.com/google/go-querystring v1.0.1-0.20190318165438-c8c88dbee036 // indirect
github.com/google/uuid v1.1.2-0.20190416172445-c2e93f3ae59f
@ -29,7 +31,6 @@ require (
github.com/hexonet/go-sdk v2.2.3+incompatible
github.com/jarcoal/httpmock v1.0.4 // indirect
github.com/kolo/xmlrpc v0.0.0-20150413191830-0826b98aaa29 // indirect
github.com/kr/pretty v0.1.0 // indirect
github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8 // indirect
github.com/miekg/dns v1.1.27
github.com/mjibson/esc v0.2.0
@ -39,6 +40,7 @@ require (
github.com/prasmussen/gandi-api v0.0.0-20180224132202-58d3d4205661
github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 // indirect
github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff
github.com/sergi/go-diff v1.1.0 // indirect
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a // indirect
github.com/softlayer/softlayer-go v0.0.0-20170804160555-5e1c8cccc730
github.com/stretchr/testify v1.4.0
@ -49,15 +51,12 @@ require (
github.com/urfave/cli/v2 v2.1.1
github.com/vultr/govultr v0.2.0
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d // indirect
golang.org/x/mod v0.2.0 // indirect
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c // indirect
golang.org/x/tools v0.0.0-20200303202040-658b03bcd3d8 // indirect
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 // indirect
google.golang.org/api v0.17.0
google.golang.org/appengine v1.6.5 // indirect
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
gopkg.in/ini.v1 v1.42.0 // indirect
gopkg.in/ns1/ns1-go.v2 v2.0.0-20170502175150-c563826f4cbe
gopkg.in/sourcemap.v1 v1.0.5 // indirect

16
go.sum
View File

@ -40,6 +40,8 @@ github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d/go.mod h1:WML6KO
github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/aws/aws-sdk-go v1.29.1 h1:U2vZ5WprhGAMjzb4bKVzl2QecUtZFW2BXVqa5bnd+OY=
@ -100,6 +102,8 @@ github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY=
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
@ -212,6 +216,8 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk=
github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
@ -275,8 +281,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 h1:MsuvTghUPjX762sGLnGsxC3HM0B5r83wEtYcYR8/vRs=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@ -292,6 +296,7 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -331,8 +336,6 @@ golang.org/x/tools v0.0.0-20190624190245-7f2218787638 h1:uIfBkD8gLczr4XDgYpt/qJY
golang.org/x/tools v0.0.0-20190624190245-7f2218787638/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212213243-2ee7536ab1cc h1:AlqcddMxhvJRMNuW1bFwyuNdm+TCkcEGKvw6FVPTuR8=
golang.org/x/tools v0.0.0-20200212213243-2ee7536ab1cc/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200303202040-658b03bcd3d8 h1:2oWBslXKHx1vReVc1bA4mflTOcSxgXz536kSRBhwDds=
golang.org/x/tools v0.0.0-20200303202040-658b03bcd3d8/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@ -373,8 +376,8 @@ google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/ini.v1 v1.42.0 h1:7N3gPTt50s8GuLortA00n8AqRTk75qOP98+mTPpgzRk=
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ns1/ns1-go.v2 v2.0.0-20170502175150-c563826f4cbe h1:fuu3vZ8C6O8mk8Ich8YfkDv/Zpnx1HUotQk8JocBcSw=
@ -385,6 +388,7 @@ gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4
gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

24
vendor/github.com/andreyvit/diff/.gitignore generated vendored Normal file
View File

@ -0,0 +1,24 @@
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so
# Folders
_obj
_test
# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*
_testmain.go
*.exe
*.test
*.prof

21
vendor/github.com/andreyvit/diff/LICENSE generated vendored Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 Andrey Tarantsov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

28
vendor/github.com/andreyvit/diff/README.md generated vendored Normal file
View File

@ -0,0 +1,28 @@
# diff
Quick'n'easy string diffing functions for Golang based on [github.com/sergi/go-diff](https://github.com/sergi/go-diff). Mainly for diffing strings in tests.
See [the docs on GoDoc](https://godoc.org/github.com/andreyvit/diff).
Get it:
go get -u github.com/andreyvit/diff
Example:
import (
"strings"
"testing"
"github.com/andreyvit/diff"
)
const expected = `
...
`
func TestFoo(t *testing.T) {
actual := Foo(...)
if a, e := strings.TrimSpace(actual), strings.TrimSpace(expected); a != e {
t.Errorf("Result not as expected:\n%v", diff.LineDiff(e, a))
}
}

128
vendor/github.com/andreyvit/diff/diff.go generated vendored Normal file
View File

@ -0,0 +1,128 @@
package diff
import (
"bytes"
"strings"
"github.com/sergi/go-diff/diffmatchpatch"
)
func diff(a, b string) []diffmatchpatch.Diff {
dmp := diffmatchpatch.New()
diffs := dmp.DiffMain(a, b, true)
if len(diffs) > 2 {
diffs = dmp.DiffCleanupSemantic(diffs)
diffs = dmp.DiffCleanupEfficiency(diffs)
}
return diffs
}
// CharacterDiff returns an inline diff between the two strings, using (++added++) and (~~deleted~~) markup.
func CharacterDiff(a, b string) string {
return diffsToString(diff(a, b))
}
func diffsToString(diffs []diffmatchpatch.Diff) string {
var buff bytes.Buffer
for _, diff := range diffs {
text := diff.Text
switch diff.Type {
case diffmatchpatch.DiffInsert:
buff.WriteString("(++")
buff.WriteString(text)
buff.WriteString("++)")
case diffmatchpatch.DiffDelete:
buff.WriteString("(~~")
buff.WriteString(text)
buff.WriteString("~~)")
case diffmatchpatch.DiffEqual:
buff.WriteString(text)
}
}
return buff.String()
}
// LineDiff returns a normal linewise diff between the two given strings.
func LineDiff(a, b string) string {
return strings.Join(LineDiffAsLines(a, b), "\n")
}
// LineDiffAsLines returns the lines of a linewise diff between the two given strings.
func LineDiffAsLines(a, b string) []string {
return diffsToPatchLines(diff(a, b))
}
type patchBuilder struct {
output []string
oldLines []string
newLines []string
newLineBuffer bytes.Buffer
oldLineBuffer bytes.Buffer
}
func (b *patchBuilder) AddCharacters(text string, op diffmatchpatch.Operation) {
if op == diffmatchpatch.DiffInsert || op == diffmatchpatch.DiffEqual {
b.newLineBuffer.WriteString(text)
}
if op == diffmatchpatch.DiffDelete || op == diffmatchpatch.DiffEqual {
b.oldLineBuffer.WriteString(text)
}
}
func (b *patchBuilder) AddNewline(op diffmatchpatch.Operation) {
oldLine := b.oldLineBuffer.String()
newLine := b.newLineBuffer.String()
if op == diffmatchpatch.DiffEqual && (oldLine == newLine) {
b.FlushChunk()
b.output = append(b.output, " "+newLine)
b.oldLineBuffer.Reset()
b.newLineBuffer.Reset()
} else {
if op == diffmatchpatch.DiffDelete || op == diffmatchpatch.DiffEqual {
b.oldLines = append(b.oldLines, "-"+oldLine)
b.oldLineBuffer.Reset()
}
if op == diffmatchpatch.DiffInsert || op == diffmatchpatch.DiffEqual {
b.newLines = append(b.newLines, "+"+newLine)
b.newLineBuffer.Reset()
}
}
}
func (b *patchBuilder) FlushChunk() {
if b.oldLines != nil {
b.output = append(b.output, b.oldLines...)
b.oldLines = nil
}
if b.newLines != nil {
b.output = append(b.output, b.newLines...)
b.newLines = nil
}
}
func (b *patchBuilder) Flush() {
if b.oldLineBuffer.Len() > 0 && b.newLineBuffer.Len() > 0 {
b.AddNewline(diffmatchpatch.DiffEqual)
} else if b.oldLineBuffer.Len() > 0 {
b.AddNewline(diffmatchpatch.DiffDelete)
} else if b.newLineBuffer.Len() > 0 {
b.AddNewline(diffmatchpatch.DiffInsert)
}
b.FlushChunk()
}
func diffsToPatchLines(diffs []diffmatchpatch.Diff) []string {
b := new(patchBuilder)
b.output = make([]string, 0, len(diffs))
for _, diff := range diffs {
lines := strings.Split(diff.Text, "\n")
for idx, line := range lines {
if idx > 0 {
b.AddNewline(diff.Type)
}
b.AddCharacters(line, diff.Type)
}
}
b.Flush()
return b.output
}

2
vendor/github.com/andreyvit/diff/doc.go generated vendored Normal file
View File

@ -0,0 +1,2 @@
// diff provides quick and easy string diffing functions based on github.com/sergi/go-diff, mainly for diffing strings in tests
package diff

19
vendor/github.com/andreyvit/diff/trim.go generated vendored Normal file
View File

@ -0,0 +1,19 @@
package diff
import (
"strings"
)
// TrimLines applies TrimSpace to each string in the given array.
func TrimLines(input []string) []string {
result := make([]string, 0, len(input))
for _, el := range input {
result = append(result, strings.TrimSpace(el))
}
return result
}
// TrimLinesInString applies TrimSpace to each line in the given string, and returns the new trimmed string. Empty lines are not removed.
func TrimLinesInString(input string) string {
return strings.Join(TrimLines(strings.Split(strings.TrimSpace(input), "\n")), "\n")
}

25
vendor/github.com/sergi/go-diff/AUTHORS generated vendored Normal file
View File

@ -0,0 +1,25 @@
# This is the official list of go-diff authors for copyright purposes.
# This file is distinct from the CONTRIBUTORS files.
# See the latter for an explanation.
# Names should be added to this file as
# Name or Organization <email address>
# The email address is not required for organizations.
# Please keep the list sorted.
Danny Yoo <dannyyoo@google.com>
James Kolb <jkolb@google.com>
Jonathan Amsterdam <jba@google.com>
Markus Zimmermann <markus.zimmermann@nethead.at> <markus.zimmermann@symflower.com> <zimmski@gmail.com>
Matt Kovars <akaskik@gmail.com>
Örjan Persson <orjan@spotify.com>
Osman Masood <oamasood@gmail.com>
Robert Carlsen <rwcarlsen@gmail.com>
Rory Flynn <roryflynn@users.noreply.github.com>
Sergi Mansilla <sergi.mansilla@gmail.com>
Shatrugna Sadhu <ssadhu@apcera.com>
Shawn Smith <shawnpsmith@gmail.com>
Stas Maksimov <maksimov@gmail.com>
Tor Arvid Lund <torarvid@gmail.com>
Zac Bergquist <zbergquist99@gmail.com>

32
vendor/github.com/sergi/go-diff/CONTRIBUTORS generated vendored Normal file
View File

@ -0,0 +1,32 @@
# This is the official list of people who can contribute
# (and typically have contributed) code to the go-diff
# repository.
#
# The AUTHORS file lists the copyright holders; this file
# lists people. For example, ACME Inc. employees would be listed here
# but not in AUTHORS, because ACME Inc. would hold the copyright.
#
# When adding J Random Contributor's name to this file,
# either J's name or J's organization's name should be
# added to the AUTHORS file.
#
# Names should be added to this file like so:
# Name <email address>
#
# Please keep the list sorted.
Danny Yoo <dannyyoo@google.com>
James Kolb <jkolb@google.com>
Jonathan Amsterdam <jba@google.com>
Markus Zimmermann <markus.zimmermann@nethead.at> <markus.zimmermann@symflower.com> <zimmski@gmail.com>
Matt Kovars <akaskik@gmail.com>
Örjan Persson <orjan@spotify.com>
Osman Masood <oamasood@gmail.com>
Robert Carlsen <rwcarlsen@gmail.com>
Rory Flynn <roryflynn@users.noreply.github.com>
Sergi Mansilla <sergi.mansilla@gmail.com>
Shatrugna Sadhu <ssadhu@apcera.com>
Shawn Smith <shawnpsmith@gmail.com>
Stas Maksimov <maksimov@gmail.com>
Tor Arvid Lund <torarvid@gmail.com>
Zac Bergquist <zbergquist99@gmail.com>

20
vendor/github.com/sergi/go-diff/LICENSE generated vendored Normal file
View File

@ -0,0 +1,20 @@
Copyright (c) 2012-2016 The go-diff Authors. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

1345
vendor/github.com/sergi/go-diff/diffmatchpatch/diff.go generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,46 @@
// Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/
// Package diffmatchpatch offers robust algorithms to perform the operations required for synchronizing plain text.
package diffmatchpatch
import (
"time"
)
// DiffMatchPatch holds the configuration for diff-match-patch operations.
type DiffMatchPatch struct {
// Number of seconds to map a diff before giving up (0 for infinity).
DiffTimeout time.Duration
// Cost of an empty edit operation in terms of edit characters.
DiffEditCost int
// How far to search for a match (0 = exact location, 1000+ = broad match). A match this many characters away from the expected location will add 1.0 to the score (0.0 is a perfect match).
MatchDistance int
// When deleting a large block of text (over ~64 characters), how close do the contents have to be to match the expected contents. (0.0 = perfection, 1.0 = very loose). Note that MatchThreshold controls how closely the end points of a delete need to match.
PatchDeleteThreshold float64
// Chunk size for context length.
PatchMargin int
// The number of bits in an int.
MatchMaxBits int
// At what point is no match declared (0.0 = perfection, 1.0 = very loose).
MatchThreshold float64
}
// New creates a new DiffMatchPatch object with default parameters.
func New() *DiffMatchPatch {
// Defaults.
return &DiffMatchPatch{
DiffTimeout: time.Second,
DiffEditCost: 4,
MatchThreshold: 0.5,
MatchDistance: 1000,
PatchDeleteThreshold: 0.5,
PatchMargin: 4,
MatchMaxBits: 32,
}
}

160
vendor/github.com/sergi/go-diff/diffmatchpatch/match.go generated vendored Normal file
View File

@ -0,0 +1,160 @@
// Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/
package diffmatchpatch
import (
"math"
)
// MatchMain locates the best instance of 'pattern' in 'text' near 'loc'.
// Returns -1 if no match found.
func (dmp *DiffMatchPatch) MatchMain(text, pattern string, loc int) int {
// Check for null inputs not needed since null can't be passed in C#.
loc = int(math.Max(0, math.Min(float64(loc), float64(len(text)))))
if text == pattern {
// Shortcut (potentially not guaranteed by the algorithm)
return 0
} else if len(text) == 0 {
// Nothing to match.
return -1
} else if loc+len(pattern) <= len(text) && text[loc:loc+len(pattern)] == pattern {
// Perfect match at the perfect spot! (Includes case of null pattern)
return loc
}
// Do a fuzzy compare.
return dmp.MatchBitap(text, pattern, loc)
}
// MatchBitap locates the best instance of 'pattern' in 'text' near 'loc' using the Bitap algorithm.
// Returns -1 if no match was found.
func (dmp *DiffMatchPatch) MatchBitap(text, pattern string, loc int) int {
// Initialise the alphabet.
s := dmp.MatchAlphabet(pattern)
// Highest score beyond which we give up.
scoreThreshold := dmp.MatchThreshold
// Is there a nearby exact match? (speedup)
bestLoc := indexOf(text, pattern, loc)
if bestLoc != -1 {
scoreThreshold = math.Min(dmp.matchBitapScore(0, bestLoc, loc,
pattern), scoreThreshold)
// What about in the other direction? (speedup)
bestLoc = lastIndexOf(text, pattern, loc+len(pattern))
if bestLoc != -1 {
scoreThreshold = math.Min(dmp.matchBitapScore(0, bestLoc, loc,
pattern), scoreThreshold)
}
}
// Initialise the bit arrays.
matchmask := 1 << uint((len(pattern) - 1))
bestLoc = -1
var binMin, binMid int
binMax := len(pattern) + len(text)
lastRd := []int{}
for d := 0; d < len(pattern); d++ {
// Scan for the best match; each iteration allows for one more error. Run a binary search to determine how far from 'loc' we can stray at this error level.
binMin = 0
binMid = binMax
for binMin < binMid {
if dmp.matchBitapScore(d, loc+binMid, loc, pattern) <= scoreThreshold {
binMin = binMid
} else {
binMax = binMid
}
binMid = (binMax-binMin)/2 + binMin
}
// Use the result from this iteration as the maximum for the next.
binMax = binMid
start := int(math.Max(1, float64(loc-binMid+1)))
finish := int(math.Min(float64(loc+binMid), float64(len(text))) + float64(len(pattern)))
rd := make([]int, finish+2)
rd[finish+1] = (1 << uint(d)) - 1
for j := finish; j >= start; j-- {
var charMatch int
if len(text) <= j-1 {
// Out of range.
charMatch = 0
} else if _, ok := s[text[j-1]]; !ok {
charMatch = 0
} else {
charMatch = s[text[j-1]]
}
if d == 0 {
// First pass: exact match.
rd[j] = ((rd[j+1] << 1) | 1) & charMatch
} else {
// Subsequent passes: fuzzy match.
rd[j] = ((rd[j+1]<<1)|1)&charMatch | (((lastRd[j+1] | lastRd[j]) << 1) | 1) | lastRd[j+1]
}
if (rd[j] & matchmask) != 0 {
score := dmp.matchBitapScore(d, j-1, loc, pattern)
// This match will almost certainly be better than any existing match. But check anyway.
if score <= scoreThreshold {
// Told you so.
scoreThreshold = score
bestLoc = j - 1
if bestLoc > loc {
// When passing loc, don't exceed our current distance from loc.
start = int(math.Max(1, float64(2*loc-bestLoc)))
} else {
// Already passed loc, downhill from here on in.
break
}
}
}
}
if dmp.matchBitapScore(d+1, loc, loc, pattern) > scoreThreshold {
// No hope for a (better) match at greater error levels.
break
}
lastRd = rd
}
return bestLoc
}
// matchBitapScore computes and returns the score for a match with e errors and x location.
func (dmp *DiffMatchPatch) matchBitapScore(e, x, loc int, pattern string) float64 {
accuracy := float64(e) / float64(len(pattern))
proximity := math.Abs(float64(loc - x))
if dmp.MatchDistance == 0 {
// Dodge divide by zero error.
if proximity == 0 {
return accuracy
}
return 1.0
}
return accuracy + (proximity / float64(dmp.MatchDistance))
}
// MatchAlphabet initialises the alphabet for the Bitap algorithm.
func (dmp *DiffMatchPatch) MatchAlphabet(pattern string) map[byte]int {
s := map[byte]int{}
charPattern := []byte(pattern)
for _, c := range charPattern {
_, ok := s[c]
if !ok {
s[c] = 0
}
}
i := 0
for _, c := range charPattern {
value := s[c] | int(uint(1)<<uint((len(pattern)-i-1)))
s[c] = value
i++
}
return s
}

View File

@ -0,0 +1,23 @@
// Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/
package diffmatchpatch
func min(x, y int) int {
if x < y {
return x
}
return y
}
func max(x, y int) int {
if x > y {
return x
}
return y
}

View File

@ -0,0 +1,17 @@
// Code generated by "stringer -type=Operation -trimprefix=Diff"; DO NOT EDIT.
package diffmatchpatch
import "fmt"
const _Operation_name = "DeleteEqualInsert"
var _Operation_index = [...]uint8{0, 6, 11, 17}
func (i Operation) String() string {
i -= -1
if i < 0 || i >= Operation(len(_Operation_index)-1) {
return fmt.Sprintf("Operation(%d)", i+-1)
}
return _Operation_name[_Operation_index[i]:_Operation_index[i+1]]
}

556
vendor/github.com/sergi/go-diff/diffmatchpatch/patch.go generated vendored Normal file
View File

@ -0,0 +1,556 @@
// Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/
package diffmatchpatch
import (
"bytes"
"errors"
"math"
"net/url"
"regexp"
"strconv"
"strings"
)
// Patch represents one patch operation.
type Patch struct {
diffs []Diff
Start1 int
Start2 int
Length1 int
Length2 int
}
// String emulates GNU diff's format.
// Header: @@ -382,8 +481,9 @@
// Indices are printed as 1-based, not 0-based.
func (p *Patch) String() string {
var coords1, coords2 string
if p.Length1 == 0 {
coords1 = strconv.Itoa(p.Start1) + ",0"
} else if p.Length1 == 1 {
coords1 = strconv.Itoa(p.Start1 + 1)
} else {
coords1 = strconv.Itoa(p.Start1+1) + "," + strconv.Itoa(p.Length1)
}
if p.Length2 == 0 {
coords2 = strconv.Itoa(p.Start2) + ",0"
} else if p.Length2 == 1 {
coords2 = strconv.Itoa(p.Start2 + 1)
} else {
coords2 = strconv.Itoa(p.Start2+1) + "," + strconv.Itoa(p.Length2)
}
var text bytes.Buffer
_, _ = text.WriteString("@@ -" + coords1 + " +" + coords2 + " @@\n")
// Escape the body of the patch with %xx notation.
for _, aDiff := range p.diffs {
switch aDiff.Type {
case DiffInsert:
_, _ = text.WriteString("+")
case DiffDelete:
_, _ = text.WriteString("-")
case DiffEqual:
_, _ = text.WriteString(" ")
}
_, _ = text.WriteString(strings.Replace(url.QueryEscape(aDiff.Text), "+", " ", -1))
_, _ = text.WriteString("\n")
}
return unescaper.Replace(text.String())
}
// PatchAddContext increases the context until it is unique, but doesn't let the pattern expand beyond MatchMaxBits.
func (dmp *DiffMatchPatch) PatchAddContext(patch Patch, text string) Patch {
if len(text) == 0 {
return patch
}
pattern := text[patch.Start2 : patch.Start2+patch.Length1]
padding := 0
// Look for the first and last matches of pattern in text. If two different matches are found, increase the pattern length.
for strings.Index(text, pattern) != strings.LastIndex(text, pattern) &&
len(pattern) < dmp.MatchMaxBits-2*dmp.PatchMargin {
padding += dmp.PatchMargin
maxStart := max(0, patch.Start2-padding)
minEnd := min(len(text), patch.Start2+patch.Length1+padding)
pattern = text[maxStart:minEnd]
}
// Add one chunk for good luck.
padding += dmp.PatchMargin
// Add the prefix.
prefix := text[max(0, patch.Start2-padding):patch.Start2]
if len(prefix) != 0 {
patch.diffs = append([]Diff{Diff{DiffEqual, prefix}}, patch.diffs...)
}
// Add the suffix.
suffix := text[patch.Start2+patch.Length1 : min(len(text), patch.Start2+patch.Length1+padding)]
if len(suffix) != 0 {
patch.diffs = append(patch.diffs, Diff{DiffEqual, suffix})
}
// Roll back the start points.
patch.Start1 -= len(prefix)
patch.Start2 -= len(prefix)
// Extend the lengths.
patch.Length1 += len(prefix) + len(suffix)
patch.Length2 += len(prefix) + len(suffix)
return patch
}
// PatchMake computes a list of patches.
func (dmp *DiffMatchPatch) PatchMake(opt ...interface{}) []Patch {
if len(opt) == 1 {
diffs, _ := opt[0].([]Diff)
text1 := dmp.DiffText1(diffs)
return dmp.PatchMake(text1, diffs)
} else if len(opt) == 2 {
text1 := opt[0].(string)
switch t := opt[1].(type) {
case string:
diffs := dmp.DiffMain(text1, t, true)
if len(diffs) > 2 {
diffs = dmp.DiffCleanupSemantic(diffs)
diffs = dmp.DiffCleanupEfficiency(diffs)
}
return dmp.PatchMake(text1, diffs)
case []Diff:
return dmp.patchMake2(text1, t)
}
} else if len(opt) == 3 {
return dmp.PatchMake(opt[0], opt[2])
}
return []Patch{}
}
// patchMake2 computes a list of patches to turn text1 into text2.
// text2 is not provided, diffs are the delta between text1 and text2.
func (dmp *DiffMatchPatch) patchMake2(text1 string, diffs []Diff) []Patch {
// Check for null inputs not needed since null can't be passed in C#.
patches := []Patch{}
if len(diffs) == 0 {
return patches // Get rid of the null case.
}
patch := Patch{}
charCount1 := 0 // Number of characters into the text1 string.
charCount2 := 0 // Number of characters into the text2 string.
// Start with text1 (prepatchText) and apply the diffs until we arrive at text2 (postpatchText). We recreate the patches one by one to determine context info.
prepatchText := text1
postpatchText := text1
for i, aDiff := range diffs {
if len(patch.diffs) == 0 && aDiff.Type != DiffEqual {
// A new patch starts here.
patch.Start1 = charCount1
patch.Start2 = charCount2
}
switch aDiff.Type {
case DiffInsert:
patch.diffs = append(patch.diffs, aDiff)
patch.Length2 += len(aDiff.Text)
postpatchText = postpatchText[:charCount2] +
aDiff.Text + postpatchText[charCount2:]
case DiffDelete:
patch.Length1 += len(aDiff.Text)
patch.diffs = append(patch.diffs, aDiff)
postpatchText = postpatchText[:charCount2] + postpatchText[charCount2+len(aDiff.Text):]
case DiffEqual:
if len(aDiff.Text) <= 2*dmp.PatchMargin &&
len(patch.diffs) != 0 && i != len(diffs)-1 {
// Small equality inside a patch.
patch.diffs = append(patch.diffs, aDiff)
patch.Length1 += len(aDiff.Text)
patch.Length2 += len(aDiff.Text)
}
if len(aDiff.Text) >= 2*dmp.PatchMargin {
// Time for a new patch.
if len(patch.diffs) != 0 {
patch = dmp.PatchAddContext(patch, prepatchText)
patches = append(patches, patch)
patch = Patch{}
// Unlike Unidiff, our patch lists have a rolling context. http://code.google.com/p/google-diff-match-patch/wiki/Unidiff Update prepatch text & pos to reflect the application of the just completed patch.
prepatchText = postpatchText
charCount1 = charCount2
}
}
}
// Update the current character count.
if aDiff.Type != DiffInsert {
charCount1 += len(aDiff.Text)
}
if aDiff.Type != DiffDelete {
charCount2 += len(aDiff.Text)
}
}
// Pick up the leftover patch if not empty.
if len(patch.diffs) != 0 {
patch = dmp.PatchAddContext(patch, prepatchText)
patches = append(patches, patch)
}
return patches
}
// PatchDeepCopy returns an array that is identical to a given an array of patches.
func (dmp *DiffMatchPatch) PatchDeepCopy(patches []Patch) []Patch {
patchesCopy := []Patch{}
for _, aPatch := range patches {
patchCopy := Patch{}
for _, aDiff := range aPatch.diffs {
patchCopy.diffs = append(patchCopy.diffs, Diff{
aDiff.Type,
aDiff.Text,
})
}
patchCopy.Start1 = aPatch.Start1
patchCopy.Start2 = aPatch.Start2
patchCopy.Length1 = aPatch.Length1
patchCopy.Length2 = aPatch.Length2
patchesCopy = append(patchesCopy, patchCopy)
}
return patchesCopy
}
// PatchApply merges a set of patches onto the text. Returns a patched text, as well as an array of true/false values indicating which patches were applied.
func (dmp *DiffMatchPatch) PatchApply(patches []Patch, text string) (string, []bool) {
if len(patches) == 0 {
return text, []bool{}
}
// Deep copy the patches so that no changes are made to originals.
patches = dmp.PatchDeepCopy(patches)
nullPadding := dmp.PatchAddPadding(patches)
text = nullPadding + text + nullPadding
patches = dmp.PatchSplitMax(patches)
x := 0
// delta keeps track of the offset between the expected and actual location of the previous patch. If there are patches expected at positions 10 and 20, but the first patch was found at 12, delta is 2 and the second patch has an effective expected position of 22.
delta := 0
results := make([]bool, len(patches))
for _, aPatch := range patches {
expectedLoc := aPatch.Start2 + delta
text1 := dmp.DiffText1(aPatch.diffs)
var startLoc int
endLoc := -1
if len(text1) > dmp.MatchMaxBits {
// PatchSplitMax will only provide an oversized pattern in the case of a monster delete.
startLoc = dmp.MatchMain(text, text1[:dmp.MatchMaxBits], expectedLoc)
if startLoc != -1 {
endLoc = dmp.MatchMain(text,
text1[len(text1)-dmp.MatchMaxBits:], expectedLoc+len(text1)-dmp.MatchMaxBits)
if endLoc == -1 || startLoc >= endLoc {
// Can't find valid trailing context. Drop this patch.
startLoc = -1
}
}
} else {
startLoc = dmp.MatchMain(text, text1, expectedLoc)
}
if startLoc == -1 {
// No match found. :(
results[x] = false
// Subtract the delta for this failed patch from subsequent patches.
delta -= aPatch.Length2 - aPatch.Length1
} else {
// Found a match. :)
results[x] = true
delta = startLoc - expectedLoc
var text2 string
if endLoc == -1 {
text2 = text[startLoc:int(math.Min(float64(startLoc+len(text1)), float64(len(text))))]
} else {
text2 = text[startLoc:int(math.Min(float64(endLoc+dmp.MatchMaxBits), float64(len(text))))]
}
if text1 == text2 {
// Perfect match, just shove the Replacement text in.
text = text[:startLoc] + dmp.DiffText2(aPatch.diffs) + text[startLoc+len(text1):]
} else {
// Imperfect match. Run a diff to get a framework of equivalent indices.
diffs := dmp.DiffMain(text1, text2, false)
if len(text1) > dmp.MatchMaxBits && float64(dmp.DiffLevenshtein(diffs))/float64(len(text1)) > dmp.PatchDeleteThreshold {
// The end points match, but the content is unacceptably bad.
results[x] = false
} else {
diffs = dmp.DiffCleanupSemanticLossless(diffs)
index1 := 0
for _, aDiff := range aPatch.diffs {
if aDiff.Type != DiffEqual {
index2 := dmp.DiffXIndex(diffs, index1)
if aDiff.Type == DiffInsert {
// Insertion
text = text[:startLoc+index2] + aDiff.Text + text[startLoc+index2:]
} else if aDiff.Type == DiffDelete {
// Deletion
startIndex := startLoc + index2
text = text[:startIndex] +
text[startIndex+dmp.DiffXIndex(diffs, index1+len(aDiff.Text))-index2:]
}
}
if aDiff.Type != DiffDelete {
index1 += len(aDiff.Text)
}
}
}
}
}
x++
}
// Strip the padding off.
text = text[len(nullPadding) : len(nullPadding)+(len(text)-2*len(nullPadding))]
return text, results
}
// PatchAddPadding adds some padding on text start and end so that edges can match something.
// Intended to be called only from within patchApply.
func (dmp *DiffMatchPatch) PatchAddPadding(patches []Patch) string {
paddingLength := dmp.PatchMargin
nullPadding := ""
for x := 1; x <= paddingLength; x++ {
nullPadding += string(x)
}
// Bump all the patches forward.
for i := range patches {
patches[i].Start1 += paddingLength
patches[i].Start2 += paddingLength
}
// Add some padding on start of first diff.
if len(patches[0].diffs) == 0 || patches[0].diffs[0].Type != DiffEqual {
// Add nullPadding equality.
patches[0].diffs = append([]Diff{Diff{DiffEqual, nullPadding}}, patches[0].diffs...)
patches[0].Start1 -= paddingLength // Should be 0.
patches[0].Start2 -= paddingLength // Should be 0.
patches[0].Length1 += paddingLength
patches[0].Length2 += paddingLength
} else if paddingLength > len(patches[0].diffs[0].Text) {
// Grow first equality.
extraLength := paddingLength - len(patches[0].diffs[0].Text)
patches[0].diffs[0].Text = nullPadding[len(patches[0].diffs[0].Text):] + patches[0].diffs[0].Text
patches[0].Start1 -= extraLength
patches[0].Start2 -= extraLength
patches[0].Length1 += extraLength
patches[0].Length2 += extraLength
}
// Add some padding on end of last diff.
last := len(patches) - 1
if len(patches[last].diffs) == 0 || patches[last].diffs[len(patches[last].diffs)-1].Type != DiffEqual {
// Add nullPadding equality.
patches[last].diffs = append(patches[last].diffs, Diff{DiffEqual, nullPadding})
patches[last].Length1 += paddingLength
patches[last].Length2 += paddingLength
} else if paddingLength > len(patches[last].diffs[len(patches[last].diffs)-1].Text) {
// Grow last equality.
lastDiff := patches[last].diffs[len(patches[last].diffs)-1]
extraLength := paddingLength - len(lastDiff.Text)
patches[last].diffs[len(patches[last].diffs)-1].Text += nullPadding[:extraLength]
patches[last].Length1 += extraLength
patches[last].Length2 += extraLength
}
return nullPadding
}
// PatchSplitMax looks through the patches and breaks up any which are longer than the maximum limit of the match algorithm.
// Intended to be called only from within patchApply.
func (dmp *DiffMatchPatch) PatchSplitMax(patches []Patch) []Patch {
patchSize := dmp.MatchMaxBits
for x := 0; x < len(patches); x++ {
if patches[x].Length1 <= patchSize {
continue
}
bigpatch := patches[x]
// Remove the big old patch.
patches = append(patches[:x], patches[x+1:]...)
x--
Start1 := bigpatch.Start1
Start2 := bigpatch.Start2
precontext := ""
for len(bigpatch.diffs) != 0 {
// Create one of several smaller patches.
patch := Patch{}
empty := true
patch.Start1 = Start1 - len(precontext)
patch.Start2 = Start2 - len(precontext)
if len(precontext) != 0 {
patch.Length1 = len(precontext)
patch.Length2 = len(precontext)
patch.diffs = append(patch.diffs, Diff{DiffEqual, precontext})
}
for len(bigpatch.diffs) != 0 && patch.Length1 < patchSize-dmp.PatchMargin {
diffType := bigpatch.diffs[0].Type
diffText := bigpatch.diffs[0].Text
if diffType == DiffInsert {
// Insertions are harmless.
patch.Length2 += len(diffText)
Start2 += len(diffText)
patch.diffs = append(patch.diffs, bigpatch.diffs[0])
bigpatch.diffs = bigpatch.diffs[1:]
empty = false
} else if diffType == DiffDelete && len(patch.diffs) == 1 && patch.diffs[0].Type == DiffEqual && len(diffText) > 2*patchSize {
// This is a large deletion. Let it pass in one chunk.
patch.Length1 += len(diffText)
Start1 += len(diffText)
empty = false
patch.diffs = append(patch.diffs, Diff{diffType, diffText})
bigpatch.diffs = bigpatch.diffs[1:]
} else {
// Deletion or equality. Only take as much as we can stomach.
diffText = diffText[:min(len(diffText), patchSize-patch.Length1-dmp.PatchMargin)]
patch.Length1 += len(diffText)
Start1 += len(diffText)
if diffType == DiffEqual {
patch.Length2 += len(diffText)
Start2 += len(diffText)
} else {
empty = false
}
patch.diffs = append(patch.diffs, Diff{diffType, diffText})
if diffText == bigpatch.diffs[0].Text {
bigpatch.diffs = bigpatch.diffs[1:]
} else {
bigpatch.diffs[0].Text =
bigpatch.diffs[0].Text[len(diffText):]
}
}
}
// Compute the head context for the next patch.
precontext = dmp.DiffText2(patch.diffs)
precontext = precontext[max(0, len(precontext)-dmp.PatchMargin):]
postcontext := ""
// Append the end context for this patch.
if len(dmp.DiffText1(bigpatch.diffs)) > dmp.PatchMargin {
postcontext = dmp.DiffText1(bigpatch.diffs)[:dmp.PatchMargin]
} else {
postcontext = dmp.DiffText1(bigpatch.diffs)
}
if len(postcontext) != 0 {
patch.Length1 += len(postcontext)
patch.Length2 += len(postcontext)
if len(patch.diffs) != 0 && patch.diffs[len(patch.diffs)-1].Type == DiffEqual {
patch.diffs[len(patch.diffs)-1].Text += postcontext
} else {
patch.diffs = append(patch.diffs, Diff{DiffEqual, postcontext})
}
}
if !empty {
x++
patches = append(patches[:x], append([]Patch{patch}, patches[x:]...)...)
}
}
}
return patches
}
// PatchToText takes a list of patches and returns a textual representation.
func (dmp *DiffMatchPatch) PatchToText(patches []Patch) string {
var text bytes.Buffer
for _, aPatch := range patches {
_, _ = text.WriteString(aPatch.String())
}
return text.String()
}
// PatchFromText parses a textual representation of patches and returns a List of Patch objects.
func (dmp *DiffMatchPatch) PatchFromText(textline string) ([]Patch, error) {
patches := []Patch{}
if len(textline) == 0 {
return patches, nil
}
text := strings.Split(textline, "\n")
textPointer := 0
patchHeader := regexp.MustCompile("^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$")
var patch Patch
var sign uint8
var line string
for textPointer < len(text) {
if !patchHeader.MatchString(text[textPointer]) {
return patches, errors.New("Invalid patch string: " + text[textPointer])
}
patch = Patch{}
m := patchHeader.FindStringSubmatch(text[textPointer])
patch.Start1, _ = strconv.Atoi(m[1])
if len(m[2]) == 0 {
patch.Start1--
patch.Length1 = 1
} else if m[2] == "0" {
patch.Length1 = 0
} else {
patch.Start1--
patch.Length1, _ = strconv.Atoi(m[2])
}
patch.Start2, _ = strconv.Atoi(m[3])
if len(m[4]) == 0 {
patch.Start2--
patch.Length2 = 1
} else if m[4] == "0" {
patch.Length2 = 0
} else {
patch.Start2--
patch.Length2, _ = strconv.Atoi(m[4])
}
textPointer++
for textPointer < len(text) {
if len(text[textPointer]) > 0 {
sign = text[textPointer][0]
} else {
textPointer++
continue
}
line = text[textPointer][1:]
line = strings.Replace(line, "+", "%2b", -1)
line, _ = url.QueryUnescape(line)
if sign == '-' {
// Deletion.
patch.diffs = append(patch.diffs, Diff{DiffDelete, line})
} else if sign == '+' {
// Insertion.
patch.diffs = append(patch.diffs, Diff{DiffInsert, line})
} else if sign == ' ' {
// Minor equality.
patch.diffs = append(patch.diffs, Diff{DiffEqual, line})
} else if sign == '@' {
// Start of next patch.
break
} else {
// WTF?
return patches, errors.New("Invalid patch mode '" + string(sign) + "' in: " + string(line))
}
textPointer++
}
patches = append(patches, patch)
}
return patches, nil
}

View File

@ -0,0 +1,88 @@
// Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/
package diffmatchpatch
import (
"strings"
"unicode/utf8"
)
// unescaper unescapes selected chars for compatibility with JavaScript's encodeURI.
// In speed critical applications this could be dropped since the receiving application will certainly decode these fine. Note that this function is case-sensitive. Thus "%3F" would not be unescaped. But this is ok because it is only called with the output of HttpUtility.UrlEncode which returns lowercase hex. Example: "%3f" -> "?", "%24" -> "$", etc.
var unescaper = strings.NewReplacer(
"%21", "!", "%7E", "~", "%27", "'",
"%28", "(", "%29", ")", "%3B", ";",
"%2F", "/", "%3F", "?", "%3A", ":",
"%40", "@", "%26", "&", "%3D", "=",
"%2B", "+", "%24", "$", "%2C", ",", "%23", "#", "%2A", "*")
// indexOf returns the first index of pattern in str, starting at str[i].
func indexOf(str string, pattern string, i int) int {
if i > len(str)-1 {
return -1
}
if i <= 0 {
return strings.Index(str, pattern)
}
ind := strings.Index(str[i:], pattern)
if ind == -1 {
return -1
}
return ind + i
}
// lastIndexOf returns the last index of pattern in str, starting at str[i].
func lastIndexOf(str string, pattern string, i int) int {
if i < 0 {
return -1
}
if i >= len(str) {
return strings.LastIndex(str, pattern)
}
_, size := utf8.DecodeRuneInString(str[i:])
return strings.LastIndex(str[:i+size], pattern)
}
// runesIndexOf returns the index of pattern in target, starting at target[i].
func runesIndexOf(target, pattern []rune, i int) int {
if i > len(target)-1 {
return -1
}
if i <= 0 {
return runesIndex(target, pattern)
}
ind := runesIndex(target[i:], pattern)
if ind == -1 {
return -1
}
return ind + i
}
func runesEqual(r1, r2 []rune) bool {
if len(r1) != len(r2) {
return false
}
for i, c := range r1 {
if c != r2[i] {
return false
}
}
return true
}
// runesIndex is the equivalent of strings.Index for rune slices.
func runesIndex(r1, r2 []rune) int {
last := len(r1) - len(r2)
for i := 0; i <= last; i++ {
if runesEqual(r1[i:i+len(r2)], r2) {
return i
}
}
return -1
}

14
vendor/modules.txt vendored
View File

@ -31,6 +31,9 @@ github.com/DisposaBoy/JsonConfigReader
# github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d
## explicit
github.com/TomOnTime/utfutil
# github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883
## explicit
github.com/andreyvit/diff
# github.com/aws/aws-sdk-go v1.29.1
## explicit
github.com/aws/aws-sdk-go/aws
@ -135,6 +138,8 @@ github.com/golang/protobuf/ptypes/duration
github.com/golang/protobuf/ptypes/timestamp
# github.com/golang/snappy v0.0.1
github.com/golang/snappy
# github.com/google/go-cmp v0.4.0
## explicit
# github.com/google/go-github v17.0.0+incompatible
## explicit
github.com/google/go-github/github
@ -204,8 +209,6 @@ github.com/jmespath/go-jmespath
# github.com/kolo/xmlrpc v0.0.0-20150413191830-0826b98aaa29
## explicit
github.com/kolo/xmlrpc
# github.com/kr/pretty v0.1.0
## explicit
# github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8
## explicit
# github.com/miekg/dns v1.1.27
@ -265,6 +268,9 @@ github.com/robertkrimen/otto/underscore
github.com/russross/blackfriday/v2
# github.com/ryanuber/go-glob v1.0.0
github.com/ryanuber/go-glob
# github.com/sergi/go-diff v1.1.0
## explicit
github.com/sergi/go-diff/diffmatchpatch
# github.com/shurcooL/sanitized_anchor_name v1.0.0
github.com/shurcooL/sanitized_anchor_name
# github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a
@ -330,7 +336,6 @@ golang.org/x/crypto/pbkdf2
golang.org/x/crypto/pkcs12
golang.org/x/crypto/pkcs12/internal/rc2
# golang.org/x/mod v0.2.0
## explicit
golang.org/x/mod/module
golang.org/x/mod/semver
# golang.org/x/net v0.0.0-20200226121028-0de0cce0169b
@ -383,7 +388,6 @@ golang.org/x/tools/internal/gocommand
golang.org/x/tools/internal/gopathwalk
golang.org/x/tools/internal/imports
# golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543
## explicit
golang.org/x/xerrors
golang.org/x/xerrors/internal
# google.golang.org/api v0.17.0
@ -448,8 +452,6 @@ google.golang.org/grpc/serviceconfig
google.golang.org/grpc/stats
google.golang.org/grpc/status
google.golang.org/grpc/tap
# gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
## explicit
# gopkg.in/ini.v1 v1.42.0
## explicit
gopkg.in/ini.v1