DKIMValidator icon indicating copy to clipboard operation
DKIMValidator copied to clipboard

error algo: fetchPublicKeys with dns_get_record

Open jetsam729 opened this issue 4 years ago • 0 comments

validator.php line:296

    public static function fetchPublicKeys(string $domain, string $selector)
    {
        $host = sprintf('%s._domainkey.%s', $selector, $domain);
        $textRecords = dns_get_record($host, DNS_TXT);

        if ($textRecords === false) {
            return false;
        }

dns_get_record return FALSE if error dns/internet/format domain. if no record - dns_get_record return EMPTY ARRAY - not FALSE! try: var_export(dns_get_record('ssss1ss sssssssss.zzzzzzzzzzz', DNS_TXT)); - return FALSE (space at domain) try: var_export(dns_get_record('ssss1sssssssssss.zzzzzzzzzzz', DNS_TXT)); - return array()

if false - this error get aka TEMPFAIL if empty array - NO REC or NO DOMAIN aka PERMFAIL must be as:

 if ($textRecords === false || empty($textRecords)) {
            return $textRecords;
        }

line:165

                if ($dnsKeys === false) {
                    $output[$signatureIndex][] = [
                        'status' => 'TEMPFAIL',
                        'reason' => 'Public key not found in DNS',
                    ];
                    continue;
                }

must as ~

                 if ($dnsKeys === false) {
                    $output[$signatureIndex][] = [
                        'status' => 'TEMPFAIL',
                        'reason' => 'Error DNS or NETWORK',
                    ];
                    continue;
                }
                if (empty($dnsKeys)) {
                    $output[$signatureIndex][] = [
                        'status' => 'PERMFAIL',
                        'reason' => 'Public key not found in DNS',
                    ];
                    continue;
                }

jetsam729 avatar Mar 09 '21 14:03 jetsam729