--- /tmp/singlesignon/singlesignon.module	2008-05-08 22:12:18.000000000 +1200
+++ singlesignon.module	2008-09-10 11:51:38.000000000 +1200
@@ -93,8 +93,10 @@
   }
 
   $extra_base_url = _singlesignon_base_url();
+  $extra_base_domain = _singlesignon_get_domain($extra_base_url);
+  $master_domain = _singlesignon_get_domain($master_url);
   if (empty($_SESSION['singlesignon_prior_sid']) || $_SESSION['singlesignon_prior_sid'] != session_id()) {
-    if ($extra_base_url != $master_url) {
+    if ($extra_base_domain != $master_domain) {
       if (!empty($_GET['singlesignon_dest'])) {
         // User was sent back to a slave site by this module but doesn't have
         // a session.  They clearly don't have cookies enabled.
@@ -124,7 +126,7 @@
       return;
 
     case 'singlesignon':
-      if ($extra_base_url == $master_url) {
+      if ($extra_base_domain == $master_domain) {
         _singlesignon_master($master_url, $arg0, arg(1));
       }
       return;
@@ -143,7 +145,7 @@
 
   if (!empty($_SESSION['singlesignon_just_loggged_in'])) {
     unset($_SESSION['singlesignon_just_loggged_in']);
-    if ($extra_base_url == $master_url) {
+    if ($extra_base_domain == $master_domain) {
       if (!$user->uid || empty($_SESSION['singlesignon_slave_sessions']) || !is_array($_SESSION['singlesignon_slave_sessions']) || !_singlesignon_validate_sid($_SESSION['singlesignon_slave_sessions'])) {
         // Login failed or the user has no sessions on any slaves.
         return;
@@ -445,5 +447,18 @@
   return ($form_values['singlesignon_bot_matches'][$value]);
 }
 
+/**
+ * Returns the domain part of a URL
+ *
+ * @param string $base_url a URL including the scheme
+ * @return string just the domain (and possibly port) part
+ */
+function _singlesignon_get_domain($base_url) {
+  if (preg_match('@^https?://([^/]+)@', $base_url, $m)) {
+    return $m[1];
+  }
+  return '';
+}
+
 // }}}
 
