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;
