dmitry          Tue Dec  5 08:55:15 2006 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src    NEWS 
    /php-src/sapi/cgi   fastcgi.c 
  Log:
  Fixed FastCGI impersonation for persistent connections on Windows
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.401&r2=1.2027.2.547.2.402&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.401 php-src/NEWS:1.2027.2.547.2.402
--- php-src/NEWS:1.2027.2.547.2.401     Tue Dec  5 01:39:07 2006
+++ php-src/NEWS        Tue Dec  5 08:55:15 2006
@@ -1,6 +1,7 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2007, PHP 5.2.1
+- Fixed FastCGI impersonation for persistent connections on Windows. (Dmitry)
 - Added a meta tag to phpinfo() output to prevent search engines from indexing 
   the page. (Ilia)
 - Added missing object support to file_put_contents(). (Ilia)
http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/fastcgi.c?r1=1.4.2.13.2.11&r2=1.4.2.13.2.12&diff_format=u
Index: php-src/sapi/cgi/fastcgi.c
diff -u php-src/sapi/cgi/fastcgi.c:1.4.2.13.2.11 
php-src/sapi/cgi/fastcgi.c:1.4.2.13.2.12
--- php-src/sapi/cgi/fastcgi.c:1.4.2.13.2.11    Mon Oct 16 10:46:59 2006
+++ php-src/sapi/cgi/fastcgi.c  Tue Dec  5 08:55:15 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: fastcgi.c,v 1.4.2.13.2.11 2006/10/16 10:46:59 dmitry Exp $ */
+/* $Id: fastcgi.c,v 1.4.2.13.2.12 2006/12/05 08:55:15 dmitry Exp $ */
 
 #include "php.h"
 #include "fastcgi.h"
@@ -616,6 +616,13 @@
        if (destroy) {
                zend_hash_destroy(&req->env);
        }
+
+#ifdef _WIN32
+       if (is_impersonate) {
+               RevertToSelf();
+       }
+#endif
+
        if ((force || !req->keep) && req->fd >= 0) {
 #ifdef _WIN32
                HANDLE pipe = (HANDLE)_get_osfhandle(req->fd);
@@ -624,9 +631,6 @@
                        FlushFileBuffers(pipe);
                }
                DisconnectNamedPipe(pipe);
-               if (is_impersonate) {
-                       RevertToSelf();
-               }
 #else
                if (!force) {
                        char buf[8];
@@ -673,12 +677,7 @@
                                        }
                                }
                                CloseHandle(ov.hEvent);
-                               if (is_impersonate && 
!ImpersonateNamedPipeClient(pipe)) {
-                                       DisconnectNamedPipe(pipe);
-                                       req->fd = -1;
-                               } else {
-                                       req->fd = req->listen_socket;
-                               }
+                               req->fd = req->listen_socket;
                                FCGI_UNLOCK(req->listen_socket);
 #else
                                {
@@ -718,6 +717,15 @@
                        return -1;
                }
                if (fcgi_read_request(req)) {
+#ifdef _WIN32
+                       if (is_impersonate) {
+                               pipe = (HANDLE)_get_osfhandle(req->fd);
+                               if (!ImpersonateNamedPipeClient(pipe)) {
+                                       fcgi_close(req, 1, 1);
+                                       continue;
+                               }
+                       }
+#endif
                        return req->fd;
                } else {
                        fcgi_close(req, 1, 1);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to