Index: openid.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/openid/openid.module,v retrieving revision 1.2.2.7 diff -u -r1.2.2.7 openid.module --- openid.module 30 Jan 2008 20:43:20 -0000 1.2.2.7 +++ openid.module 8 Jun 2008 15:20:39 -0000 @@ -334,51 +334,52 @@ $xrds_url = 'http://xri.net/'. $claimed_id; } $url = @parse_url($xrds_url); - if ($url['scheme'] == 'http' || $url['scheme'] == 'https') { - // For regular URLs, try Yadis resolution first, then HTML-based discovery - $headers = array('Accept' => 'application/xrds+xml'); - $result = drupal_http_request($xrds_url, $headers); - - if (!isset($result->error)) { - if (isset($result->headers['Content-Type']) && preg_match("/application\/xrds\+xml/", $result->headers['Content-Type'])) { - // Parse XML document to find URL - $services = xrds_parse($result->data); - } - else { - $xrds_url = NULL; - if (isset($result->headers['X-XRDS-Location'])) { - $xrds_url = $result->headers['X-XRDS-Location']; - } - else { - // Look for meta http-equiv link in HTML head - $xrds_url = _openid_meta_httpequiv('X-XRDS-Location', $result->data); - } - if (!empty($xrds_url)) { - $headers = array('Accept' => 'application/xrds+xml'); - $xrds_result = drupal_http_request($xrds_url, $headers); - if (!isset($xrds_result->error)) { - $services = xrds_parse($xrds_result->data); - } - } + if ($url['scheme'] != 'http' && $url['scheme'] != 'https') { + // return an empty services array for unsupported protocols. + return $services; + } + + // For regular URLs, try Yadis resolution first, then HTML-based discovery + $headers = array('Accept' => 'application/xrds+xml'); + $result = drupal_http_request($xrds_url, $headers); + + if (isset($result->headers['Content-Type']) && preg_match("/application\/xrds\+xml/", $result->headers['Content-Type'])) { + // Parse XML document to find URL + $services = xrds_parse($result->data); + } + else { + $xrds_url = NULL; + if (isset($result->headers['X-XRDS-Location'])) { + $xrds_url = $result->headers['X-XRDS-Location']; + } + else { + // Look for meta http-equiv link in HTML head + $xrds_url = _openid_meta_httpequiv('X-XRDS-Location', $result->data); + } + if (!empty($xrds_url)) { + $headers = array('Accept' => 'application/xrds+xml'); + $xrds_result = drupal_http_request($xrds_url, $headers); + if (!isset($xrds_result->error)) { + $services = xrds_parse($xrds_result->data); } + } + } - // Check for HTML delegation - if (count($services) == 0) { - // Look for 2.0 links - $uri = _openid_link_href('openid2.provider', $result->data); - $delegate = _openid_link_href('openid2.local_id', $result->data); - $version = 2; + // Check for HTML delegation + if (count($services) == 0) { + // Look for 2.0 links + $uri = _openid_link_href('openid2.provider', $result->data); + $delegate = _openid_link_href('openid2.local_id', $result->data); + $version = 2; - // 1.0 links - if (empty($uri)) { - $uri = _openid_link_href('openid.server', $result->data); - $delegate = _openid_link_href('openid.delegate', $result->data); - $version = 1; - } - if (!empty($uri)) { - $services[] = array('uri' => $uri, 'delegate' => $delegate, 'version' => $version); - } - } + // 1.0 links + if (empty($uri)) { + $uri = _openid_link_href('openid.server', $result->data); + $delegate = _openid_link_href('openid.delegate', $result->data); + $version = 1; + } + if (!empty($uri)) { + $services[] = array('uri' => $uri, 'delegate' => $delegate, 'version' => $version); } } return $services;