andrey Wed, 22 Sep 2010 15:14:04 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=303679
Log: Fix for Request #48082 mysql_connect does not work with named pipes Bug: http://bugs.php.net/48082 (Analyzed) mysql_connect does not work with named pipes Changed paths: U php/php-src/trunk/ext/mysqlnd/mysqlnd.c U php/php-src/trunk/ext/mysqlnd/mysqlnd_net.c Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd.c =================================================================== --- php/php-src/trunk/ext/mysqlnd/mysqlnd.c 2010-09-22 14:54:43 UTC (rev 303678) +++ php/php-src/trunk/ext/mysqlnd/mysqlnd.c 2010-09-22 15:14:04 UTC (rev 303679) @@ -556,6 +556,7 @@ char *errstr = NULL; int errcode = 0, host_len; zend_bool unix_socket = FALSE; + zend_bool named_pipe = FALSE; zend_bool reconnect = FALSE; zend_bool saved_compression = FALSE; @@ -623,9 +624,16 @@ } transport_len = spprintf(&transport, 0, "unix://%s", socket); unix_socket = TRUE; - } else +#else + if (host_len == sizeof(".") - 1 && host[0] == '.') { + /* named pipe in socket */ + if (!socket) { + socket = "\\\\.\\pipe\\MySQL"; + } + transport_len = spprintf(&transport, 0, "pipe://%s", socket); + named_pipe = TRUE; #endif - { + } else { if (!port) { port = 3306; } @@ -742,7 +750,7 @@ goto err; /* OOM */ } - if (!unix_socket) { + if (!unix_socket && !named_pipe) { conn->host = mnd_pestrdup(host, conn->persistent); if (!conn->host) { SET_OOM_ERROR(conn->error_info); @@ -765,7 +773,24 @@ } } else { conn->unix_socket = mnd_pestrdup(socket, conn->persistent); - conn->host_info = mnd_pestrdup("Localhost via UNIX socket", conn->persistent); + if (unix_socket) { + conn->host_info = mnd_pestrdup("Localhost via UNIX socket", conn->persistent); + } else if (named_pipe) { + char *p; + spprintf(&p, 0, "%s via named pipe", conn->unix_socket); + if (!p) { + SET_OOM_ERROR(conn->error_info); + goto err; /* OOM */ + } + conn->host_info = mnd_pestrdup(p, conn->persistent); + efree(p); /* allocated by spprintf */ + if (!conn->host_info) { + SET_OOM_ERROR(conn->error_info); + goto err; /* OOM */ + } + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Impossible. Should be either socket or a pipe. Report a bug!"); + } if (!conn->unix_socket || !conn->host_info) { SET_OOM_ERROR(conn->error_info); goto err; /* OOM */ Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_net.c =================================================================== --- php/php-src/trunk/ext/mysqlnd/mysqlnd_net.c 2010-09-22 14:54:43 UTC (rev 303678) +++ php/php-src/trunk/ext/mysqlnd/mysqlnd_net.c 2010-09-22 15:14:04 UTC (rev 303679) @@ -113,23 +113,30 @@ struct timeval tv; DBG_ENTER("mysqlnd_net::connect"); - if (persistent) { - hashed_details_len = spprintf(&hashed_details, 0, "%p", net); - DBG_INF_FMT("hashed_details=%s", hashed_details); - } - net->packet_no = net->compressed_envelope_packet_no = 0; - if (net->options.timeout_connect) { - tv.tv_sec = net->options.timeout_connect; - tv.tv_usec = 0; - } + if (scheme_len > (sizeof("pipe://") - 1) && !memcmp(scheme, "pipe://", sizeof("pipe://") - 1)) { + if (persistent) { + streams_options |= STREAM_OPEN_PERSISTENT; + } + streams_options |= IGNORE_URL; + net->stream = php_stream_open_wrapper((char*) scheme + sizeof("pipe://") - 1, "r+", streams_options, NULL); + } else { + if (persistent) { + hashed_details_len = spprintf(&hashed_details, 0, "%p", net); + DBG_INF_FMT("hashed_details=%s", hashed_details); + } - DBG_INF_FMT("calling php_stream_xport_create"); - net->stream = php_stream_xport_create(scheme, scheme_len, streams_options, streams_flags, - hashed_details, (net->options.timeout_connect) ? &tv : NULL, - NULL /*ctx*/, errstr, errcode); + if (net->options.timeout_connect) { + tv.tv_sec = net->options.timeout_connect; + tv.tv_usec = 0; + } + DBG_INF_FMT("calling php_stream_xport_create"); + net->stream = php_stream_xport_create(scheme, scheme_len, streams_options, streams_flags, + hashed_details, (net->options.timeout_connect) ? &tv : NULL, + NULL /*ctx*/, errstr, errcode); + } if (*errstr || !net->stream) { if (hashed_details) { efree(hashed_details); /* allocated by spprintf */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php