aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/includes/functions.php15
-rw-r--r--phpBB/viewforum.php4
2 files changed, 13 insertions, 6 deletions
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 7eba95ed04..ed448ed5f7 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -1746,8 +1746,12 @@ function generate_board_url($without_script_path = false)
/**
* Redirects the user to another page then exits the script nicely
* This function is intended for urls within the board. It's not meant to redirect to cross-domains.
+*
+* @param string $url The url to redirect to
+* @param bool $return If true, do not redirect but return the sanitized URL. Default is no return.
+* @param bool $disable_cd_check If true, redirect() will redirect to an external domain. If false, the redirect point to the boards url if it does not match the current domain. Default is false.
*/
-function redirect($url, $return = false)
+function redirect($url, $return = false, $disable_cd_check = false)
{
global $db, $cache, $config, $user;
@@ -1774,8 +1778,8 @@ function redirect($url, $return = false)
}
else if (!empty($url_parts['scheme']) && !empty($url_parts['host']))
{
- // Attention: only able to redirect within the same domain (yourdomain.com -> www.yourdomain.com will not work)
- if ($url_parts['host'] !== $user->host)
+ // Attention: only able to redirect within the same domain if $disable_cd_check is false (yourdomain.com -> www.yourdomain.com will not work)
+ if (!$disable_cd_check && $url_parts['host'] !== $user->host)
{
$url = generate_board_url();
}
@@ -2853,7 +2857,7 @@ function phpbb_checkdnsrr($host, $type = '')
}
// @exec('nslookup -retry=1 -timout=1 -type=' . escapeshellarg($type) . ' ' . escapeshellarg($host), $output);
- @exec('nslookup -type=' . escapeshellarg($type) . ' ' . escapeshellarg($host), $output);
+ @exec('nslookup -type=' . escapeshellarg($type) . ' ' . escapeshellarg($host) . '.', $output);
// If output is empty, the nslookup failed
if (empty($output))
@@ -2879,7 +2883,8 @@ function phpbb_checkdnsrr($host, $type = '')
}
else if (function_exists('checkdnsrr'))
{
- return (checkdnsrr($host, $type)) ? true : false;
+ // The dot indicates to search the DNS root (helps those having DNS prefixes on the same domain)
+ return (checkdnsrr($host . '.', $type)) ? true : false;
}
return NULL;
diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php
index 61408b06d9..8a7a458706 100644
--- a/phpBB/viewforum.php
+++ b/phpBB/viewforum.php
@@ -107,7 +107,9 @@ if ($forum_data['forum_type'] == FORUM_LINK && $forum_data['forum_link'])
$db->sql_query($sql);
}
- redirect($forum_data['forum_link']);
+ // We redirect to the url. The third parameter indicates that external redirects are allowed.
+ redirect($forum_data['forum_link'], false, true);
+ exit;
}
// Build navigation links