From 0b8b226ee2d5a07add1c986e3252fe3b11242dea Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 8 Mar 2020 14:07:24 +0000 Subject: [PATCH 1/2] Issue 8383: Fixes probing requests with doubled protocols --- src/Network/Probe.php | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Network/Probe.php b/src/Network/Probe.php index 771312f6ec..ba58ff3d04 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -26,6 +26,7 @@ use DomXPath; use Friendica\Core\Cache\Duration; use Friendica\Core\Logger; use Friendica\Core\Protocol; +use Friendica\Core\System; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; @@ -141,12 +142,18 @@ class Probe // Reset the static variable self::$baseurl = ''; - $ssl_url = "https://".$host."/.well-known/host-meta"; - $url = "http://".$host."/.well-known/host-meta"; + // Handles the case when the hostname contains the scheme + if (!parse_url($host, PHP_URL_SCHEME)) { + $ssl_url = "https://".$host."/.well-known/host-meta"; + $url = "http://".$host."/.well-known/host-meta"; + } else { + $ssl_url = $host."/.well-known/host-meta"; + $url = ''; + } $xrd_timeout = DI::config()->get('system', 'xrd_timeout', 20); - Logger::log("Probing for ".$host, Logger::DEBUG); + Logger::info('Probing', ['host' => $host, 'ssl_url' => $ssl_url, 'url' => $url, 'callstack' => System::callstack(20)]); $xrd = null; $curlResult = Network::curl($ssl_url, false, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']); @@ -161,7 +168,7 @@ class Probe return false; } - if (!is_object($xrd)) { + if (!is_object($xrd) && ! empty($url)) { $curlResult = Network::curl($url, false, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']); $connection_error = ($curlResult->getErrorNumber() == CURLE_COULDNT_CONNECT) || ($curlResult->getReturnCode() == 0); if ($curlResult->isTimeout()) { @@ -281,10 +288,6 @@ class Probe /** * Check an URI for LRDD data * - * this is a replacement for the "lrdd" function. - * It isn't used in this class and has some redundancies in the code. - * When time comes we can check the existing calls for "lrdd" if we can rework them. - * * @param string $uri Address that should be probed * * @return array uri data @@ -305,7 +308,7 @@ class Probe return []; } - $host = $parts["host"]; + $host = $parts['scheme'] . '://' . $parts["host"]; if (!empty($parts["port"])) { $host .= ':'.$parts["port"]; } From 4453e7e47ad69ac2f711fd02d3912737625c6657 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 8 Mar 2020 19:07:36 +0000 Subject: [PATCH 2/2] Standards --- src/Network/Probe.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Network/Probe.php b/src/Network/Probe.php index ba58ff3d04..6c64f790ec 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -144,10 +144,10 @@ class Probe // Handles the case when the hostname contains the scheme if (!parse_url($host, PHP_URL_SCHEME)) { - $ssl_url = "https://".$host."/.well-known/host-meta"; - $url = "http://".$host."/.well-known/host-meta"; + $ssl_url = "https://" . $host . "/.well-known/host-meta"; + $url = "http://" . $host . "/.well-known/host-meta"; } else { - $ssl_url = $host."/.well-known/host-meta"; + $ssl_url = $host . "/.well-known/host-meta"; $url = ''; } @@ -168,7 +168,7 @@ class Probe return false; } - if (!is_object($xrd) && ! empty($url)) { + if (!is_object($xrd) && !empty($url)) { $curlResult = Network::curl($url, false, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']); $connection_error = ($curlResult->getErrorNumber() == CURLE_COULDNT_CONNECT) || ($curlResult->getReturnCode() == 0); if ($curlResult->isTimeout()) {