| line | true | false | branch | 
 
| 34 | 0 | 15 | unless my $from_dom = $self->get_from_dom | 
 
| 36 | 1 | 14 | unless $self->exists_in_dns | 
 
| 38 | 1 | 13 | unless $policy | 
 
| 48 | 0 | 13 | if ($self->config->{'report_store'}{'auto_save'}) | 
 
| 52 | 5 | 8 | if $aligned | 
 
| 54 | 0 | 8 | $self->is_subdomain && defined $policy->sp ? : | 
 
| 62 | 1 | 7 | if (lc $effective_p eq "none") | 
 
| 66 | 0 | 7 | if $self->is_whitelisted | 
 
| 71 | 6 | 1 | unless (defined $policy->pct) | 
 
| 78 | 0 | 1 | if (int rand 100 < $policy->pct) | 
 
| 88 | 1 | 0 | $effective_p eq 'reject' ? : | 
 
| 98 | 5 | 0 | if ($pol and $self->has_valid_reporting_uri($pol->rua)) | 
 
| 102 | 0 | 5 | $_->{'max_bytes'} > 0 ? : | 
 
| 115 | 0 | 11 | unless my $from_dom = shift() || $self->header_from | 
 
| 116 | 0 | 11 | if $self->verbose | 
 
| 121 | 1 | 10 | if (0 == scalar @$matches) | 
 
| 129 | 0 | 10 | if (scalar @$matches > 1) | 
 
| 131 | 0 | 0 | if $self->verbose | 
 
| 136 | 0 | 10 | unless ($at_dom) | 
 
| 138 | 0 | 10 | unless eval {
	do {
	$policy = $self->policy($policy_str)
}
} | 
 
| 139 | 0 | 10 | if ($@) | 
 
| 147 | 0 | 10 | if (not $policy->p && $policy->is_valid_p($policy->p) or defined $policy->sp and not $policy->is_valid_p($policy->sp)) | 
 
| 157 | 0 | 0 | unless ($policy->rua and $self->has_valid_reporting_uri($policy->rua)) | 
 
| 182 | 8 | 13 | if ("pass" eq $self->result->spf or "pass" eq $self->result->dkim) | 
 
| 196 | 7 | 17 | unless $self->get_dkim_pass_sigs | 
 
| 202 | 0 | 17 | unless my $from_dom = $self->header_from | 
 
| 203 | 0 | 17 | unless my $policy = $self->policy | 
 
| 216 | 4 | 15 | if ($dkim_dom eq $from_dom) | 
 
| 224 | 8 | 7 | if $policy->adkim and "s" eq lc $policy->adkim | 
 
| 227 | 0 | 7 | if "pass" eq $self->result->dkim | 
 
| 231 | 2 | 5 | if ($dkim_org eq $from_org) | 
 
| 237 | 6 | 11 | if "pass" eq lc $self->result->dkim | 
 
| 245 | 0 | 21 | unless ($spf_dom or $self->spf) | 
 
| 246 | 21 | 0 | unless ($spf_dom) | 
 
| 247 | 29 | 0 | if $_->{'result'} | 
 
| 248 | 0 | 21 | if (scalar @passes == 0) | 
 
| 252 | 24 | 0 | if $_->{'scope'} | 
 
| 253 | 0 | 21 | unless ($ref) | 
 
| 254 | 0 | 0 | if $_->{'scope'} | 
 
| 256 | 0 | 21 | unless ($ref) | 
 
| 265 | 0 | 21 | unless $spf_dom | 
 
| 267 | 0 | 21 | unless my $from_dom = $self->header_from | 
 
| 269 | 5 | 16 | if ($spf_dom eq $from_dom) | 
 
| 276 | 8 | 8 | if ($self->policy->aspf and "s" eq lc $self->policy->aspf) | 
 
| 280 | 3 | 5 | if ($self->get_organizational_domain($spf_dom) eq $self->get_organizational_domain($from_dom)) | 
 
| 293 | 3 | 8 | unless defined $s_ip | 
 
| 294 | 5 | 3 | unless ($self->{'_whitelist'}) | 
 
| 295 | 0 | 5 | unless my $white_file = $self->config->{'smtp'}{'whitelist'} | 
 
| 296 | 0 | 5 | unless -f $white_file and -r $white_file | 
 
| 298 | 20 | 10 | if $line =~ /^#/ | 
 
| 303 | 6 | 2 | unless $self->{'_whitelist'}{$s_ip} | 
 
