# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.10.0] - 2022-03-27
### changed
- duration of an SPF policy evaluation is now in milliseconds, rather than seconds
- duration is now also logged at info level for each SPF record evaluated
- each SPF txt record's length is logged at the info level & included in spf report section
### fixed
- `-r d` report now outputs valid entries first (not all), followed by problematic dns entries
- so no more double entries in the reporting output
## [0.9.2] - 2022-01-08
### fixed
- csv output now escapes quotes in a string value
### changed
- switched to testsuite [rfc7208-tests.yml](http://www.open-spf.org/svn/project/test-suite/rfc7208-tests-yml/) which appears to be newer and has
more tests.
- in case of a syntax error, also log the verdict on stderr
## [0.9.1] - 2022-01-07
### fixed
- digraph, links from include/redirect's with macros now link to the expanded name
- digraph, macro expansion of nested records should use the original ip and sender parts
### changed
- digraph, include local part of sender in evaluation result on top of the graph
- digraph, use the DNS cache when generating a digraph for an SPF policy
- digraph, include/redirect to a non-SPF record should say so (not just be empty)
## [0.9.0] - 2022-01-03
### added
- `-b`, `--batch N` flag to run Nx SPF evaluations concurrently when in batch mode
- `-T`, `--timeout N` flag to set the timeout for DNS queries
### changed
- also log the final verdict, not just the intermediate verdicts
## [0.8.1] - 2021-12-26
### fixed
- cacheing a DNS response of :servfail, should not include the entire dns_msg as well
- darn! should've checked this when refactoring the Spf.DNS module
## [0.8.0] - 2021-12-26
### added
- info message when an SPF record is tracking sender IP, EHLO and/or sender IP
validated name.
### changed
- dot representation of an SPF record only shows the AST created
- "v=spf1" was added automatically since it is not part of the AST
- but this was confusing in cases where no SPF record was found
- when generating zonedata for rfc7208's testsuite omit CNAME and SOA records
- they're not used in the testsuite anyway
- specifying zonedata to pre-load, dropped the `domain error` format
- records are no longer autogenerated
- this was actually logic from rfc7208's testsuite
- not needed by `Spfcheck` itself
### fixed
- when updating the DNS cache with an error, it now replaces any existing rrdata
- queries for cached domain names with circular CNAME references, now yield :servfail
- dot file generation does not choke when no SPF records were found
- reporting on DNS data gathered now outputs any soa records properly
- authority search ignores CNAME results to find real SOA for given domain
- the real SOA being the zone that contains the record for original search name
## [v0.7.1] - 2021-12-21
### fixed
- loop detection (had some false positives)
## [v0.7.0] - 2021-12-18
### added
- syntax error messages now also list reasons for the errors
- warning if ip4/ip6 mechanism actually mask host bits (i.e. address != this-network)
- warning if exists' domain is same as current SPF domain (which is unusual)
- warning if an unknown modifier has a mechanism name (an easy mistake)
### fixed
- leading zero's in ip4/6 prefix lengths is actually a syntax error
- empty macro-string in an *unknown* modifier is actually legal
- %{t} now expands to timestamp (UNIX epoch time)
- unknown modifiers cannot use c,r,t-macros, they're only valid in an explain-string
### changed
- removed dependency on nimble_parsec
- DNS MECH counter shown at info level (was debug level)
- logs use uniform format: "term - message" format as much as possible
- redundant entry message now lists only the uniquely overlapping terms
## [v0.6.0] - 2021-12-01
### added
- report option "g" to include a graphviz di-graph of the SPF policy
- warning when default '+'-qualifier is used in mechanisms
### changed
- a less confusing redundant-warning replaces the multiple-entries warning
- inconsistent warnings now report only the terms inconsistent with current term
- more consistent formatting of logging and verdict's reason
## [v0.5.0] - 2021-11-28
### added
- `--nameserver` flag to customize which nameservers to use via IPv4 and/or IPv6 addresses
- `--author` flag to set author information in markdown metadata
- `--title` flag to set title information in markdown metadata
## [v0.4.0] - 2021-11-27
### changed
- prefixes are stored on exact match, not longest prefix match
- multiple entries warning now means the exact same prefix was seen multiple times
### added
- unreachable-warning when new prefix is subnet of an existing supernet
- overlapping-warning when new prefix is supernet of an existing subnet
- inconsistent-warning for overlapping prefixes having different qualifiers
- notifications during context creation
## [v0.3.0] - 2021-11-26
### changed
- warning when exceeding 512 chars now shows offending SPF domain name
- "seen before"-warning changed into "multiple entries"-warning (less confusing)
- parser errors now correctly logged as :parse-errors instead of :eval-errors
### added
- warning about inconsistent qualifiers in case of multiple entries
- warning about mx used while domain has null MX record
- warning for superfluous prefix lengths (/32 resp. /128)
- warning for zero prefix lengths (/0)
## [v0.2.0] - 2021-11-21
### Changed
- verdict output includes owner domain and contact (also in csv-output)
- ipt logs show spf terms rather than their raw token
- logging to stderr now shows the domain in front, so redirecting stderr to a
log file means the messages can be related to the domain being checked at
that time.
- added warning when ?all or +all is used
### Fixed
- url for rfc7208 test suite
- use :dns (not :ipt) when logging dns additions to the cache
## [v0.1.1] - 2021-11-20
- Fix url for License badge
## [v0.1.0] - 2021-11-20
- Initial public version