Index: wp-admin/includes/class-wp-ms-sites-list-table.php
===================================================================
--- wp-admin/includes/class-wp-ms-sites-list-table.php	(revision 20992)
+++ wp-admin/includes/class-wp-ms-sites-list-table.php	(working copy)
@@ -29,14 +29,7 @@
 		$pagenum = $this->get_pagenum();
 
 		$s = isset( $_REQUEST['s'] ) ? stripslashes( trim( $_REQUEST[ 's' ] ) ) : '';
-		$wild = '';
-		if ( false !== strpos($s, '*') ) {
-			$wild = '%';
-			$s = trim($s, '*');
-		}
 
-		$like_s = esc_sql( like_escape( $s ) );
-
 		// If the network is large and a search is not being performed, show only the latest blogs with no paging in order
 		// to avoid expensive count queries.
 		if ( !$s && wp_is_large_network() ) {
@@ -46,40 +39,11 @@
 				$_GET['order'] = $_REQUEST['order'] = 'DESC';
 		}
 
-		$query = "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' ";
+		if ( $s )
+			$query = self::get_search_sql( $s );
+		else
+			$query = "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' ";
 
-		if ( empty($s) ) {
-			// Nothing to do.
-		} elseif ( preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $s ) ||
-					preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) ||
-					preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) ||
-					preg_match( '/^[0-9]{1,3}\.$/', $s ) ) {
-			// IPv4 address
-			$reg_blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE ( '{$like_s}$wild' )" );
-
-			if ( !$reg_blog_ids )
-				$reg_blog_ids = array( 0 );
-
-			$query = "SELECT *
-				FROM {$wpdb->blogs}
-				WHERE site_id = '{$wpdb->siteid}'
-				AND {$wpdb->blogs}.blog_id IN (" . implode( ', ', $reg_blog_ids ) . ")";
-		} else {
-			if ( is_numeric($s) && empty( $wild ) ) {
-				$query .= " AND ( {$wpdb->blogs}.blog_id = '{$like_s}' )";
-			} elseif ( is_subdomain_install() ) {
-				$blog_s = str_replace( '.' . $current_site->domain, '', $like_s );
-				$blog_s .= $wild . '.' . $current_site->domain;
-				$query .= " AND ( {$wpdb->blogs}.domain LIKE '$blog_s' ) ";
-			} else {
-				if ( $like_s != trim('/', $current_site->path) )
-					$blog_s = $current_site->path . $like_s . $wild . '/';
-				else
-					$blog_s = $like_s;
-				$query .= " AND  ( {$wpdb->blogs}.path LIKE '$blog_s' )";
-			}
-		}
-
 		$order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : '';
 		if ( $order_by == 'registered' ) {
 			$query .= ' ORDER BY registered ';
@@ -201,7 +165,7 @@
 			}
 			echo "<tr class='$class'>";
 
-			$blogname = ( is_subdomain_install() ) ? str_replace( '.'.$current_site->domain, '', $blog['domain'] ) : $blog['path'];
+			$blogname = is_subdomain_install() ? str_replace( '.' . $current_site->domain, '', $blog['domain'] ) : $blog['path'];
 
 			list( $columns, $hidden ) = $this->get_column_info();
 
@@ -336,4 +300,58 @@
 			<?php
 		}
 	}
+
+	static function get_search_sql( $s ) {
+		global $wpdb, $current_site;
+
+		$wild = '';
+		if ( false !== strpos($s, '*') ) {
+			$wild = '%';
+			$s = trim($s, '*');
+		}
+
+		$like_s = esc_sql( like_escape( $s ) );
+
+		if ( preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $s ) ||
+					preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) ||
+					preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) ||
+					preg_match( '/^[0-9]{1,3}\.$/', $s ) ) {
+			// IPv4 address
+			$reg_blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE ( '{$like_s}$wild' )" );
+
+			if ( !$reg_blog_ids )
+				$reg_blog_ids = array( 0 );
+
+			return "SELECT *
+				FROM {$wpdb->blogs}
+				WHERE site_id = '{$wpdb->siteid}'
+				AND {$wpdb->blogs}.blog_id IN (" . implode( ', ', $reg_blog_ids ) . ")";
+		}
+	
+		$query = "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' ";
+
+		if ( is_numeric($s) && empty( $wild ) ) {
+			$query .= " AND ( {$wpdb->blogs}.blog_id = '{$like_s}' )";
+		} elseif ( is_subdomain_install() ) {
+			$blog_s = str_replace( '.' . $current_site->domain, '', $like_s );
+			$blog_s .= $wild . '.' . $current_site->domain;
+			$query .= " AND ( {$wpdb->blogs}.domain LIKE '$blog_s' ) ";
+		} else {
+			// In a subdirectory install, trim off http://example.com and example.com from the start.
+			if ( 0 === strpos( $like_s, 'http://' ) || 0 === strpos( $like_s, 'https://' ) )
+				$like_s = str_replace( array( 'http://' . $current_site->domain, 'https://' . $current_site->domain ), '', $like_s );
+			elseif ( 0 === strpos( $like_s, $current_site->domain ) )
+				$like_s = substr( $like_s, strlen( $current_site->domain ) );
+
+			// If we're missing the network's path, we'll need to add it.
+			if ( 0 !== strpos( ltrim( $like_s . '/', '/' ), ltrim( $current_site->path, '/' ) ) )
+				$blog_s = $current_site->path . $like_s . $wild;
+			// And this allows for search strings that already include the network path.
+			else
+				$blog_s = $like_s . $wild;
+			$query .= " AND  ( {$wpdb->blogs}.path LIKE '$blog_s' )";
+		}
+
+		return $query;
+	}
 }
