Make WordPress Core

Opened 23 months ago

Closed 23 months ago

Last modified 23 months ago

#24336 closed defect (bug) (invalid)

XML RPC arguments for wp.getPosts are invalid

Reported by: bduffez Owned by:
Milestone: Priority: normal
Severity: normal Version:
Component: XML-RPC Keywords:
Focuses: Cc:


Version: WP3.5 (latest)
Issue: can't use wp.getPosts XML RPC method.
Error: username/password invalid
Issue: PHP error
File: wp-includes/class-wp-xmlrpc-server.php
Line: 1433

        function wp_getPosts( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
                        return $this->error;

                $this->escape( $args );

                $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $filter     = isset( $args[3] ) ? $args[3] : array();

Just before the this->escape( $args ) I did a print_r of $args:

    [password] => foo
    [filter] => Array
            [post_type] => page

    [username] => bar
    [blog_id] => 1

However, as you can see, $username and $password are extracted from $args[1], $args[2] instead of $args[username] and $args[password].

Attachments (1)

xmlrpc.xml (413 bytes) - added by bduffez 23 months ago.
XML sent by the client

Download all attachments as: .zip

Change History (7)

comment:1 @SergeyBiryukov23 months ago

  • Component changed from General to XML-RPC

Related: [19848]

comment:2 @markoheijnen23 months ago

  • Milestone Awaiting Review deleted
  • Resolution set to invalid
  • Status changed from new to closed

You can't pass array key names through the XML-RPC. See all other methods

@bduffez23 months ago

XML sent by the client

comment:3 @bduffez23 months ago

I'm not passing array key names through XML-RPC.
My client sends the XML attached to this ticket (xmlrpc.xml).
As you can see, it only contains the values 1, "foo", "bar", struct: filter[post_type] = page
The only named values are the filter array, and the "page" value which has a key name of "post_type".

Am I wrong?

comment:4 @markoheijnen23 months ago

It doesn't make sense what you have now. As you can see in the xmlrpc.xml there isn't defined what the key is of the values. So there is no reason that the args should have those args.

I only can see it isn't a core issue. Otherwise the mobile apps also should have issues. No clue how you get those vars.

comment:5 @DrewAPicture23 months ago

@markoheijnen is correct here in saying that you can't pass array key names through. Based on your printed array, you're passing the args in the format of:

	'password' => 'foo',
	'filter' => array( 'post_type' => 'page' ),
	'username' => 'bar',
	'blog_id' => 1

when in reality, you should be passing args in the form of:

	1, // blog_id
	'bar', // username
	'foo', // password
	array( 'post_type' => 'page' ), // filter

comment:6 @bduffez23 months ago

Well, it appears that I was a bit mistaken in my queries to the server, I apologize.
Indeed, when using the appropriate XML query, the array is:

    [0] => 1
    [1] => foo
    [2] => bar
    [3] => Array
            [post_type] => page


which is expected.
What I have yet to figure now, is why the server replies with HTTP 401, I guess it is because XML RPC expects the user to have writing rights, which is not the case because I want to create a read-only client.

However, I would like to thank you for the very quick support, and apologize again for the wrong bug report.


Note: See TracTickets for help on using tickets.