Skip to content

Problem with multiple TXT records and UTF-8 #66

@dzacharo

Description

@dzacharo

Bumped into a bug. If there are multiple TXT records (I assume this applies to other types) where one of them contains values in UTF-8, OpenMPIC crashes.

The following output uses "example.com" instead of the real Domain Name.

{ "mpic_completed": false, "request_orchestration_parameters": { "perspective_count": 2, "quorum_count": 1, "max_attempts": 1 }, "actual_orchestration_parameters": { "perspective_count": 2, "quorum_count": 1, "attempt_count": 1 }, "check_type": "dcv", "domain_or_ip_target": "example.com", "is_valid": false, "trace_identifier": "example.com", "perspectives": [ { "perspective_code": "eu-west-3", "check_response": { "check_completed": false, "check_passed": false, "errors": [ { "error_type": "mpic_error:coordinator:remote_check", "error_message": "The remote check failed to complete: Check failed for perspective eu-west-3, target example.com: Lambda execution error: {\"errorMessage\": \"'utf-8' codec can't decode byte 0xe6 in position 14: invalid continuation byte\", \"errorType\": \"UnicodeDecodeError\", \"requestId\": \"c610d172-3584-4e70-8826-b001ca69aed8\", \"stackTrace\": [\" File \\\"/opt/python/lib/python3.11/site-packages/aws_lambda_powertools/middleware_factory/factory.py\\\", line 140, in wrapper\\n response = middleware()\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/aws_lambda_powertools/utilities/parser/parser.py\\\", line 119, in event_parser\\n return handler(parsed_event, context, **kwargs)\\n\", \" File \\\"/var/task/mpic_dcv_checker_lambda_function.py\\\", line 65, in lambda_handler\\n return get_handler().process_invocation(event)\\n\", \" File \\\"/var/task/mpic_dcv_checker_lambda_function.py\\\", line 26, in process_invocation\\n dcv_response = asyncio.get_event_loop().run_until_complete(self.dcv_checker.check_dcv(dcv_request))\\n\", \" File \\\"/var/lang/lib/python3.11/asyncio/base_events.py\\\", line 654, in run_until_complete\\n return future.result()\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/open_mpic_core/mpic_dcv_checker/mpic_dcv_checker.py\\\", line 123, in check_dcv\\n result = await self.perform_general_dns_validation(dcv_request)\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/open_mpic_core/mpic_dcv_checker/mpic_dcv_checker.py\\\", line 155, in perform_general_dns_validation\\n MpicDcvChecker.evaluate_dns_lookup_response(\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/open_mpic_core/mpic_dcv_checker/mpic_dcv_checker.py\\\", line 344, in evaluate_dns_lookup_response\\n record_data_as_string = MpicDcvChecker.extract_value_from_record(record_data)\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/open_mpic_core/mpic_dcv_checker/mpic_dcv_checker.py\\\", line 409, in extract_value_from_record\\n record_value = b\\\"\\\".join(record.strings).decode(\\\"utf-8\\\") # TODO errors='strict' or replace (lenient)?\\n\"]}" } ], "timestamp_ns": 1765273041674470100, "check_type": "dcv", "details": { "validation_method": "dns-change", "records_seen": null, "response_code": null, "ad_flag": null, "found_at": null, "cname_chain": null } } }, { "perspective_code": "eu-south-1", "check_response": { "check_completed": false, "check_passed": false, "errors": [ { "error_type": "mpic_error:coordinator:remote_check", "error_message": "The remote check failed to complete: Check failed for perspective eu-south-1, target example.com: Lambda execution error: {\"errorMessage\": \"'utf-8' codec can't decode byte 0xe6 in position 14: invalid continuation byte\", \"errorType\": \"UnicodeDecodeError\", \"requestId\": \"73dd6805-da37-43d5-9b8f-cb513868654f\", \"stackTrace\": [\" File \\\"/opt/python/lib/python3.11/site-packages/aws_lambda_powertools/middleware_factory/factory.py\\\", line 140, in wrapper\\n response = middleware()\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/aws_lambda_powertools/utilities/parser/parser.py\\\", line 119, in event_parser\\n return handler(parsed_event, context, **kwargs)\\n\", \" File \\\"/var/task/mpic_dcv_checker_lambda_function.py\\\", line 65, in lambda_handler\\n return get_handler().process_invocation(event)\\n\", \" File \\\"/var/task/mpic_dcv_checker_lambda_function.py\\\", line 26, in process_invocation\\n dcv_response = asyncio.get_event_loop().run_until_complete(self.dcv_checker.check_dcv(dcv_request))\\n\", \" File \\\"/var/lang/lib/python3.11/asyncio/base_events.py\\\", line 654, in run_until_complete\\n return future.result()\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/open_mpic_core/mpic_dcv_checker/mpic_dcv_checker.py\\\", line 123, in check_dcv\\n result = await self.perform_general_dns_validation(dcv_request)\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/open_mpic_core/mpic_dcv_checker/mpic_dcv_checker.py\\\", line 155, in perform_general_dns_validation\\n MpicDcvChecker.evaluate_dns_lookup_response(\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/open_mpic_core/mpic_dcv_checker/mpic_dcv_checker.py\\\", line 344, in evaluate_dns_lookup_response\\n record_data_as_string = MpicDcvChecker.extract_value_from_record(record_data)\\n\", \" File \\\"/opt/python/lib/python3.11/site-packages/open_mpic_core/mpic_dcv_checker/mpic_dcv_checker.py\\\", line 409, in extract_value_from_record\\n record_value = b\\\"\\\".join(record.strings).decode(\\\"utf-8\\\") # TODO errors='strict' or replace (lenient)?\\n\"]}" } ], "timestamp_ns": 1765273041674934300, "check_type": "dcv", "details": { "validation_method": "dns-change", "records_seen": null, "response_code": null, "ad_flag": null, "found_at": null, "cname_chain": null } } } ], "dcv_check_parameters": { "validation_method": "dns-change", "challenge_value": "HARICA-XXXXXXXXXXXX", "dns_name_prefix": null, "dns_record_type": "TXT", "require_exact_match": true }, "previous_attempt_results": null }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions