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.

Delegates to specialized validation functions based on the record type.

Parameters:
  • rtype – DNS record type to validate.

  • record_result – Dictionary containing the record data to validate.

  • record_score – Current score before applying type-specific checks.

  • result – Result dictionary for collecting issues and warnings.

Returns:

Updated score after applying type-specific validations.

Return type:

int

See also

check_mx_priorities: Validates MX record priorities. check_txt_records: Validates TXT record content (SPF, DKIM).

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.

Evaluates DNS records based on their presence, errors, and content, applying a scoring system that penalizes issues and missing records.

Parameters:
  • rtype – DNS record type (e.g., ‘A’, ‘MX’, ‘TXT’, ‘CNAME’).

  • record_result – Dictionary containing record data and potential errors. Expected keys: ‘error’ (optional), ‘records’ (optional).

  • result – Result dictionary to collect warnings and issues during validation. Must contain ‘warnings’ and ‘issues’ lists.

Returns:

Calculated score between 0-100, where:
  • 100: Perfect configuration

  • 80-99: Minor issues (warnings only)

  • 50-79: Significant issues

  • Below 50: Critical issues

Return type:

int

Notes

The function delegates record-type specific checks to apply_rtype_specific_checks() for further validation.

nadzoring.dns_lookup.validation.check_dkim_record(txt: str, record_score: int, result: dict[str, list[str]]) int[source]

Validate DKIM (DomainKeys Identified Mail) record.

Verifies that the DKIM record contains a public key (p= tag), which is required for email signing and verification.

Parameters:
  • txt – DKIM record string starting with ‘v=DKIM1’.

  • record_score – Current score before validation.

  • result – Result dictionary for collecting issues.

Returns:

Updated score, reduced by 20 points if public key is missing.

Return type:

int

Example

>>> result = {"issues": [], "warnings": []}
>>> check_dkim_record("v=DKIM1; k=rsa;", 100, result)
80
>>> result["issues"]
['DKIM record missing public key']
nadzoring.dns_lookup.validation.check_mx_priorities(records: list[str], record_score: int, result: dict[str, list[str]]) int[source]

Validate MX record priorities for duplicate entries.

Checks MX records for duplicate priority values, which can cause undetermined mail server selection behavior.

Parameters:
  • records – List of MX record strings in format “priority mailserver”. Example: “10 mail.example.com”

  • record_score – Current score before validation.

  • result – Result dictionary for collecting issues.

Returns:

Updated score, reduced by 20 points for each duplicate

priority or malformed record.

Return type:

int

Example

>>> result = {"issues": [], "warnings": []}
>>> check_mx_priorities(["10 mail1.com", "10 mail2.com"], 100, result)
80
>>> result["issues"]
['Duplicate MX priority: 10']
nadzoring.dns_lookup.validation.check_spf_record(txt: str, record_score: int, result: dict[str, list[str]]) int[source]

Validate SPF (Sender Policy Framework) record.

Checks if the SPF record includes a required termination mechanism (~all or -all) to specify how to handle unauthorized senders.

Parameters:
  • txt – SPF record string starting with ‘v=spf1’.

  • record_score – Current score before validation.

  • result – Result dictionary for collecting warnings.

Returns:

Updated score, reduced by 10 points if missing softfail/hardfail.

Return type:

int

Example

>>> result = {"issues": [], "warnings": []}
>>> check_spf_record("v=spf1 include:spf.example.com", 100, result)
90
>>> result["warnings"]
['SPF record missing softfail/hardfail']
nadzoring.dns_lookup.validation.check_txt_records(records: list[str], record_score: int, result: dict[str, list[str]]) int[source]

Validate TXT records for email authentication compliance.

Examines TXT records for SPF (Sender Policy Framework) and DKIM (DomainKeys Identified Mail) standards compliance.

Parameters:
  • records – List of TXT record strings.

  • record_score – Current score before validation.

  • result – Result dictionary for collecting issues and warnings.

Returns:

Updated score after applying SPF and DKIM validations.

Return type:

int

See also

check_spf_record: Validates SPF record syntax and requirements. check_dkim_record: Validates DKIM record presence of public key.

nadzoring.dns_lookup.validation.determine_status(score: int) str[source]

Determine health status category based on numerical score.

Maps a numerical score to a human-readable health status.

Parameters:

score – Numerical score (typically 0-100) from DNS validation.

Returns:

Health status:
  • ”healthy”: Score >= 80 (good configuration)

  • ”degraded”: 50 <= Score < 80 (issues need attention)

  • ”unhealthy”: Score < 50 (critical issues)

Return type:

str

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 proper configuration.

Checks MX records for duplicate priorities, which can cause unpredictable mail server selection.

Parameters:

mx_records – List of MX record strings in format “priority mailserver”. Example: [“10 mail1.example.com”, “20 mail2.example.com”]

Returns:

Validation result containing:
  • valid (bool): True if all checks pass

  • issues (List[str]): List of critical issues found

  • warnings (List[str]): List of non-critical warnings (always empty)

Return type:

Dict[str, Union[bool, List[str]]]

Example

>>> 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 email authentication compliance.

Checks TXT records for SPF and DKIM compliance, identifying common configuration issues.

Parameters:

txt_records

List of TXT record strings to validate. Example: [“v=spf1 include:spf.example.com ~all”,

”v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ…”]

Returns:

Validation result containing:
  • valid (bool): True if all critical checks pass

  • issues (List[str]): List of critical issues (invalid DKIM)

  • warnings (List[str]): List of warnings (SPF missing ~all/-all)

Return type:

Dict[str, Union[bool, List[str]]]

Example

>>> result = validate_txt_records(["v=spf1 include:spf.com"])
>>> result["valid"]
True
>>> result["warnings"]
['SPF missing softfail/hardfail']