Index: src/wp-includes/class-wp-xmlrpc-server.php
===================================================================
--- src/wp-includes/class-wp-xmlrpc-server.php	(revision 31812)
+++ src/wp-includes/class-wp-xmlrpc-server.php	(working copy)
@@ -4756,20 +4756,24 @@
 		$post_author = $postdata['post_author'];
 
 		// Only set the post_author if one is set.
-		if ( isset($content_struct['wp_author_id']) && ($user->ID != $content_struct['wp_author_id']) ) {
-			switch ( $post_type ) {
-				case 'post':
-					if ( !current_user_can('edit_others_posts') )
-						return new IXR_Error( 401, __( 'You are not allowed to change the post author as this user.' ) );
-					break;
-				case 'page':
-					if ( !current_user_can('edit_others_pages') )
-						return new IXR_Error( 401, __( 'You are not allowed to change the page author as this user.' ) );
-					break;
-				default:
-					return new IXR_Error( 401, __( 'Invalid post type' ) );
+		if ( isset( $content_struct['wp_author_id'] ) ) {
+			// Check permissions if attempting to switch author to or from another user
+			if ( $user->ID != $content_struct['wp_author_id'] || $user->ID != $post_author ) {
+				switch ( $post_type ) {
+					case 'post':
+						if ( ! current_user_can('edit_others_posts') )
+							return new IXR_Error( 401, __( 'You are not allowed to change the post author as this user.' ) );
+						break;
+					case 'page':
+						if ( ! current_user_can('edit_others_pages') )
+							return new IXR_Error( 401, __( 'You are not allowed to change the page author as this user.' ) );
+						break;
+					default:
+						return new IXR_Error( 401, __( 'Invalid post type' ) );
+				}
+
+				$post_author = $content_struct['wp_author_id'];
 			}
-			$post_author = $content_struct['wp_author_id'];
 		}
 
 		if ( isset($content_struct['mt_allow_comments']) ) {
Index: tests/phpunit/tests/xmlrpc/mw/editPost.php
===================================================================
--- tests/phpunit/tests/xmlrpc/mw/editPost.php	(revision 31812)
+++ tests/phpunit/tests/xmlrpc/mw/editPost.php	(working copy)
@@ -95,6 +95,25 @@
 		$this->assertEquals( $contributor_id, $out->post_author );
 	}
 
+	/**
+	 * @ticket 24916
+	 */
+	function test_capable_reassign_author_to_self() {
+		$contributor_id = $this->make_user_by_role( 'contributor' );
+		$editor_id = $this->make_user_by_role( 'editor' );
+
+		$post = array( 'post_title' => 'Post test', 'post_author' => $contributor_id );
+		$post_id = wp_insert_post( $post );
+
+		$post2 = array( 'wp_author_id' => $editor_id );
+		$result = $this->myxmlrpcserver->mw_editPost( array( $post_id, 'editor', 'editor', $post2 ) );
+		$this->assertNotInstanceOf( 'IXR_Error', $result );
+		$this->assertTrue($result);
+
+		$out = get_post( $post_id );
+		$this->assertEquals( $editor_id, $out->post_author );
+	}
+	
 	function test_post_thumbnail() {
 		add_theme_support( 'post-thumbnails' );
 
Index: tests/phpunit/tests/xmlrpc/wp/editPost.php
===================================================================
--- tests/phpunit/tests/xmlrpc/wp/editPost.php	(revision 31812)
+++ tests/phpunit/tests/xmlrpc/wp/editPost.php	(working copy)
@@ -95,6 +95,25 @@
 		$this->assertEquals( $contributor_id, $out->post_author );
 	}
 
+	/**
+	 * @ticket 24916
+	 */
+	function test_capable_reassign_author_to_self() {
+		$contributor_id = $this->make_user_by_role( 'contributor' );
+		$editor_id = $this->make_user_by_role( 'editor' );
+
+		$post = array( 'post_title' => 'Post test', 'post_author' => $contributor_id );
+		$post_id = wp_insert_post( $post );
+
+		$post2 = array( 'post_author' => $editor_id );
+		$result = $this->myxmlrpcserver->wp_editPost( array( 1, 'editor', 'editor', $post_id, $post2 ) );
+		$this->assertNotInstanceOf( 'IXR_Error', $result );
+		$this->assertTrue($result);
+
+		$out = get_post( $post_id );
+		$this->assertEquals( $editor_id, $out->post_author );
+	}
+	
 	function test_post_thumbnail() {
 		add_theme_support( 'post-thumbnails' );
 