| 307 | 1 | 1 | $comment && $comment =~ /\S/ ? : | 
 
| 322 | 0 | 18 | unless $rua | 
 
| 326 | 13 | 3 | unless ($self->external_report($uri_ref->{'uri'})) | 
 
| 331 | 2 | 1 | if $ext | 
 
| 339 | 0 | 41 | unless my $dkim_sigs = $self->dkim | 
 
| 341 | 0 | 41 | if ("ARRAY" ne ref $dkim_sigs) | 
 
| 350 | 0 | 108 | unless my $from_dom = shift() || $self->header_from | 
 
| 367 | 108 | 255 | unless $labels[$i] | 
 
| 370 | 110 | 145 | if ($self->is_public_suffix($tld)) | 
 
| 375 | 2 | 106 | if ($greatest == scalar @labels) | 
 
| 384 | 0 | 106 | if $self->verbose | 
 
| 390 | 0 | 18 | unless my $from_dom = shift() || $self->header_from | 
 
| 400 | 9 | 9 | if ($from_dom ne $org_dom) | 
 
| 406 | 5 | 22 | if $matched | 
 
| 407 | 10 | 12 | if $self->has_dns_rr("MX", $_) | 
 
| 408 | 10 | 12 | if $self->has_dns_rr("NS", $_) | 
 
| 409 | 6 | 6 | if $self->has_dns_rr("A", $_) | 
 
| 410 | 1 | 11 | if $self->has_dns_rr("AAAA", $_) | 
 
| 412 | 2 | 16 | unless ($matched) | 
 
| 429 | 11 | 4 | defined $org_dom ? : | 
 
| 431 | 0 | 15 | unless my $query = $self->get_resolver->send("_dmarc.$zone", "TXT") | 
 
| 434 | 1 | 11 | if $rr->type ne "TXT" | 
 
| 438 | 0 | 11 | if "v=dmarc1" ne lc substr($rr->txtdata, 0, 8) | 
 
| 439 | 0 | 11 | if $self->verbose | 
 
| 442 | 11 | 4 | if (scalar @matches) | 
 
| 451 | 2 | 2 | if (defined $org_dom) | 
 
| 452 | 1 | 1 | if ($org_dom ne $zone) | 
 
| 462 | 15 | 10 | if $self->header_from | 
 
| 464 | 0 | 10 | unless (my $header = $self->header_from_raw) | 
 
| 480 | 0 | 10 | unless ($from_dom) | 
 
| 492 | 0 | 20 | unless my $dmarc_dom = $self->result->published->domain | 
 
| 495 | 17 | 3 | if ("mailto" eq $uri->scheme) | 
 
| 498 | 13 | 4 | if ($self->get_organizational_domain($dest_host) eq $self->get_organizational_domain($dmarc_dom)) | 
 
| 502 | 0 | 13 | if $self->verbose | 
 
| 505 | 0 | 4 | if $self->verbose | 
 
| 508 | 3 | 4 | if ("http" eq $uri->scheme) | 
 
| 509 | 2 | 1 | if ($uri->host eq $dmarc_dom) | 
 
| 510 | 0 | 2 | if $self->verbose | 
 
| 513 | 0 | 1 | if $self->verbose | 
 
| 521 | 0 | 6 | unless my $uri_ref = shift() | 
 
| 525 | 0 | 6 | unless my $dmarc_dom = $self->result->published->domain | 
 
| 528 | 0 | 6 | unless my $dest_email = $uri_ref->{'uri'}->path | 
 
| 537 | 0 | 6 | unless (my $query = $self->get_resolver->send($dest, "TXT")) | 
 
| 538 | 0 | 0 | if $self->verbose | 
 
| 546 | 0 | 5 | if $rr->type ne "TXT" | 
 
| 548 | 0 | 5 | if "v=dmarc1" ne lc substr($rr->txtdata, 0, 8) | 
 
| 552 | 5 | 0 | $policy ? : | 
 
| 556 | 1 | 5 | unless (scalar @matches) | 
 
| 557 | 0 | 1 | if $self->verbose | 
 
| 564 | 5 | 0 | if ref $_ | 
 
| 566 | 0 | 3 | unless my $recips_ref = $self->report->uri->parse($or->{'rua'}) | 
 
| 567 | 3 | 0 | if ((split(/@/, $recips_ref->[0]{'uri'}, 0))[-1] eq (split(/@/, $uri_ref->{'uri'}, 0))[-1]) | 
 
| 571 | 0 | 3 | if $self->verbose |