From 036dc071e7b564a9f8d959bc2b4cc95c6a79e002 Mon Sep 17 00:00:00 2001 From: Meik Sievertsen Date: Sun, 27 Jul 2008 13:42:46 +0000 Subject: [PATCH] merge git-svn-id: file:///svn/phpbb/trunk@8684 89ea8834-ac86-4346-8a33-228a782c2dd0 --- phpBB/includes/functions.php | 15 ++++++++++----- phpBB/viewforum.php | 4 +++- 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