Index: src/wp-includes/ms-blogs.php
===================================================================
--- src/wp-includes/ms-blogs.php	(revision 38613)
+++ src/wp-includes/ms-blogs.php	(working copy)
@@ -76,32 +76,29 @@
  *
  * @since MU
  *
- * @global wpdb $wpdb WordPress database abstraction object.
- *
  * @param string $slug
  * @return int A blog id
  */
 function get_id_from_blogname( $slug ) {
-	global $wpdb;
-
 	$current_site = get_current_site();
 	$slug = trim( $slug, '/' );
 
-	$blog_id = wp_cache_get( 'get_id_from_blogname_' . $slug, 'blog-details' );
-	if ( $blog_id )
-		return $blog_id;
-
 	if ( is_subdomain_install() ) {
-		$domain = $slug . '.' . $current_site->domain;
+		$domain = $slug . '.' . preg_replace( '|^www\.|', '', $current_site->domain );
 		$path = $current_site->path;
 	} else {
 		$domain = $current_site->domain;
 		$path = $current_site->path . $slug . '/';
 	}
 
-	$blog_id = $wpdb->get_var( $wpdb->prepare("SELECT blog_id FROM {$wpdb->blogs} WHERE domain = %s AND path = %s", $domain, $path) );
-	wp_cache_set( 'get_id_from_blogname_' . $slug, $blog_id, 'blog-details' );
-	return $blog_id;
+	$site_ids = get_sites( array(
+		'number' => 1,
+		'fields' => 'ids',
+		'domain' => $domain,
+		'path'   => $path,
+	) );
+
+	return array_shift( $site_ids );
 }
 
 /**
@@ -453,7 +450,6 @@
 	wp_cache_delete(  $domain_path_key, 'blog-lookup' );
 	wp_cache_delete( 'current_blog_' . $blog->domain, 'site-options' );
 	wp_cache_delete( 'current_blog_' . $blog->domain . $blog->path, 'site-options' );
-	wp_cache_delete( 'get_id_from_blogname_' . trim( $blog->path, '/' ), 'blog-details' );
 	wp_cache_delete( $domain_path_key, 'blog-id-cache' );
 
 	/**
Index: tests/phpunit/tests/multisite/getIdFromBlogname.php
===================================================================
--- tests/phpunit/tests/multisite/getIdFromBlogname.php	(revision 0)
+++ tests/phpunit/tests/multisite/getIdFromBlogname.php	(working copy)
@@ -0,0 +1,99 @@
+<?php
+
+if ( is_multisite() ) :
+/**
+ * Test get_id_from_blogname() in multisite.
+ *
+ * @group ms-site
+ * @group multisite
+ */
+class Tests_Multisite_Get_Id_From_Blogname extends WP_UnitTestCase {
+	protected static $network_ids;
+	protected static $site_ids;
+
+	public static function wpSetUpBeforeClass( $factory ) {
+		self::$network_ids = array(
+			'wordpress.org/'         => array( 'domain' => 'wordpress.org',     'path' => '/' ),
+			'www.wordpress.net/'     => array( 'domain' => 'www.wordpress.net', 'path' => '/' ),
+		);
+
+		foreach ( self::$network_ids as &$id ) {
+			$id = $factory->network->create( $id );
+		}
+		unset( $id );
+
+		self::$site_ids = array(
+			'wordpress.org/'              => array( 'domain' => 'wordpress.org',     'path' => '/',     'site_id' => self::$network_ids['wordpress.org/'] ),
+			'foo.wordpress.org/'          => array( 'domain' => 'foo.wordpress.org', 'path' => '/',     'site_id' => self::$network_ids['wordpress.org/'] ),
+			'wordpress.org/foo/'          => array( 'domain' => 'wordpress.org',     'path' => '/foo/', 'site_id' => self::$network_ids['wordpress.org/'] ),
+			'www.wordpress.net/'          => array( 'domain' => 'www.wordpress.net', 'path' => '/',     'site_id' => self::$network_ids['www.wordpress.net/'] ),
+			'foo.wordpress.net/'          => array( 'domain' => 'foo.wordpress.net', 'path' => '/',     'site_id' => self::$network_ids['www.wordpress.net/'] ),
+			'www.wordpress.net/foo/'      => array( 'domain' => 'www.wordpress.net', 'path' => '/foo/', 'site_id' => self::$network_ids['www.wordpress.net/'] ),
+		);
+
+		foreach ( self::$site_ids as &$id ) {
+			$id = $factory->blog->create( $id );
+		}
+		unset( $id );
+	}
+
+	public static function wpTearDownAfterClass() {
+		global $wpdb;
+
+		foreach( self::$site_ids as $id ) {
+			wpmu_delete_blog( $id, true );
+		}
+
+		foreach( self::$network_ids as $id ) {
+			$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->sitemeta} WHERE site_id = %d", $id ) );
+			$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->site} WHERE id= %d", $id ) );
+		}
+
+		wp_update_network_site_counts();
+	}
+
+	/**
+	 * @ticket 34450
+	 */
+	public function test_get_id_from_blogname_no_www() {
+		global $current_site;
+
+		$original_network = $current_site;
+		$current_site = get_network( self::$network_ids['wordpress.org/'] );
+
+		if ( is_subdomain_install() ) {
+			$expected = self::$site_ids['foo.wordpress.org/'];
+		} else {
+			$expected = self::$site_ids['wordpress.org/foo/'];
+		}
+
+		$result = get_id_from_blogname( 'foo' );
+		$this->assertEquals( $expected, $result );
+
+		$current_site = $original_network;
+	}
+
+	/**
+	 * @ticket 34450
+	 */
+	public function test_get_id_from_blogname_www() {
+		global $current_site;
+
+		$original_network = $current_site;
+		$current_site = get_network( self::$network_ids['www.wordpress.net/'] );
+
+		if ( is_subdomain_install() ) {
+			$expected = self::$site_ids['foo.wordpress.net/'];
+		} else {
+			$expected = self::$site_ids['www.wordpress.net/foo/'];
+		}
+
+		$result = get_id_from_blogname( 'foo' );
+		$this->assertEquals( $expected, $result );
+
+		$current_site = $original_network;
+	}
+
+}
+
+endif;

Property changes on: tests/phpunit/tests/multisite/getIdFromBlogname.php
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
