Index: wp-includes/ms-functions.php
===================================================================
--- wp-includes/ms-functions.php	(revision 18510)
+++ wp-includes/ms-functions.php	(working copy)
@@ -564,7 +564,24 @@
 	$limited_email_domains = get_site_option( 'limited_email_domains' );
 	if ( is_array( $limited_email_domains ) && empty( $limited_email_domains ) == false ) {
 		$emaildomain = substr( $user_email, 1 + strpos( $user_email, '@' ) );
-		if ( in_array( $emaildomain, $limited_email_domains ) == false )
+		$matched_domain = false;
+
+		foreach ( $limited_email_domains as $limited_domain ) {
+			if ( 0 === strpos( $limited_domain, '*.' ) ) {
+				// Allow all subdomains for this limited domain. Nick off the '*.' and do a more expansive match.
+				$local_limited_domain = substr( $limited_domain, 2 );
+				if ( substr( $emaildomain, strlen( $emaildomain ) - strlen( $local_limited_domain ) ) == $local_limited_domain ) {
+					$matched_domain = true;
+					break;
+				}
+			} elseif ( $emaildomain == $limited_domain ) {
+				// Direct domain match
+				$matched_domain = true;
+				break;
+			}
+		}
+
+		if ( ! $matched_domain )
 			$errors->add('user_email', __('Sorry, that email address is not allowed!'));
 	}
 
