jarld checks the reverse DNS of the public zones' MX and SPF addresses as the internet sees it, every 6 hours (Exposure page, jarl exposure mail, jarl_mail_reverse_dns_ok). The Server options page, jarl option generated and GET /options/generated list what Jarl writes into named.conf by itself; stats.rate_limit_log turns off the query-errors logging. Option lists of three or more elements are shown one per line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
39 lines
1.8 KiB
Go
39 lines
1.8 KiB
Go
package namedconf
|
|
|
|
import "testing"
|
|
|
|
func TestFormatValue(t *testing.T) {
|
|
for _, c := range []struct{ name, value, want string }{
|
|
{"logging", `{ channel c { file "/var/log/named/x.log" versions 3; print-time yes; }; category default { c; }; }`,
|
|
// A short inner block stays on one line, as in named.conf.
|
|
"{\n\tchannel c { file \"/var/log/named/x.log\" versions 3; print-time yes; };\n\tcategory default { c; };\n}"},
|
|
{"allow-query", `{ allowed_clients; }`, `{ allowed_clients; }`}, // short: unchanged
|
|
{"directory", `"/var/cache/bind"`, `"/var/cache/bind"`},
|
|
{"logging", `{ broken`, `{ broken`}, // unparsable: as it is
|
|
} {
|
|
if got := FormatValue(c.name, c.value); got != c.want {
|
|
t.Errorf("FormatValue(%s, %q) =\n%s\nwant\n%s", c.name, c.value, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFormatValueList(t *testing.T) {
|
|
cases := []struct{ name, value, want string }{
|
|
{"allow-query", "{ homelab; localhost; 10.0.0.0/8; }", "{\n\thomelab;\n\tlocalhost;\n\t10.0.0.0/8;\n}"},
|
|
{"allow-query", "{ homelab; localhost; }", "{ homelab; localhost; }"}, // short: as it was
|
|
{"listen-on", "port 853 tls dot { 10.0.0.1; 10.0.0.2; 10.0.0.3; }", "port 853 tls dot {\n\t10.0.0.1;\n\t10.0.0.2;\n\t10.0.0.3;\n}"},
|
|
{"allow-transfer", "{ !10.0.0.9; key xfer; 10.0.0.0/8; }", "{\n\t!10.0.0.9;\n\tkey xfer;\n\t10.0.0.0/8;\n}"},
|
|
{"recursion", "yes", "yes"},
|
|
}
|
|
for _, c := range cases {
|
|
if got := FormatValueList(c.name, c.value, 3); got != c.want {
|
|
t.Errorf("%s %q:\n got %q\nwant %q", c.name, c.value, got, c.want)
|
|
}
|
|
}
|
|
// A nested block (rate-limit with exempt-clients) keeps FormatValue's layout.
|
|
v := "{ responses-per-second 10; log-only yes; exempt-clients { 192.0.2.1; 192.0.2.2; 192.0.2.3; }; }"
|
|
if got := FormatValueList("rate-limit", v, 3); got != FormatValue("rate-limit", v) {
|
|
t.Errorf("nested: %q", got)
|
|
}
|
|
}
|