CHANGELOG.md

# 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