Index: wp-admin/includes/ajax-actions.php
===================================================================
--- wp-admin/includes/ajax-actions.php	(revision 20992)
+++ wp-admin/includes/ajax-actions.php	(working copy)
@@ -213,23 +213,27 @@
 }
 
 function wp_ajax_autocomplete_site() {
+	global $wp_list_table, $current_site, $wpdb;
+
 	if ( ! is_multisite() || ! current_user_can( 'manage_sites' ) || wp_is_large_network( 'sites' ) )
 		wp_die( -1 );
 
-	$return = array();
+	require ABSPATH . '/wp-admin/includes/class-wp-ms-sites-list-table.php';
 
-	global $wpdb;
-	$like_escaped_term = '%' . like_escape( stripslashes( $_REQUEST['term'] ) ) . '%';
-	$sites = $wpdb->get_results( $wpdb->prepare( "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE ( domain LIKE %s OR path LIKE %s ) AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' ORDER BY registered DESC", $like_escaped_term, $like_escaped_term ), ARRAY_A );
+	$query = WP_MS_Sites_List_Table::get_search_sql( trim( $_REQUEST['term'] ) . '*' );
+	error_log( $query );
+	$sites = $wpdb->get_results( $query );
 
 	if ( empty( $sites ) )
 		wp_die( -1 );
 
-	foreach ( (array) $sites as $details ) {
-		$blogname = get_blog_option( $details['blog_id'], 'blogname' );
+	$return = array();
+
+	foreach ( $sites as $site ) {
+		$value = is_subdomain_install() ? str_replace( '.' . $current_site->domain, '', $site->domain ) : $site->path;
 		$return[] = array(
-			'label' => sprintf( '%1$s (%2$s)', $blogname, $details['domain'] . $details['path'] ),
-			'value' => $details['domain']
+			'label' => $value,
+			'value' => $value,
 		);
 	}
 
Index: wp-admin/includes/dashboard.php
===================================================================
--- wp-admin/includes/dashboard.php	(revision 20992)
+++ wp-admin/includes/dashboard.php	(working copy)
@@ -442,16 +442,16 @@
 	<p class="youhave"><?php echo $sentence; ?></p>
 	<?php do_action( 'wpmuadminresult', '' ); ?>
 
-	<form name="searchform" action="<?php echo network_admin_url('users.php'); ?>" method="get">
+	<form action="<?php echo network_admin_url('users.php'); ?>" method="get">
 		<p>
-			<input type="search" name="s" value="" size="30" id="all-user-search-input" />
+			<input type="search" name="s" value="" size="30" id="all-user-search-input" autocomplete="off" />
 			<?php submit_button( __( 'Search Users' ), 'button', 'submit', false, array( 'id' => 'submit_users' ) ); ?>
 		</p>
 	</form>
 
-	<form name="searchform" action="<?php echo network_admin_url('sites.php'); ?>" method="get">
+	<form action="<?php echo network_admin_url('sites.php'); ?>" method="get">
 		<p>
-			<input type="search" name="s" value="" size="30" id="site-search-input" />
+			<input type="search" name="s" value="" size="30" id="site-search-input" autocomplete="off" />
 			<?php submit_button( __( 'Search Sites' ), 'button', 'submit', false, array( 'id' => 'submit_sites' ) ); ?>
 		</p>
 	</form>
