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

Add support for TXT records with multiple strings (BIND, ROUTE53) (#293)

* BIND: Support TXT records with multiple strings (#289)
* ROUTE53: Add support for TXT records with multiple strings (#292)
This commit is contained in:
Tom Limoncelli
2018-01-04 19:19:35 -05:00
committed by GitHub
parent d051f51a59
commit de88bfe8b7
32 changed files with 489 additions and 184 deletions

View File

@@ -220,8 +220,32 @@ var TLSA = recordBuilder('TLSA', {
},
});
function isStringOrArray(x) {
return _.isString(x) || _.isArray(x);
}
// TXT(name,target, recordModifiers...)
var TXT = recordBuilder('TXT');
var TXT = recordBuilder("TXT", {
args: [["name", _.isString], ["target", isStringOrArray]],
transform: function(record, args, modifiers) {
record.name = args.name;
// Store the strings twice:
// .target is the first string
// .txtstrings is the individual strings.
// NOTE: If there are more than 1 string, providers should only access
// .txtstrings, thus it doesn't matter what we store in .target.
// However, by storing the first string there, it improves backwards
// compatibility when the len(array) == 1 and (intentionally) breaks
// broken providers early in the integration tests.
if (_.isString(args.target)) {
record.target = args.target;
record.txtstrings = [args.target];
} else {
record.target = args.target[0]
record.txtstrings = args.target;
}
}
});
// MX(name,priority,target, recordModifiers...)
var MX = recordBuilder('MX', {

View File

@@ -11,9 +11,10 @@
"type": "TXT",
"name": "_dmarc",
"target": "v=DMARC1\\; p=reject\\; sp=reject\\; pct=100\\; rua=mailto:xx...@yyyy.com\\; ruf=mailto:xx...@yyyy.com\\; fo=1",
"ttl": 300
"ttl": 300,
"txtstrings":["v=DMARC1\\; p=reject\\; sp=reject\\; pct=100\\; rua=mailto:xx...@yyyy.com\\; ruf=mailto:xx...@yyyy.com\\; fo=1"]
}
]
}
]
}
}

View File

@@ -0,0 +1,6 @@
D("foo.com","none"
, TXT("@","simple")
, TXT("@",["one"])
, TXT("@",["bonie", "clyde"])
, TXT("@",["straw", "wood", "brick"])
);

View File

@@ -0,0 +1,37 @@
{
"registrars": [],
"dns_providers": [],
"domains": [
{
"name": "foo.com",
"registrar": "none",
"dnsProviders": {},
"records": [
{
"type": "TXT",
"name": "@",
"target": "simple",
"txtstrings": [ "simple" ]
},
{
"type": "TXT",
"name": "@",
"target": "one",
"txtstrings": [ "one" ]
},
{
"type": "TXT",
"name": "@",
"target": "bonie",
"txtstrings": [ "bonie", "clyde" ]
},
{
"type": "TXT",
"name": "@",
"target": "straw",
"txtstrings": [ "straw", "wood", "brick" ]
}
]
}
]
}

View File

@@ -192,83 +192,88 @@ var _escData = map[string]*_escFile{
"/helpers.js": {
local: "pkg/js/helpers.js",
size: 16222,
size: 17122,
modtime: 0,
compressed: `
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
`,
},