diff options
author | Andreas Fischer <bantu@phpbb.com> | 2010-06-27 21:07:38 +0200 |
---|---|---|
committer | Andreas Fischer <bantu@phpbb.com> | 2010-07-11 01:19:27 +0200 |
commit | ed44235d26180c539eaf7af5e5b15c7fcb96ce45 (patch) | |
tree | 459dff09349da2acd5182bb4fc57c546aeab0ff4 /phpBB/includes/functions_user.php | |
parent | e46745ed34386c5884c7dacb1f3d8a8ca0c333dd (diff) | |
download | forums-ed44235d26180c539eaf7af5e5b15c7fcb96ce45.tar forums-ed44235d26180c539eaf7af5e5b15c7fcb96ce45.tar.gz forums-ed44235d26180c539eaf7af5e5b15c7fcb96ce45.tar.bz2 forums-ed44235d26180c539eaf7af5e5b15c7fcb96ce45.tar.xz forums-ed44235d26180c539eaf7af5e5b15c7fcb96ce45.zip |
[ticket/9534] Adding support for IPv6 addresses in user_ipwhois().
whois.arin.net does currently not refer to other servers (using ReferralServer)
when queried for an IPv6 address. whois.sixxs.net however works in this case.
This also adds '.' to the hostname to make sure we're querying the dns root.
PHPBB3-9534
Diffstat (limited to 'phpBB/includes/functions_user.php')
-rw-r--r-- | phpBB/includes/functions_user.php | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 6f6d7526b7..c2ea8445d1 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -1235,16 +1235,29 @@ function user_unban($mode, $ban) */ function user_ipwhois($ip) { - $ipwhois = ''; + if (empty($ip)) + { + return ''; + } - // Check IP - // Only supporting IPv4 at the moment... - if (empty($ip) || !preg_match(get_preg_expression('ipv4'), $ip)) + if (preg_match(get_preg_expression('ipv4'), $ip)) + { + // IPv4 address + $whois_host = 'whois.arin.net.'; + } + else if (preg_match(get_preg_expression('ipv6'), $ip)) + { + // IPv6 address + $whois_host = 'whois.sixxs.net.'; + } + else { return ''; } - if (($fsk = @fsockopen('whois.arin.net', 43))) + $ipwhois = ''; + + if (($fsk = @fsockopen($whois_host, 43))) { // CRLF as per RFC3912 fputs($fsk, "$ip\r\n"); @@ -1257,7 +1270,7 @@ function user_ipwhois($ip) $match = array(); - // Test for referrals from ARIN to other whois databases, roll on rwhois + // Test for referrals from $whois_host to other whois databases, roll on rwhois if (preg_match('#ReferralServer: whois://(.+)#im', $ipwhois, $match)) { if (strpos($match[1], ':') !== false) @@ -1285,7 +1298,7 @@ function user_ipwhois($ip) @fclose($fsk); } - // Use the result from ARIN if we don't get any result here + // Use the result from $whois_host if we don't get any result here $ipwhois = (empty($buffer)) ? $ipwhois : $buffer; } |