Patch php-mysqlforce.patch for MySQL related Bug #60133
Patch version 2011-10-25 15:09 UTC
Return to Bug #60133 |
Download this patch
Patch Revisions:
Developer: rendszergazdak@dotroll.com
cat php-5.3.8.mysqlforce.patch
diff -Nru oldphp/php-5.3.8//ext/mysql/php_mysql.c php-5.3.8/ext/mysql/php_mysql.c
--- oldphp/php-5.3.8//ext/mysql/php_mysql.c 2011-08-06 16:47:44.000000000 +0200
+++ php-5.3.8/ext/mysql/php_mysql.c 2011-10-13 16:57:08.252838739 +0200
@@ -494,8 +494,10 @@
/* {{{ PHP_INI */
PHP_INI_BEGIN()
STD_PHP_INI_BOOLEAN("mysql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateLong, allow_persistent, zend_mysql_globals, mysql_globals)
+ STD_PHP_INI_BOOLEAN("mysql.force_tcp", "0", PHP_INI_ALL, OnUpdateLong, force_tcp, zend_mysql_globals, mysql_globals)
STD_PHP_INI_ENTRY_EX("mysql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_mysql_globals, mysql_globals, display_link_numbers)
STD_PHP_INI_ENTRY_EX("mysql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_mysql_globals, mysql_globals, display_link_numbers)
+ STD_PHP_INI_ENTRY("mysql.force_hostname", NULL, PHP_INI_ALL, OnUpdateString, force_hostname, zend_mysql_globals, mysql_globals)
STD_PHP_INI_ENTRY("mysql.default_host", NULL, PHP_INI_ALL, OnUpdateString, default_host, zend_mysql_globals, mysql_globals)
STD_PHP_INI_ENTRY("mysql.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, zend_mysql_globals, mysql_globals)
STD_PHP_INI_ENTRY("mysql.default_password", NULL, PHP_INI_ALL, OnUpdateString, default_password, zend_mysql_globals, mysql_globals)
@@ -516,6 +518,8 @@
static PHP_GINIT_FUNCTION(mysql)
{
mysql_globals->num_persistent = 0;
+ mysql_globals->force_hostname = NULL;
+ mysql_globals->force_tcp = 0;
mysql_globals->default_socket = NULL;
mysql_globals->default_host = NULL;
mysql_globals->default_user = NULL;
@@ -711,7 +715,11 @@
connect_timeout = MySG(connect_timeout);
- socket = MySG(default_socket);
+ if (MySG(force_tcp)) {
+ socket = NULL;
+ } else {
+ socket = MySG(default_socket);
+ }
if (MySG(default_port) < 0) {
#if !defined(PHP_WIN32) && !defined(NETWARE)
@@ -787,22 +795,48 @@
* mysql_real_connect() to set the port.
*/
if (host_and_port && (tmp=strchr(host_and_port, ':'))) {
- host = estrndup(host_and_port, tmp-host_and_port);
- free_host = 1;
- tmp++;
- if (tmp[0] != '/') {
+ if (MySG(force_hostname)) {
+ host = MySG(force_hostname);
+ tmp++;
+ if (tmp[0] != '/') {
+ port = atoi(tmp);
+ }
+ socket = NULL;
+ } else {
+ host = estrndup(host_and_port, tmp-host_and_port);
+ free_host = 1;
+ tmp++;
+ if (tmp[0] != '/') {
port = atoi(tmp);
if ((tmp=strchr(tmp, ':'))) {
tmp++;
socket=tmp;
}
- } else {
+ } else {
socket = tmp;
+ }
}
} else {
- host = host_and_port;
+ if (MySG(force_hostname)) {
+ host = MySG(force_hostname);
+ } else {
+ host = host_and_port;
+ }
port = MySG(default_port);
}
+ if (MySG(force_tcp)) {
+ if (port < 0) {
+ port = MySG(default_port);
+ }
+ if (strcmp(host, "localhost") == 0)
+ {
+
+ if (free_host == 1)
+ efree(host);
+ host = estrdup("127.0.0.1");
+ free_host = 1;
+ }
+ }
#if MYSQL_VERSION_ID < 32200
mysql_port = port;
diff -Nru oldphp/php-5.3.8//ext/mysql/php_mysql_structs.h php-5.3.8/ext/mysql/php_mysql_structs.h
--- oldphp/php-5.3.8//ext/mysql/php_mysql_structs.h 2011-01-01 03:19:59.000000000 +0100
+++ php-5.3.8/ext/mysql/php_mysql_structs.h 2011-10-13 15:30:15.175843479 +0200
@@ -119,6 +119,8 @@
char *default_host, *default_user, *default_password;
char *default_socket;
char *connect_error;
+ long force_tcp;
+ char *force_hostname;
long connect_errno;
long connect_timeout;
long result_allocated;
diff -Nru oldphp/php-5.3.8//ext/mysqli/mysqli.c php-5.3.8/ext/mysqli/mysqli.c
--- oldphp/php-5.3.8//ext/mysqli/mysqli.c 2011-08-06 16:47:44.000000000 +0200
+++ php-5.3.8/ext/mysqli/mysqli.c 2011-10-14 11:10:00.285025860 +0200
@@ -534,6 +534,8 @@
STD_PHP_INI_ENTRY_EX("mysqli.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_mysqli_globals, mysqli_globals, display_link_numbers)
STD_PHP_INI_ENTRY_EX("mysqli.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_mysqli_globals, mysqli_globals, display_link_numbers)
STD_PHP_INI_BOOLEAN("mysqli.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateLong, allow_persistent, zend_mysqli_globals, mysqli_globals)
+ STD_PHP_INI_ENTRY("mysqli.force_hostname", NULL, PHP_INI_ALL, OnUpdateString, force_hostname, zend_mysqli_globals, mysqli_globals)
+ STD_PHP_INI_BOOLEAN("mysqli.force_tcp", "0", PHP_INI_ALL, OnUpdateLong, force_tcp, zend_mysqli_globals, mysqli_globals)
STD_PHP_INI_ENTRY("mysqli.default_host", NULL, PHP_INI_ALL, OnUpdateString, default_host, zend_mysqli_globals, mysqli_globals)
STD_PHP_INI_ENTRY("mysqli.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, zend_mysqli_globals, mysqli_globals)
STD_PHP_INI_ENTRY("mysqli.default_pw", NULL, PHP_INI_ALL, OnUpdateString, default_pw, zend_mysqli_globals, mysqli_globals)
@@ -559,6 +561,8 @@
mysqli_globals->max_links = -1;
mysqli_globals->max_persistent = -1;
mysqli_globals->allow_persistent = 1;
+ mysqli_globals->force_hostname = NULL;
+ mysqli_globals->force_tcp = 0;
mysqli_globals->default_port = 0;
mysqli_globals->default_host = NULL;
mysqli_globals->default_user = NULL;
diff -Nru oldphp/php-5.3.8//ext/mysqli/mysqli_nonapi.c php-5.3.8/ext/mysqli/mysqli_nonapi.c
--- oldphp/php-5.3.8//ext/mysqli/mysqli_nonapi.c 2011-08-12 16:55:00.000000000 +0200
+++ php-5.3.8/ext/mysqli/mysqli_nonapi.c 2011-10-14 09:54:27.238962674 +0200
@@ -71,6 +71,9 @@
zend_rsrc_list_entry *le;
mysqli_plist_entry *plist = NULL;
zend_bool self_alloced = 0;
+ const char *localhostaddr = "127.0.0.1";
+ const char *oldhostname = NULL;
+
#if !defined(MYSQL_USE_MYSQLND)
@@ -124,8 +127,9 @@
}
}
- if (!socket_len || !socket) {
- socket = MyG(default_socket);
+ if (!socket_len || !socket)
+ {
+ socket = MyG(default_socket);
}
if (!port){
port = MyG(default_port);
@@ -140,6 +144,10 @@
if (!hostname || !hostname_len) {
hostname = MyG(default_host);
}
+ if (MyG(force_hostname))
+ {
+ hostname = MyG(force_hostname);
+ }
if (mysql->mysql && mysqli_resource &&
(mysqli_resource->status > MYSQLI_STATUS_INITIALIZED))
@@ -231,11 +239,15 @@
mysql_options(mysql->mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, 0);
}
#endif
-
#if !defined(MYSQLI_USE_MYSQLND)
/* BC for prior to bug fix #53425 */
flags |= CLIENT_MULTI_RESULTS;
-
+ oldhostname = hostname;
+ if (MyG(force_tcp))
+ {
+ if (strcmp(hostname, "localhost") == 0)
+ hostname = localhostaddr;
+ }
if (mysql_real_connect(mysql->mysql, hostname, username, passwd, dbname, port, socket, flags) == NULL)
#else
if (mysqlnd_connect(mysql->mysql, hostname, username, passwd, passwd_len, dbname, dbname_len,
@@ -253,7 +265,9 @@
}
goto err;
}
-
+#if !defined(MYSQLI_USE_MYSQLND)
+ hostname = oldhostname;
+#endif
/* clear error */
php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);
diff -Nru oldphp/php-5.3.8//ext/mysqli/php_mysqli_structs.h php-5.3.8/ext/mysqli/php_mysqli_structs.h
--- oldphp/php-5.3.8//ext/mysqli/php_mysqli_structs.h 2011-01-01 03:19:59.000000000 +0100
+++ php-5.3.8/ext/mysqli/php_mysqli_structs.h 2011-10-13 17:09:54.510026522 +0200
@@ -286,6 +286,8 @@
long max_persistent;
long allow_persistent;
long cache_size;
+ char *force_hostname;
+ long force_tcp;
unsigned long default_port;
char *default_host;
char *default_user;
diff -Nru oldphp/php-5.3.8//ext/mysqlnd/mysqlnd.c php-5.3.8/ext/mysqlnd/mysqlnd.c
--- oldphp/php-5.3.8//ext/mysqlnd/mysqlnd.c 2011-08-10 16:12:24.000000000 +0200
+++ php-5.3.8/ext/mysqlnd/mysqlnd.c 2011-10-13 14:24:49.953844104 +0200
@@ -593,7 +593,10 @@
conn->net->compressed = FALSE;
}
}
-
+ if (MYSQLND_G(force_hostname))
+ {
+ host = MYSQLND_G(force_hostname);
+ }
if (!host || !host[0]) {
host = "localhost";
}
@@ -618,12 +621,23 @@
int transport_len;
#ifndef PHP_WIN32
if (host_len == sizeof("localhost") - 1 && !strncasecmp(host, "localhost", host_len)) {
- DBG_INF_FMT("socket=%s", socket_or_pipe? socket_or_pipe:"n/a");
- if (!socket_or_pipe) {
- socket_or_pipe = "/tmp/mysql.sock";
+ if (!MYSQLND_G(force_tcp))
+ {
+ DBG_INF_FMT("socket=%s", socket_or_pipe? socket_or_pipe:"n/a");
+ if (!socket_or_pipe) {
+ //socket_or_pipe = "/tmp/mysql.sock";
+ socket_or_pipe = "/var/run/mysqld/mysqld.sock";
+ }
+ transport_len = spprintf(&transport, 0, "unix://%s", socket_or_pipe);
+ unix_socket = TRUE;
+ }
+ else
+ {
+ if (!port) {
+ port = 3306;
+ }
+ transport_len = spprintf(&transport, 0, "tcp://%s:%u", host, port);
}
- transport_len = spprintf(&transport, 0, "unix://%s", socket_or_pipe);
- unix_socket = TRUE;
} else
#endif
{
diff -Nru oldphp/php-5.3.8//ext/mysqlnd/mysqlnd.h php-5.3.8/ext/mysqlnd/mysqlnd.h
--- oldphp/php-5.3.8//ext/mysqlnd/mysqlnd.h 2011-05-03 11:37:53.000000000 +0200
+++ php-5.3.8/ext/mysqlnd/mysqlnd.h 2011-10-13 14:26:08.094901208 +0200
@@ -280,6 +280,8 @@
ZEND_BEGIN_MODULE_GLOBALS(mysqlnd)
zend_bool collect_statistics;
zend_bool collect_memory_statistics;
+ zend_bool force_tcp;
+ char* force_hostname;
char* debug; /* The actual string */
MYSQLND_DEBUG *dbg; /* The DBG object */
long net_cmd_buffer_size;
diff -Nru oldphp/php-5.3.8//ext/mysqlnd/php_mysqlnd.c php-5.3.8/ext/mysqlnd/php_mysqlnd.c
--- oldphp/php-5.3.8//ext/mysqlnd/php_mysqlnd.c 2011-08-06 16:47:44.000000000 +0200
+++ php-5.3.8/ext/mysqlnd/php_mysqlnd.c 2011-10-14 10:21:32.952832453 +0200
@@ -147,6 +147,7 @@
{
mysqlnd_globals->collect_statistics = TRUE;
mysqlnd_globals->collect_memory_statistics = FALSE;
+ mysqlnd_globals->force_tcp = FALSE;
mysqlnd_globals->debug = NULL; /* The actual string */
mysqlnd_globals->dbg = NULL; /* The DBG object*/
mysqlnd_globals->net_cmd_buffer_size = MYSQLND_NET_CMD_BUFFER_MIN_SIZE;
@@ -180,6 +181,8 @@
PHP_INI_BEGIN()
STD_PHP_INI_BOOLEAN("mysqlnd.collect_statistics", "1", PHP_INI_ALL, OnUpdateBool, collect_statistics, zend_mysqlnd_globals, mysqlnd_globals)
STD_PHP_INI_BOOLEAN("mysqlnd.collect_memory_statistics", "0", PHP_INI_SYSTEM, OnUpdateBool, collect_memory_statistics, zend_mysqlnd_globals, mysqlnd_globals)
+ STD_PHP_INI_BOOLEAN("mysqlnd.force_tcp", "0", PHP_INI_ALL, OnUpdateBool, force_tcp, zend_mysqlnd_globals, mysqlnd_globals)
+ STD_PHP_INI_ENTRY("mysqlnd.force_hostname", NULL, PHP_INI_ALL, OnUpdateString, force_hostname, zend_mysqlnd_globals, mysqlnd_globals)
STD_PHP_INI_ENTRY("mysqlnd.debug", NULL, PHP_INI_SYSTEM, OnUpdateString, debug, zend_mysqlnd_globals, mysqlnd_globals)
STD_PHP_INI_ENTRY("mysqlnd.net_cmd_buffer_size", MYSQLND_NET_CMD_BUFFER_MIN_SIZE_STR, PHP_INI_ALL, OnUpdateNetCmdBufferSize, net_cmd_buffer_size, zend_mysqlnd_globals, mysqlnd_globals)
STD_PHP_INI_ENTRY("mysqlnd.net_read_buffer_size", "32768",PHP_INI_ALL, OnUpdateLong, net_read_buffer_size, zend_mysqlnd_globals, mysqlnd_globals)
|