WordPress.org

Make WordPress Core

Ticket #15706: multisite-fuzzy-limited-domains-15706.patch

File multisite-fuzzy-limited-domains-15706.patch, 1.9 KB (added by djcp, 3 years ago)
  • wp-includes/ms-functions.php

     
    519519        $limited_email_domains = get_site_option( 'limited_email_domains' ); 
    520520        if ( is_array( $limited_email_domains ) && empty( $limited_email_domains ) == false ) { 
    521521                $emaildomain = substr( $user_email, 1 + strpos( $user_email, '@' ) ); 
    522                 if ( in_array( $emaildomain, $limited_email_domains ) == false ) 
     522                $matched_domain = false; 
     523                foreach( $limited_email_domains as $limited_domain ) { 
     524                        if( substr( $limited_domain, 0, 2 ) == '*.' ){ 
     525                                //Allow all subdomains for this limited domain. Nick off the '*.' and do a more expansive match. 
     526                                $local_limited_domain = substr( $limited_domain, 2 ); 
     527                                if( substr( $emaildomain, strlen( $emaildomain ) - strlen( $local_limited_domain ) ) == $local_limited_domain ) { 
     528                                        $matched_domain = true; 
     529                                }   
     530                        } else { 
     531                                // Direct domain match 
     532                                if ( $emaildomain == $limited_domain ) 
     533                                        $matched_domain = true; 
     534                        } 
     535                } 
     536                if( $matched_domain == false ) { 
    523537                        $errors->add('user_email', __('Sorry, that email address is not allowed!')); 
     538                } 
    524539        } 
    525540 
    526541        // Check if the username has been used already. 
  • wp-admin/network/edit.php

     
    122122                        $limited_email = array(); 
    123123                        foreach ( (array) $limited_email_domains as $domain ) { 
    124124                                        $domain = trim( $domain ); 
    125                                 if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $domain ) ) 
     125                                if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.\*])+$|', $domain ) ) 
    126126                                        $limited_email[] = trim( $domain ); 
    127127                        } 
    128128                        update_site_option( 'limited_email_domains', $limited_email );