diff options
author | Benny Baumann <BenBE@geshi.org> | 2014-11-29 13:46:50 +0100 |
---|---|---|
committer | Benny Baumann <BenBE@geshi.org> | 2014-11-29 13:46:50 +0100 |
commit | b9e5bc9e1fbcb4ec8be3b361894ab8715e42d630 (patch) | |
tree | f84077ce8f35289e500563cba66a0034f460f923 | |
parent | 1cc5257aba1e6ae883caf464eaadf25783d2279d (diff) | |
download | cacert-devel-b9e5bc9e1fbcb4ec8be3b361894ab8715e42d630.tar.gz cacert-devel-b9e5bc9e1fbcb4ec8be3b361894ab8715e42d630.tar.xz cacert-devel-b9e5bc9e1fbcb4ec8be3b361894ab8715e42d630.zip |
bug 1318: Properly order MX records by order given in RFC 5321
-rw-r--r-- | includes/general.php | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/includes/general.php b/includes/general.php index 596cc49..d9c74b9 100644 --- a/includes/general.php +++ b/includes/general.php @@ -538,20 +538,34 @@ 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")."-<br>\n"; - - $list = explode("\n", $line); - foreach($list as $row) { - if(!strstr($row, " ")) { - continue; + $mxhosts = array(); + $mxweight = array(); + if( !getmxrr($domain, $mxhosts) ) { + $mxhostrr = array($domain); + $mxweight = array(0); + } else if ( !empty($mxhosts) ) { + $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(); } - list($pri, $mxhosts[]) = explode(" ", trim($row), 2); + $mxhostprio[$mx_prio][] = $mx_host; + } + + array_walk($mxhostprio, function(&$mx) { shuffle($mx); } ); + + $mxhosts = array(); + foreach($mxhostprio as $mx_prio => $mxhostnames) { + foreach($mxhostnames as $mx_host) { + $mxhosts[] = $mx_host; + ] } - $mxhosts[] = $domain; - array_walk($mxhosts, function(&$mx) { $mx = trim($mx, '.'); } ); foreach($mxhosts as $key => $domain) { |