WordPress.org

Make WordPress Core

Ticket #8702: 8702.4.diff

File 8702.4.diff, 6.7 KB (added by sivel, 9 years ago)
  • wp-includes/cron.php

     
    201201
    202202        update_option( 'doing_cron', $local_time + 30 );
    203203
    204         wp_remote_post($cron_url, array('timeout' => 0.01, 'blocking' => false));
     204        wp_remote_post($cron_url, array('timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true)));
    205205}
    206206
    207207/**
  • wp-includes/http.php

     
    234234                        } else if ( true === WP_Http_Curl::test() && apply_filters('use_curl_transport', true) ) {
    235235                                $working_transport['curl'] = new WP_Http_Curl();
    236236                                $blocking_transport[] = &$working_transport['curl'];
    237                         } else if ( true === WP_Http_Streams::test() && apply_filters('use_streams_transport', true) ) {
     237                        } else if ( true === WP_Http_Streams::test() && apply_filters('use_streams_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) {
    238238                                $working_transport['streams'] = new WP_Http_Streams();
    239239                                $blocking_transport[] = &$working_transport['streams'];
    240                         } else if ( true === WP_Http_Fopen::test() && apply_filters('use_fopen_transport', true) ) {
     240                        } else if ( true === WP_Http_Fopen::test() && apply_filters('use_fopen_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) {
    241241                                $working_transport['fopen'] = new WP_Http_Fopen();
    242242                                $blocking_transport[] = &$working_transport['fopen'];
    243                         } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) ) {
     243                        } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) {
    244244                                $working_transport['fsockopen'] = new WP_Http_Fsockopen();
    245245                                $blocking_transport[] = &$working_transport['fsockopen'];
    246246                        }
     
    282282                        if ( true === WP_Http_ExtHttp::test() && apply_filters('use_http_extension_transport', true) ) {
    283283                                $working_transport['exthttp'] = new WP_Http_ExtHttp();
    284284                                $blocking_transport[] = &$working_transport['exthttp'];
    285                         } else if ( true === WP_Http_Streams::test() && apply_filters('use_streams_transport', true) ) {
     285                        } else if ( true === WP_Http_Curl::test() && apply_filters('use_curl_transport', true) ) {
     286                                $working_transport['curl'] = new WP_Http_Curl();
     287                                $blocking_transport[] = &$working_transport['curl'];
     288                        } else if ( true === WP_Http_Streams::test() && apply_filters('use_streams_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) {
    286289                                $working_transport['streams'] = new WP_Http_Streams();
    287290                                $blocking_transport[] = &$working_transport['streams'];
    288                         } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) ) {
     291                        } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) {
    289292                                $working_transport['fsockopen'] = new WP_Http_Fsockopen();
    290293                                $blocking_transport[] = &$working_transport['fsockopen'];
    291294                        }
    292295
    293                         foreach ( array('streams', 'fsockopen', 'exthttp') as $transport ) {
     296                        foreach ( array('curl', 'streams', 'fsockopen', 'exthttp') as $transport ) {
    294297                                if ( isset($working_transport[$transport]) )
    295298                                        $nonblocking_transport[] = &$working_transport[$transport];
    296299                        }
     
    358361                        'timeout' => apply_filters( 'http_request_timeout', 5),
    359362                        'redirection' => apply_filters( 'http_request_redirection_count', 5),
    360363                        'httpversion' => apply_filters( 'http_request_version', '1.0'),
    361                         'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version ),
     364                        'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )  ),
    362365                        'blocking' => true,
    363366                        'headers' => array(),
    364367                        'body' => null,
    365368                        'compress' => false,
    366                         'decompress' => true
     369                        'decompress' => true,
     370                        'sslverify' => true
    367371                );
    368372
    369373                $r = wp_parse_args( $args, $defaults );
    370374                $r = apply_filters( 'http_request_args', $r, $url );
    371375
     376                $arrURL = parse_url($url);
     377
     378                // Determine if this is a https call and pass that on to the transport functions
     379                // so that we can blacklist the transports that do not support ssl verification
     380                if ( $arrURL['scheme'] == 'https' || $arrURL['scheme'] == 'ssl' )
     381                        $r['ssl'] = true;
     382                else
     383                        $r['ssl'] = false;
     384
    372385                if ( is_null( $r['headers'] ) )
    373386                        $r['headers'] = array();
    374387
     
    10601073                        'redirect' => $r['redirection'],
    10611074                        'useragent' => $r['user-agent'],
    10621075                        'headers' => $r['headers'],
     1076                        'ssl' => array(
     1077                                'verifypeer' => apply_filters('https_ssl_verify', $r['sslverify']),
     1078                                'verifyhost' => apply_filters('https_ssl_verify', $r['sslverify'])
     1079                        )
    10631080                );
    10641081
    10651082                if ( !defined('WP_DEBUG') || ( defined('WP_DEBUG') && false === WP_DEBUG ) ) //Emits warning level notices for max redirects and timeouts
     
    11531170                        $r['timeout'] = 1;
    11541171
    11551172                $handle = curl_init();
     1173
    11561174                curl_setopt( $handle, CURLOPT_URL, $url);
     1175                curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true );
     1176                curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, apply_filters('https_ssl_verify', $r['sslverify']) );
     1177                curl_setopt( $handle, CURLOPT_SSL_VERIFYPEER, apply_filters('https_ssl_verify', $r['sslverify']) );
     1178                curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] );
     1179                curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $r['timeout'] );
     1180                curl_setopt( $handle, CURLOPT_TIMEOUT, $r['timeout'] );
     1181                curl_setopt( $handle, CURLOPT_MAXREDIRS, $r['redirection'] );
    11571182
    1158                 // The cURL extension requires that the option be set for the HEAD to
    1159                 // work properly.
    1160                 if ( 'HEAD' === $r['method'] ) {
    1161                         curl_setopt( $handle, CURLOPT_NOBODY, true );
     1183                switch ( $r['method'] ) {
     1184                        case 'HEAD':
     1185                                curl_setopt( $handle, CURLOPT_NOBODY, true );
     1186                                break;
     1187                        case 'POST':
     1188                                curl_setopt( $handle, CURLOPT_POST, true );
     1189                                curl_setopt( $handle, CURLOPT_POSTFIELDS, $r['body'] );
     1190                                break;
    11621191                }
    11631192
    1164                 if ( true === $r['blocking'] ) {
     1193                if ( true === $r['blocking'] )
    11651194                        curl_setopt( $handle, CURLOPT_HEADER, true );
    1166                         curl_setopt( $handle, CURLOPT_RETURNTRANSFER, 1 );
    1167                 } else {
     1195                else
    11681196                        curl_setopt( $handle, CURLOPT_HEADER, false );
    1169                         curl_setopt( $handle, CURLOPT_NOBODY, true );
    1170                         curl_setopt( $handle, CURLOPT_RETURNTRANSFER, 0 );
    1171                 }
    11721197
    1173                 curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] );
    1174                 curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, 1 );
    1175                 curl_setopt( $handle, CURLOPT_TIMEOUT, $r['timeout'] );
    1176                 curl_setopt( $handle, CURLOPT_MAXREDIRS, $r['redirection'] );
    1177 
    11781198                // The option doesn't work with safe mode or when open_basedir is set.
    11791199                if ( !ini_get('safe_mode') && !ini_get('open_basedir') )
    11801200                        curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, true );