WordPress.org

Make WordPress Core

Opened 11 months ago

Closed 11 months ago

Last modified 11 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:

Description

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
Code:

        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:

args=Array
(
    [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 11 months ago.
XML sent by the client

Download all attachments as: .zip

Change History (7)

comment:1 SergeyBiryukov11 months ago

  • Component changed from General to XML-RPC

Related: [19848]

comment:2 markoheijnen11 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

bduffez11 months ago

XML sent by the client

comment:3 bduffez11 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 markoheijnen11 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 DrewAPicture11 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:

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

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

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

comment:6 bduffez11 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.

Cheers,
Benoit

Note: See TracTickets for help on using tickets.