- case DMARC_POLICY_ABSENT: /* No DMARC record found */
- dmarc_status = US"norecord";
- dmarc_pass_fail = US"temperror";
- dmarc_status_text = US"No DMARC record";
- action = DMARC_RESULT_ACCEPT;
- break;
- case DMARC_FROM_DOMAIN_ABSENT: /* No From: domain */
- dmarc_status = US"nofrom";
- dmarc_pass_fail = US"temperror";
- dmarc_status_text = US"No From: domain found";
- action = DMARC_RESULT_ACCEPT;
- break;
- case DMARC_POLICY_NONE: /* Accept and report */
- dmarc_status = US"none";
- dmarc_pass_fail = US"none";
- dmarc_status_text = US"None, Accept";
- action = DMARC_RESULT_ACCEPT;
- break;
- case DMARC_POLICY_PASS: /* Explicit accept */
- dmarc_status = US"accept";
- dmarc_pass_fail = US"pass";
- dmarc_status_text = US"Accept";
- action = DMARC_RESULT_ACCEPT;
- break;
- case DMARC_POLICY_REJECT: /* Explicit reject */
- dmarc_status = US"reject";
- dmarc_pass_fail = US"fail";
- dmarc_status_text = US"Reject";
- action = DMARC_RESULT_REJECT;
- break;
- case DMARC_POLICY_QUARANTINE: /* Explicit quarantine */
- dmarc_status = US"quarantine";
- dmarc_pass_fail = US"fail";
- dmarc_status_text = US"Quarantine";
- action = DMARC_RESULT_QUARANTINE;
- break;
- default:
- dmarc_status = US"temperror";
- dmarc_pass_fail = US"temperror";
- dmarc_status_text = US"Internal Policy Error";
- action = DMARC_RESULT_TEMPFAIL;
- break;
+ case DMARC_DNS_ERROR_NXDOMAIN:
+ case DMARC_DNS_ERROR_NO_RECORD:
+ DEBUG(D_receive)
+ debug_printf("DMARC no record found for %s\n", header_from_sender);
+ has_dmarc_record = FALSE;
+ break;
+ case DMARC_PARSE_OKAY:
+ DEBUG(D_receive)
+ debug_printf("DMARC record found for %s\n", header_from_sender);
+ break;
+ case DMARC_PARSE_ERROR_BAD_VALUE:
+ DEBUG(D_receive)
+ debug_printf("DMARC record parse error for %s\n", header_from_sender);
+ has_dmarc_record = FALSE;
+ break;
+ default:
+ /* everything else, skip dmarc */
+ DEBUG(D_receive)
+ debug_printf("DMARC skipping (%d), unsure what to do with %s",
+ libdm_status, from_header->text);
+ has_dmarc_record = FALSE;
+ break;