From 2ca78a2eb2b9e7c390fbeacdded18807633f5b12 Mon Sep 17 00:00:00 2001 From: Wytze van der Raay Date: Fri, 5 Dec 2014 09:06:50 +0000 Subject: [PATCH] Fix for https://bugs.cacert.org/view.php?id=1318 "E-Mail Probe does not consider mx priorities" --- includes/general.php | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/includes/general.php b/includes/general.php index b34b870..17b449b 100644 --- a/includes/general.php +++ b/includes/general.php @@ -538,20 +538,35 @@ if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\+\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/" , $email)) { list($username,$domain)=explode('@',$email,2); - $dom = escapeshellarg($domain); - $line = trim(shell_exec("dig +short MX $dom 2>&1")); -#echo $email."-$dom-$line-\n"; -#echo shell_exec("dig +short mx heise.de 2>&1")."-
\n"; - - $list = explode("\n", $line); - foreach($list as $row) { - if(!strstr($row, " ")) { - continue; + $mxhostrr = array(); + $mxweight = array(); + if( !getmxrr($domain, $mxhostrr, $mxweight) ) { + $mxhostrr = array($domain); + $mxweight = array(0); + } else if ( empty($mxhostrr) ) { + $mxhostrr = array($domain); + $mxweight = array(0); + } + + $mxhostprio = array(); + for($i = 0; $i < count($mxhostrr); $i++) { + $mx_host = trim($mxhostrr[$i], '.'); + $mx_prio = $mxweight[$i]; + if(empty($mxhostprio[$mx_prio])) { + $mxhostprio[$mx_prio] = array(); + } + $mxhostprio[$mx_prio][] = $mx_host; + } + + array_walk($mxhostprio, function(&$mx) { shuffle($mx); } ); + ksort($mxhostprio); + + $mxhosts = array(); + foreach($mxhostprio as $mx_prio => $mxhostnames) { + foreach($mxhostnames as $mx_host) { + $mxhosts[] = $mx_host; } - list($pri, $mxhosts[]) = explode(" ", trim($row), 2); } - $mxhosts[] = $domain; - array_walk($mxhosts, function(&$mx) { $mx = trim($mx, '.'); } ); foreach($mxhosts as $key => $domain) {