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

Make it possible to disable the raw SPF optimizer debug record (#795)

Open to other configuration opens for how best to make this optional. Or
potentially making this an opt in configuration item which would be a
breaking change.

The main reason that someone would want to disable this is if their raw
SPF record goes over the 255 characters. This is potentially another
place that could get some multi string support. But as it is only used
for debugging purposes it seems like there should be a way to outright
disable it too.
This commit is contained in:
Michael Russell
2020-07-31 16:40:22 +02:00
committed by GitHub
parent 4211cf1dc0
commit 237c573c2a
4 changed files with 120 additions and 109 deletions

View File

@@ -320,7 +320,9 @@
<i class="fa fa-check text-success" aria-hidden="true"></i> <i class="fa fa-check text-success" aria-hidden="true"></i>
</td> </td>
<td><i class="fa fa-minus dim"></i></td> <td><i class="fa fa-minus dim"></i></td>
<td><i class="fa fa-minus dim"></i></td> <td class="success">
<i class="fa fa-check text-success" aria-hidden="true"></i>
</td>
<td><i class="fa fa-minus dim"></i></td> <td><i class="fa fa-minus dim"></i></td>
<td><i class="fa fa-minus dim"></i></td> <td><i class="fa fa-minus dim"></i></td>
<td class="danger"> <td class="danger">
@@ -493,7 +495,9 @@
<td class="danger"> <td class="danger">
<i class="fa fa-times text-danger" aria-hidden="true"></i> <i class="fa fa-times text-danger" aria-hidden="true"></i>
</td> </td>
<td><i class="fa fa-minus dim"></i></td> <td class="success">
<i class="fa fa-check text-success" aria-hidden="true"></i>
</td>
<td class="success"> <td class="success">
<i class="fa fa-check text-success" aria-hidden="true"></i> <i class="fa fa-check text-success" aria-hidden="true"></i>
</td> </td>
@@ -772,7 +776,9 @@
<td class="success"> <td class="success">
<i class="fa fa-check text-success" aria-hidden="true"></i> <i class="fa fa-check text-success" aria-hidden="true"></i>
</td> </td>
<td><i class="fa fa-minus dim"></i></td> <td class="danger">
<i class="fa fa-times text-danger" aria-hidden="true"></i>
</td>
<td><i class="fa fa-minus dim"></i></td> <td><i class="fa fa-minus dim"></i></td>
<td><i class="fa fa-minus dim"></i></td> <td><i class="fa fa-minus dim"></i></td>
<td><i class="fa fa-minus dim"></i></td> <td><i class="fa fa-minus dim"></i></td>

View File

@@ -103,7 +103,7 @@ The parameters are:
* `label:` The label of the first TXT record. (Optional. Default: `"@"`) * `label:` The label of the first TXT record. (Optional. Default: `"@"`)
* `overflow:` If set, SPF strings longer than 255 chars will be split into multiple TXT records. The value of this setting determines the template for what the additional labels will be named. If not set, no splitting will occur and dnscontrol may generate TXT strings that are too long. * `overflow:` If set, SPF strings longer than 255 chars will be split into multiple TXT records. The value of this setting determines the template for what the additional labels will be named. If not set, no splitting will occur and dnscontrol may generate TXT strings that are too long.
* `overhead1:` "Overhead for the 1st TXT record". When calculating the max length of each TXT record, reduce the maximum for the first TXT record in the chain by this amount. * `overhead1:` "Overhead for the 1st TXT record". When calculating the max length of each TXT record, reduce the maximum for the first TXT record in the chain by this amount.
* `raw:` The label of the unaltered SPF settings. (Optional. Default: `"_rawspf"`) * `raw:` The label of the unaltered SPF settings. Setting to an empty string `''` will disable this. (Optional. Default: `"_rawspf"`)
* `ttl:` This allows setting a specific TTL on this SPF record. (Optional. Default: using default record TTL) * `ttl:` This allows setting a specific TTL on this SPF record. (Optional. Default: using default record TTL)
* `parts:` The individual parts of the SPF settings. * `parts:` The individual parts of the SPF settings.
* `flatten:` Which includes should be inlined. For safety purposes the flattening is done on an opt-in basis. If `"*"` is listed, all includes will be flattened... this might create more problems than is solves due to length limitations. * `flatten:` Which includes should be inlined. For safety purposes the flattening is done on an opt-in basis. If `"*"` is listed, all includes will be flattened... this might create more problems than is solves due to length limitations.

View File

@@ -741,7 +741,7 @@ function SPF_BUILDER(value) {
if (!value.label) { if (!value.label) {
value.label = '@'; value.label = '@';
} }
if (!value.raw) { if (!value.raw && value.raw !== '') {
value.raw = '_rawspf'; value.raw = '_rawspf';
} }
@@ -752,10 +752,13 @@ function SPF_BUILDER(value) {
// If flattening is requested, generate a TXT record with the raw SPF settings. // If flattening is requested, generate a TXT record with the raw SPF settings.
if (value.flatten && value.flatten.length > 0) { if (value.flatten && value.flatten.length > 0) {
p.flatten = value.flatten.join(','); p.flatten = value.flatten.join(',');
if (value.ttl) { // Only add the raw spf record if it isn't an empty string
r.push(TXT(value.raw, rawspf, TTL(value.ttl))); if (value.raw !== '') {
} else { if (value.ttl) {
r.push(TXT(value.raw, rawspf)); r.push(TXT(value.raw, rawspf, TTL(value.ttl)));
} else {
r.push(TXT(value.raw, rawspf));
}
} }
} }

View File

@@ -212,108 +212,110 @@ var _escData = map[string]*_escFile{
"/helpers.js": { "/helpers.js": {
name: "helpers.js", name: "helpers.js",
local: "pkg/js/helpers.js", local: "pkg/js/helpers.js",
size: 23595, size: 23999,
modtime: 0, modtime: 0,
compressed: ` compressed: `
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
uekrXAAA AtksCMFCEjovmdl+peXtlKej7jafRPUqcLdlsz+ExAoDbC1QxwAJTtX2/xMpFAgqCsXXLbnrdg932qbE
VxBmKdbziZO6E9bR2kTWHclYemMEx/84uzAXn8oHef968O5buN9w7Lyu+o+ziw6i5dM70aJIP47Jz8JA
HLx7V71rOGrNxjfsI0o9LMPrQYW04n5kjmRpjyUkwh0SClgL1N1FHwkW/zcAAP//ZNPGq79dAAA=
`, `,
}, },
} }