Index: class-wp-xmlrpc-server.php
===================================================================
--- class-wp-xmlrpc-server.php	(revision 18004)
+++ class-wp-xmlrpc-server.php	(working copy)
@@ -1754,27 +1754,41 @@
 	 * @access protected
 	 */
 	function _multisite_getUsersBlogs($args) {
-		global $current_blog;
-		$domain = $current_blog->domain;
-		$path = $current_blog->path . 'xmlrpc.php';
-		$protocol = is_ssl() ? 'https' : 'http';
+		global $current_site;
+		$this->escape( $args );
 
-		$rpc = new IXR_Client("$protocol://{$domain}{$path}");
-		$rpc->query('wp.getUsersBlogs', $args[1], $args[2]);
-		$blogs = $rpc->getResponse();
+		$username = $args[1];
+		$password = $args[2];
 
-		if ( isset($blogs['faultCode']) )
-			return new IXR_Error($blogs['faultCode'], $blogs['faultString']);
+		if ( !$user = $this->login($username, $password) )
+			return $this->error;
 
-		if ( $_SERVER['HTTP_HOST'] == $domain && $_SERVER['REQUEST_URI'] == $path ) {
-			return $blogs;
-		} else {
-			foreach ( (array) $blogs as $blog ) {
-				if ( strpos($blog['url'], $_SERVER['HTTP_HOST']) )
-					return array($blog);
-			}
-			return array();
+		do_action( 'xmlrpc_call', 'blogger.getUsersBlogs' );
+
+		$blogs = (array) get_blogs_of_user( $user->ID );
+		$struct = array( );
+
+		foreach ( $blogs as $blog ) {
+			// Don't include blogs that aren't hosted at this site
+			if ( $blog->site_id != $current_site->id )
+				continue;
+
+			$blog_id = $blog->userblog_id;
+			switch_to_blog($blog_id);
+			$is_admin = current_user_can('manage_options');
+
+			$struct[] = array(
+				'isAdmin'		=> $is_admin,
+				'url'			=> get_option( 'home' ) . '/',
+				'blogid'		=> (string) $blog_id,
+				'blogName'		=> get_option( 'blogname' ),
+				'xmlrpc'		=> site_url( 'xmlrpc.php' )
+			);
+
+			restore_current_blog( );
 		}
+
+		return $struct;
 	}
 
 	/**
