Index: wp-includes/ms-functions.php
===================================================================
--- wp-includes/ms-functions.php	(revision 16754)
+++ wp-includes/ms-functions.php	(working copy)
@@ -519,8 +519,23 @@
 	$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( substr( $limited_domain, 0, 2 ) == '*.' ){
+				//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;
+				}  
+			} else {
+				// Direct domain match
+				if ( $emaildomain == $limited_domain )
+					$matched_domain = true;
+			}
+		}
+		if( $matched_domain == false ) {
 			$errors->add('user_email', __('Sorry, that email address is not allowed!'));
+		}
 	}
 
 	// Check if the username has been used already.
Index: wp-admin/network/edit.php
===================================================================
--- wp-admin/network/edit.php	(revision 16754)
+++ wp-admin/network/edit.php	(working copy)
@@ -122,7 +122,7 @@
 			$limited_email = array();
 			foreach ( (array) $limited_email_domains as $domain ) {
 					$domain = trim( $domain );
-				if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $domain ) )
+				if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.\*])+$|', $domain ) )
 					$limited_email[] = trim( $domain );
 			}
 			update_site_option( 'limited_email_domains', $limited_email );
