-
Notifications
You must be signed in to change notification settings - Fork 11
Description
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 }