Index: modules/openid/openid.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/openid/openid.module,v
retrieving revision 1.19
diff -u -p -r1.19 openid.module
--- modules/openid/openid.module	30 Jan 2008 22:11:22 -0000	1.19
+++ modules/openid/openid.module	11 Feb 2008 09:01:38 -0000
@@ -398,7 +398,7 @@ function openid_authentication($response
   elseif (variable_get('user_register', 1)) {
     // Register new user
     $form_state['redirect'] = NULL;
-    $form_state['values']['name'] = (empty($response['openid.sreg.nickname'])) ? $identity : $response['openid.sreg.nickname'];
+    $form_state['values']['name'] = _openid_username_from_id((empty($response['openid.sreg.nickname'])) ? $identity : $response['openid.sreg.nickname']);
     $form_state['values']['mail'] = (empty($response['openid.sreg.email'])) ? '' : $response['openid.sreg.email'];
     $form_state['values']['pass']  = user_password();
     $form_state['values']['status'] = variable_get('user_register', 1) == 1;
@@ -527,3 +527,18 @@ function openid_verify_assertion($op_end
   }
   return $valid;
 }
+
+/**
+ * Sanitize the openid or the nickname to comply with our own restrictions on a username.
+ *
+ * @param $id The OpenID URL to sanitize
+ *
+ * @return $name A valid username for a Drupal account. 
+ */
+
+function _openid_username_from_id($id) {
+  $tokens = parse_url($id);
+  $name = $tokens['host'] . $tokens['path']; 
+  $name = trim(preg_replace('/[^a-z0-9]+/', '-', $name), '-');
+  return $name;
+}
