nadzoring.dns_lookup.validation module¶
DNS record validation functions.
- nadzoring.dns_lookup.validation._apply_rtype_specific_checks(rtype: str, record_result: dict[str, Any], record_score: int, result: dict[str, list[str]]) int[source]¶
Apply validation rules specific to each DNS record type.
- Parameters:
rtype – DNS record type to validate.
record_result – Dict containing the record data to validate.
record_score – Current score before applying type-specific checks.
result – Accumulator dict for issues and warnings.
- Returns:
Updated score after applying type-specific validations.
- nadzoring.dns_lookup.validation._check_dkim_record(txt: str, record_score: int, result: dict[str, list[str]]) int[source]¶
Deduct points when a DKIM record is missing the
p=public-key tag.- Parameters:
txt – DKIM record string starting with
"v=DKIM1".record_score – Current score.
result – Accumulator dict for issues.
- Returns:
Updated score; reduced by 20 when the public key is absent.
Examples
>>> r = {"issues": [], "warnings": []} >>> _check_dkim_record("v=DKIM1; k=rsa;", 100, r) 80
- nadzoring.dns_lookup.validation._check_mx_priorities(records: list[str], record_score: int, result: dict[str, list[str]]) int[source]¶
Deduct points for duplicate MX priorities or malformed records.
- Parameters:
records – MX record strings in
"priority mailserver"format.record_score – Current score.
result – Accumulator dict for issues.
- Returns:
Updated score; reduced by 20 for each duplicate or malformed entry.
Examples
>>> r = {"issues": [], "warnings": []} >>> _check_mx_priorities(["10 mail1.com", "10 mail2.com"], 100, r) 80
- nadzoring.dns_lookup.validation._check_spf_record(txt: str, record_score: int, result: dict[str, list[str]]) int[source]¶
Deduct points when an SPF record lacks a
~allor-allmechanism.- Parameters:
txt – SPF record string starting with
"v=spf1".record_score – Current score.
result – Accumulator dict for warnings.
- Returns:
Updated score; reduced by 10 when termination mechanism is absent.
Examples
>>> r = {"issues": [], "warnings": []} >>> _check_spf_record("v=spf1 include:spf.example.com", 100, r) 90
- nadzoring.dns_lookup.validation._check_txt_records(records: list[str], record_score: int, result: dict[str, list[str]]) int[source]¶
Validate TXT records for SPF and DKIM compliance.
- Parameters:
records – List of TXT record strings.
record_score – Current score.
result – Accumulator dict for issues and warnings.
- Returns:
Updated score after SPF and DKIM checks.
- nadzoring.dns_lookup.validation.calculate_record_score(rtype: str, record_result: dict[str, Any], result: dict[str, list[str]]) int[source]¶
Calculate a health score for a single DNS record type.
Starts at 100 and deducts points for errors, missing records, or type-specific issues.
- Parameters:
rtype – DNS record type (e.g.
"A","MX","TXT").record_result – Dict with optional
"error"and"records"keys.result – Accumulator dict with
"warnings"and"issues"lists updated in-place.
- Returns:
Score between 0 and 100.
- nadzoring.dns_lookup.validation.determine_status(score: int) str[source]¶
Map a numeric health score to a status label.
- Parameters:
score – Numeric score in the range 0-100.
- Returns:
"healthy"for score ≥ 80,"degraded"for 50-79, or"unhealthy"for scores below 50.
Examples
>>> determine_status(85) 'healthy' >>> determine_status(65) 'degraded' >>> determine_status(30) 'unhealthy'
- nadzoring.dns_lookup.validation.validate_mx_records(mx_records: list[str]) dict[str, bool | list[str]][source]¶
Validate MX records for duplicate priority values.
- Parameters:
mx_records – MX record strings in
"priority mailserver"format.- Returns:
Dict with
"valid"(bool),"issues"(list), and"warnings"(list) keys.
Examples
>>> validate_mx_records(["10 mail1.com", "10 mail2.com"]) {'valid': False, 'issues': ['Duplicate priority: 10'], 'warnings': []}
- nadzoring.dns_lookup.validation.validate_txt_records(txt_records: list[str]) dict[str, bool | list[str]][source]¶
Validate TXT records for SPF and DKIM compliance.
Checks for SPF (missing
~all/-all) and DKIM (missingp=key).- Parameters:
txt_records – List of TXT record strings.
- Returns:
Dict with
"valid"(bool),"issues"(list), and"warnings"(list) keys.
Examples
>>> result = validate_txt_records(["v=spf1 include:spf.com"]) >>> result["valid"] True >>> result["warnings"] ['SPF missing softfail/hardfail']