4 (* Inifile.comment is saner than Util.comment regarding spacing after the # *)
5 let comment = Inifile.comment "#" "#"
10 The Dataset spec is so broad as to encompass any string (particularly the
11 degenerate 'single literal string' case of a comma separated list with
12 only one item). So treat them as 'String' types, and it's up to the user to
13 format them correctly. Given that many of the variants include file paths
14 etc, it's impossible to validate for 'correctness' anyway
16 let stringkv_rx = /ADSPAction|AuthservID|AutoRestartRate|BaseDirectory/
17 | /BogusKey|BogusPolicy|Canonicalization|ChangeRootDirectory/
18 | /DiagnosticDirectory|FinalPolicyScript|IdentityHeader|Include|KeyFile/
19 | /LDAPAuthMechanism|LDAPAuthName|LDAPAuthRealm|LDAPAuthUser/
20 | /LDAPBindPassword|LDAPBindUser|Minimum|Mode|MTACommand|Nameservers/
21 | /On-BadSignature|On-Default|On-DNSError|On-InternalError|On-KeyNotFound/
22 | /On-NoSignature|On-PolicyError|On-Security|On-SignatureError|PidFile/
23 | /ReplaceRules|ReportAddress|ReportBccAddress|ResolverConfiguration/
24 | /ScreenPolicyScript|SelectCanonicalizationHeader|Selector|SelectorHeader/
25 | /SenderMacro|SetupPolicyScript|SignatureAlgorithm|SMTPURI|Socket/
26 | /StatisticsName|StatisticsPrefix|SyslogFacility|TemporaryDirectory/
27 | /TestPublicKeys|TrustAnchorFile|UnprotectedKey|UnprotectedPolicy|UserID/
28 | /VBR-Certifiers|VBR-PurgeFields|VBR-TrustedCertifiers|VBR-Type/
29 | /BodyLengthDB|Domain|DontSignMailTo|ExemptDomains|ExternalIgnoreList/
30 | /InternalHosts|KeyTable|LocalADSP|MacroList|MTA|MustBeSigned|OmitHeaders/
31 | /OversignHeaders|PeerList|POPDBFile|RemoveARFrom|ResignMailTo/
32 | /SenderHeaders|SignHeaders|SigningTable|TrustSignaturesFrom/
33 let stringkv = key stringkv_rx .
34 del /[ \t]+/ " " . store /[0-9a-zA-Z\/][^ \t\n#]+/ . eol
36 let integerkv_rx = /AutoRestartCount|ClockDrift|DNSTimeout/
37 | /LDAPKeepaliveIdle|LDAPKeepaliveInterval|LDAPKeepaliveProbes|LDAPTimeout/
38 | /MaximumHeaders|MaximumSignaturesToVerify|MaximumSignedBytes|MilterDebug/
39 | /MinimumKeyBits|SignatureTTL|UMask/
40 let integerkv = key integerkv_rx .
41 del /[ \t]+/ " " . store /[0-9]+/ . eol
43 let booleankv_rx = /AddAllSignatureResults|ADSPNoSuchDomain/
44 | /AllowSHA1Only|AlwaysAddARHeader|AuthservIDWithJobID|AutoRestart/
45 | /Background|CaptureUnknownErrors|Diagnostics|DisableADSP/
46 | /DisableCryptoInit|DNSConnect|FixCRLF|IdentityHeaderRemove/
47 | /LDAPDisableCache|LDAPSoftStart|LDAPUseTLS|MultipleSignatures|NoHeaderB/
48 | /Quarantine|QueryCache|RemoveARAll|RemoveOldSignatures|ResolverTracing/
49 | /SelectorHeaderRemove|SendADSPReports|SendReports|SoftwareHeader/
50 | /StrictHeaders|StrictTestMode|SubDomains|Syslog|SyslogSuccess/
51 | /VBR-TrustedCertifiersOnly|WeakSyntaxChecks|LogWhy/
52 let booleankv = key booleankv_rx .
53 del /[ \t]+/ " " . store /([Tt]rue|[Ff]alse|[Yy]es|[Nn]o|1|0)/ . eol
55 let entry = [ integerkv ] | [ booleankv ] | [ stringkv ]
57 let lns = (comment | empty | entry)*
59 let xfm = transform lns (incl "/etc/opendkim.conf")