Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge develop branch into master (Engine) #1412

Merged
merged 185 commits into from
Dec 9, 2024
Merged

Merge develop branch into master (Engine) #1412

merged 185 commits into from
Dec 9, 2024

Conversation

matsduf
Copy link
Contributor

@matsduf matsduf commented Dec 9, 2024

tgreenx and others added 30 commits May 14, 2024 17:31
This commit makes Engine able to follow CNAMEs when doing recursive lookups.
Currently CNAMEs will be followed when all of the following are true:
	- the response has RCODE "NoError"
	- the answer section of the response does not contain records of the queried type, but does contain at least one CNAME record for the query name
	- the answer section of the response does not contain multiple CNAME records with the same owner name
	- the final target of the CNAME record(s) chain has not been followed before
	- there are no records of the queried type with owner name as the final target of the CNAME record(s)

Three system, debug level messages are created: 'CNAME_LOOP_INNER', 'CNAME_LOOP_OUTER' and 'CNAME_MULTIPLE_FOR_NAME'.

Some test cases have been modified to account for this new behavior. Unitary tests have also been updated.
- Move CNAME resolution to a dedicated internal method 'Zonemaster::Engine::Recursor::_resolve_cname()'
- Various refactoring (renaming of variables, removal of unneeded code, etc)
- Update Test Cases code that relates to CNAME
- Add documentation for 'Zonemaster::Engine::Recursor::_resolve_cname()' and 'Zonemaster::Engine::Recursor::_recurse()'
- Update unit tests and unit tests data
- Add constants CNAME_MAX_RECORDS and CNAME_MAX_CHAIN_LENGTH
- Add message tags CNAME_START, CNAME_RECORDS_TOO_MANY, CNAME_RECORDS_CHAIN_BROKEN, CNAME_CHAIN_TOO_LONG, CNAME_FOLLOWED_IB, CNAME_FOLLOWED_OOB, CNAME_NO_MATCH
- Rename message tag CNAME_MULTIPLE_FOR_NAME to CNAME_RECORDS_MULTIPLE_FOR_NAME
- Add stopping conditions based on CNAME_MAX_RECORDS and CNAME_MAX_CHAIN_LENGTH
- Check that CNAME target is out of zone before making a new recursive lookup for that name
- Document further Zonemaster::Engine::Recursor::_recurse()
- Update unit tests
- Lower value of constant CNAME_MAX_RECORDS from 10 to 9
- Remove duplicates CNAME RRs
- Add message tag CNAME_RECORDS_DUPLICATES
- Adjust logging level of some message tags
- Refactoring
- Update documentation
- Update unit tests
- Rename CNAME_FOLLOWED_IB to CNAME_FOLLOWED_IN_ZONE and CNAME_FOLLOWED_OOB to CNAME_FOLLOWED_OUT_OF_ZONE
- Update documentation
This profile parameter was deprecated in 2020.1.

- Remove code
- Remove documentation
- Replace unitary tests from "asnroots" to "asn_db.style" and "asn_db.sources"
- Add documentation for "asn_db"
- Update documentation for "asn_db.style" and "asn_db.sources"
This commits fixes a functionality that might have never worked before. That is because a NXDOMAIN response is received either when querying a non-existent ASN lookup
source or when querying a non-existent name to an existing ASN lookup source. To distinguish between the two cases, the owner name of the SOA resource record
in the authority section of the response is inspected.

- Update Zonemaster::Engine:ASNLookup->_cymru_asn_lookup() code
- Refactoring
- Update unit tests for Cymru ASN lookup
- Add unit test for RIPE ASN lookup
- Omit TTL and names case in resource record duplicate comparison
- Fix condition
The profile module specifies a contract that each profile property must
respect. This change makes all properties respect the contract with
regard to definedness, default values and hierarchy.

To ease upholding certain aspects of the contract the new utility method
all_properties() was added.

Validation error messages for resolver.source4 and resolver.source6 are
clarified regarding the empty string.
Merge develop into master (Engine)
Signed-off-by: Josh Soref <[email protected]>
Signed-off-by: Josh Soref <[email protected]>
tgreenx and others added 28 commits November 26, 2024 10:13
New unit tests for Delegation01, -02 and -03, and legacy tests are removed
Due to an oversight in a previous refactoring, all non-DNSSEC DNS queries sent by Zonemaster became
EDNS queries. This commit makes it so that those queries are now non-EDNS queries. Default EDNS0 packet
size values will now be properly used when appropriate, and a new, missing one has been created for DNSSEC.
The caching logic of queries was also impacted.

Simply put, a DNSSEC query using the default EDNS0 packet size of 1232 is made by setting parameter "dnssec"
and/or "edns_details{do}" (the latter has precedence).
For a non-DNSSEC EDNS query, setting parameter "edns_size" and/or "edns_details{size}" (the latter has precedence)
will do the trick, but then it will use the provided value for the EDNS0 packet size. To use the default value of 512,
just set parameter "edns_details" with an empty hash (or non-empty with any of its subkey(s) other than edns_details{do,size})
instead.

- Fix logic related to flags dnssec and edns_size for when to use default values, and also when combined with edns_details
- Fix caching logic when using dnssec and edns_size parameters
- Make combined usage of dnssec with edns_details but without edns_details{do} to correctly set the dnssec (DO) flag
- Removed uneeded code related to resetting flags between queries (- it was already done earlier in the same method)
- Add constant UDP_DNSSEC_QUERY_DEFAULT (set to 1232)
- Rename constant UDP_COMMON_EDNS_LIMIT to UDP_EDNS_COMMON_LIMIT
- Add and update documentation
- Add unit tests
…::Nameserver->query()

The maximum value for this parameter, set either by "edns_size" or "edns_details->size", is a 16-bit value,
thus it should not exceed 65535. Documentation and unit tests are updated too.
…::Nameserver->query()

This parameter, set either by "edns_size" or "edns_details->size", is an unsigned 16-bit value,
thus the minimum value should be 0. Documentation and unit tests are updated too.
Use a different query name for each query as to make sure that we do not get a cached response from previous, equivalent queries.
This is needed because the tested object is actually the underlying object in the "dns" attribute of the Zonemaster::Engine::Nameserver class,
which is only updated by the "_query()" method, and not the "query()" method.
Renamed some constants:
 - UDP_DNSSEC_QUERY_DEFAULT to EDNS_UDP_PAYLOAD_DNSSEC_DEFAULT
 - UDP_EDNS_QUERY_DEFAULT to EDNS_UDP_PAYLOAD_DEFAULT
 - UDP_EDNS_COMMON_LIMIT to EDNS_UDP_PAYLOAD_COMMON_LIMIT
Fix default settings of queries
Running “docker build” on Zonemaster-Engine caused a warning to appear
on my test system:

 1 warning found (use docker --debug to expand):
 - FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 1)
Try::Tiny was missing from the run-time container.
…g-deps

Add Try::Tiny in zonemaster-cli runtime Docker container
Fix abort condition for undelegated tests in the Basic module
Fixes unit tests so that they do not leak queries
Co-authored-by: Mattias Päivärinta <[email protected]>
Preparation for v2024.2 release (Engine)
@matsduf matsduf added this to the v2024.2 milestone Dec 9, 2024
@matsduf matsduf merged commit c29b7db into master Dec 9, 2024
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants