From 0db64567c6e397c2a18143e3750d4d1dc4171a44 Mon Sep 17 00:00:00 2001 From: lechuck <l3chuck@autistici.org> Date: Fri, 18 Apr 2014 19:14:16 +0000 Subject: [PATCH] Initial commit --- crossdomain.xml | 5 + db-config.php | 300 ++++++++++++++++++++++++++++++ info.php | 1 + rss.php | 31 +++ wp-includes/default-constants.php | 7 +- 5 files changed, 341 insertions(+), 3 deletions(-) create mode 100644 crossdomain.xml create mode 100644 db-config.php create mode 100644 info.php create mode 100644 rss.php diff --git a/crossdomain.xml b/crossdomain.xml new file mode 100644 index 000000000..890048c4d --- /dev/null +++ b/crossdomain.xml @@ -0,0 +1,5 @@ +<?xml version="1.0"?> +<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> +<cross-domain-policy> + <allow-access-from domain="*.noblogs.org" /> +</cross-domain-policy> diff --git a/db-config.php b/db-config.php new file mode 100644 index 000000000..ca3793e19 --- /dev/null +++ b/db-config.php @@ -0,0 +1,300 @@ +<?php + +/** + * HyperDB configuration file + * + * This file should be installed at ABSPATH/db-config.php + * + * $wpdb is an instance of the hyperdb class which extends the wpdb class. + * + * See readme.txt for documentation. + */ + +/** + * Introduction to HyperDB configuration + * + * HyperDB can manage connections to a large number of databases. Queries are + * distributed to appropriate servers by mapping table names to datasets. + * + * A dataset is defined as a group of tables that are located in the same + * database. There may be similarly-named databases containing different + * tables on different servers. There may also be many replicas of a database + * on different servers. The term "dataset" removes any ambiguity. Consider a + * dataset as a group of tables that can be mirrored on many servers. + * + * Configuring HyperDB involves defining databases and datasets. Defining a + * database involves specifying the server connection details, the dataset it + * contains, and its capabilities and priorities for reading and writing. + * Defining a dataset involves specifying its exact table names or registering + * one or more callback functions that translate table names to datasets. + */ + + +/** Variable settings **/ + +/** + * save_queries (bool) + * This is useful for debugging. Queries are saved in $wpdb->queries. It is not + * a constant because you might want to use it momentarily. + * Default: false + */ +$wpdb->save_queries = false; + +/** + * persistent (bool) + * This determines whether to use mysql_connect or mysql_pconnect. The effects + * of this setting may vary and should be carefully tested. + * Default: false + */ +$wpdb->persistent = false; + +/** + * max_connections (int) + * This is the number of mysql connections to keep open. Increase if you expect + * to reuse a lot of connections to different servers. This is ignored if you + * enable persistent connections. + * Default: 10 + */ +$wpdb->max_connections = 30; + +/** + * tcp_responsiveness_check + * Enables checking TCP responsiveness by fsockopen prior to mysql_connect or + * mysql_pconnect. This was added because PHP's mysql functions do not provide + * a variable timeout setting. Disabling it may improve average performance by + * a very tiny margin but lose protection against connections failing slowly. + * Default: true + */ +$wpdb->tcp_responsiveness_check = true; + +/** Configuration Functions **/ + +/** + * $wpdb->add_database( $database ); + * + * $database is an associative array with these parameters: + * host (required) Hostname with optional :port. Default port is 3306. + * user (required) MySQL user name. + * password (required) MySQL user password. + * name (required) MySQL database name. + * read (optional) Whether server is readable. Default is 1 (readable). + * Also used to assign preference. See "Network topology". + * write (optional) Whether server is writable. Default is 1 (writable). + * Also used to assign preference in multi-master mode. + * dataset (optional) Name of dataset. Default is 'global'. + * timeout (optional) Seconds to wait for TCP responsiveness. Default is 0.2 + */ + +/** + * $wpdb->add_table( $dataset, $table ); + * + * $dataset and $table are strings. + */ + +/** + * $wpdb->add_callback( $callback ); + * + * $callback is a callable function or method. It will be called with two + * arguments and expected to compute a dataset or return null. + * $dataset = $callback($table, &$wpdb); + * + * Callbacks are executed in the order in which they are registered until one + * of them returns something other than null. Anything evaluating to false will + * cause the query to be aborted. + * + * For more complex setups, the callback may be used to overwrite properties of + * $wpdb or variables within hyperdb::connect_db(). If a callback returns an + * array, HyperDB will extract the array. It should be an associative array and + * it should include a $dataset value corresponding to a database added with + * $wpdb->add_database(). It may also include $server, which will be extracted + * to overwrite the parameters of each randomly selected database server prior + * to connection. This allows you to dynamically vary parameters such as the + * host, user, password, database name, and TCP check timeout. + */ + + +/** Masters and slaves + * + * A database definition can include 'read' and 'write' parameters. These + * operate as boolean switches but they are typically specified as integers. + * They allow or disallow use of the database for reading or writing. + * + * A master database might be configured to allow reading and writing: + * 'write' => 1, + * 'read' => 1, + * while a slave would be allowed only to read: + * 'write' => 0, + * 'read' => 1, + * + * It might be advantageous to disallow reading from the master, such as when + * there are many slaves available and the master is very busy with writes. + * 'write' => 1, + * 'read' => 0, + * HyperDB accommodates slave replication lag somewhat by keeping track of the + * tables that it has written since instantiation and sending subsequent read + * queries to the same server that received the write query. Thus a master set + * up this way will still receive read queries, but only subsequent to writes. + */ + + +/** + * Network topology / Datacenter awareness + * + * When your databases are located in separate physical locations there is + * typically an advantage to connecting to a nearby server instead of a more + * distant one. The read and write parameters can be used to place servers into + * logical groups of more or less preferred connections. Lower numbers indicate + * greater preference. + * + * This configuration instructs HyperDB to try reading from one of the local + * slaves at random. If that slave is unreachable or refuses the connection, + * the other slave will be tried, followed by the master, and finally the + * remote slaves in random order. + * Local slave 1: 'write' => 0, 'read' => 1, + * Local slave 2: 'write' => 0, 'read' => 1, + * Local master: 'write' => 1, 'read' => 2, + * Remote slave 1: 'write' => 0, 'read' => 3, + * Remote slave 2: 'write' => 0, 'read' => 3, + * + * In the other datacenter, the master would be remote. We would take that into + * account while deciding where to send reads. Writes would always be sent to + * the master, regardless of proximity. + * Local slave 1: 'write' => 0, 'read' => 1, + * Local slave 2: 'write' => 0, 'read' => 1, + * Remote slave 1: 'write' => 0, 'read' => 2, + * Remote slave 2: 'write' => 0, 'read' => 2, + * Remote master: 'write' => 1, 'read' => 3, + * + * There are many ways to achieve different configurations in different + * locations. You can deploy different config files. You can write code to + * discover the web server's location, such as by inspecting $_SERVER or + * php_uname(), and compute the read/write parameters accordingly. An example + * appears later in this file using the legacy function add_db_server(). + */ + + +/** Sample Configuration 1: Using the Default Server **/ +/** NOTE: THIS IS ACTIVE BY DEFAULT. COMMENT IT OUT. **/ + +/** + * This is the most basic way to add a server to HyperDB using only the + * required parameters: host, user, password, name. + * This adds the DB defined in wp-config.php as a read/write server for + * the 'global' dataset. (Every table is in 'global' by default.) + */ +/*$wpdb->add_database(array( + 'host' => DB_HOST, // If port is other than 3306, use host:port. + 'user' => DB_USER, + 'password' => DB_PASSWORD, + 'name' => DB_NAME, +));*/ + +/** + * This adds the same server again, only this time it is configured as a slave. + * The last three parameters are set to the defaults but are shown for clarity. + */ +/*$wpdb->add_database(array( + 'host' => DB_HOST, // If port is other than 3306, use host:port. + 'user' => DB_USER, + 'password' => DB_PASSWORD, + 'name' => DB_NAME, + 'write' => 0, + 'read' => 1, + 'dataset' => 'global', + 'timeout' => 0.2, +));*/ + +/** Sample Configuration 2: Partitioning **/ + +/** + * This example shows a setup where the multisite blog tables have been + * separated from the global dataset. + */ + +$wpdb->add_database(array( + 'host' => DB_HOST, // If port is other than 3306, use host:port. + 'user' => DB_USER, + 'password' => DB_PASSWORD, + 'name' => DB_NAME, + 'write' => 1, + 'read' => 1, + 'dataset' => 'global' +)); + +$wpdb->add_database(array( + 'host' => '172.16.1.3:3307', + 'user' => 'noblogs', + 'password' => 'n0bl0gst3st', + 'name' => 'noblogs_2', + 'dataset' => 'blog', + 'write' => 1, + 'read' => 1, + 'timeout' => 2, +)); +$wpdb->add_callback('my_db_callback'); +function my_db_callback($query, $wpdb) { + // Multisite blog tables are "{$base_prefix}{$blog_id}_*" + if ( preg_match("/^{$wpdb->base_prefix}\d+_/i", $wpdb->table) ) { + $table=split('_',$wpdb->table); + if (($table[1] % 2) == 0) { + return 'blog'; + } + } +} + + + +/** Sample helper functions from WordPress.com **/ + +/** + * This is back-compatible with an older config style. It is for convenience. + * lhost, part, and dc were removed from hyperdb because the read and write + * parameters provide enough power to achieve the desired effects via config. + * + * @param string $dataset Datset: the name of the dataset. Just use "global" if you don't need horizontal partitioning. + * @param int $part Partition: the vertical partition number (1, 2, 3, etc.). Use "0" if you don't need vertical partitioning. + * @param string $dc Datacenter: where the database server is located. Airport codes are convenient. Use whatever. + * @param int $read Read group: tries all servers in lowest number group before trying higher number group. Typical: 1 for slaves, 2 for master. This will cause reads to go to slaves unless all slaves are unreachable. Zero for no reads. + * @param bool $write Write flag: is this server writable? Works the same as $read. Typical: 1 for master, 0 for slaves. + * @param string $host Internet address: host:port of server on internet. + * @param string $lhost Local address: host:port of server for use when in same datacenter. Leave empty if no local address exists. + * @param string $name Database name. + * @param string $user Database user. + * @param string $password Database password. + */ +/* +function add_db_server($dataset, $part, $dc, $read, $write, $host, $lhost, $name, $user, $password, $timeout = 0.2 ) { + global $wpdb; + + // dc is not used in hyperdb. This produces the desired effect of + // trying to connect to local servers before remote servers. Also + // increases time allowed for TCP responsiveness check. + if ( !empty($dc) && defined(DATACENTER) && $dc != DATACENTER ) { + $read += 10000; + $write += 10000; + $timeout = 0.7; + } + + // You'll need a hyperdb::add_callback() callback function to use partitioning. + // $wpdb->add_callback( 'my_func' ); + if ( $part ) + $dataset = $dataset . '_' . $part; + + $database = compact('dataset', 'read', 'write', 'host', 'name', 'user', 'password', 'timeout'); + + $wpdb->add_database($database); + + // lhost is not used in hyperdb. This configures hyperdb with an + // additional server to represent the local hostname so it tries to + // connect over the private interface before the public one. + if ( !empty( $lhost ) ) { + if ( $read ) + $database['read'] = $read - 0.5; + if ( $write ) + $database['write'] = $write - 0.5; + $wpdb->add_database( $database ); + } +} +*/ + +// The ending PHP tag is omitted. This is actually safer than including it. diff --git a/info.php b/info.php new file mode 100644 index 000000000..4b29e3271 --- /dev/null +++ b/info.php @@ -0,0 +1 @@ +<?php phpinfo() ?> diff --git a/rss.php b/rss.php new file mode 100644 index 000000000..dfa33df7c --- /dev/null +++ b/rss.php @@ -0,0 +1,31 @@ +<?php +function get_blog_domain($old_blog_id) { + global $wpdb; + $id = int($old_blog_id); + $sql = sprintf("SELECT blog form old_noblogs_id WHERE id=%d", $id); + $result = $wpdb->get_row($sql); + if (!$result) { + return; + } + return sprintf("%s.noblogs.org", $result->blog); +} + +ob_start(); +// Load wordpress api. +define('WP_CACHE',false); +require_once('/opt/noblogs/www/wp-load.php'); +if (isset($_GET['blogId']) && is_numeric($_GET['blogId'])) { + $domain = get_blog_domain($_GET['blogId']); + if (!$domain) { + header("Location: https://noblogs.org"); + } else { + if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { + $scheme = 'https://'; + } else { + $scheme = 'http://'; + } + header(sprintf("Location: %s%s/rss2", $scheme, $domain)); + } +} +ob_flush(); +?> diff --git a/wp-includes/default-constants.php b/wp-includes/default-constants.php index 21a855ad2..a3322363e 100644 --- a/wp-includes/default-constants.php +++ b/wp-includes/default-constants.php @@ -152,9 +152,10 @@ function wp_initial_constants() { * @since 3.0.0 */ function wp_plugin_directory_constants() { - if ( ! defined( 'WP_CONTENT_URL' ) ) { - define( 'WP_CONTENT_URL', get_option( 'siteurl' ) . '/wp-content' ); // Full URL - WP_CONTENT_DIR is defined further up. - } + // patched by lesion [http://core.trac.wordpress.org/ticket/13941] + if ( !defined('WP_CONTENT_URL') ) + define( 'WP_CONTENT_URL', site_url('wp-content' ) ); + #define( 'WP_CONTENT_URL', get_option('siteurl') . '/wp-content'); // full url - WP_CONTENT_DIR is defined further up /** * Allows for the plugins directory to be moved from the default location. -- GitLab