dmitry Thu Apr 19 13:41:37 2007 UTC
Modified files: (Branch: PHP_4_4)
/php-src/sapi/cgi/libfcgi fcgiapp.c os_win32.c
Log:
Fixed support for IIS FastCGI technical preview
http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/libfcgi/fcgiapp.c?r1=1.1.4.3.2.3&r2=1.1.4.3.2.4&diff_format=u
Index: php-src/sapi/cgi/libfcgi/fcgiapp.c
diff -u php-src/sapi/cgi/libfcgi/fcgiapp.c:1.1.4.3.2.3
php-src/sapi/cgi/libfcgi/fcgiapp.c:1.1.4.3.2.4
--- php-src/sapi/cgi/libfcgi/fcgiapp.c:1.1.4.3.2.3 Thu Mar 1 07:51:07 2007
+++ php-src/sapi/cgi/libfcgi/fcgiapp.c Thu Apr 19 13:41:37 2007
@@ -11,7 +11,7 @@
*
*/
#ifndef lint
-static const char rcsid[] = "$Id: fcgiapp.c,v 1.1.4.3.2.3 2007/03/01 07:51:07
dmitry Exp $";
+static const char rcsid[] = "$Id: fcgiapp.c,v 1.1.4.3.2.4 2007/04/19 13:41:37
dmitry Exp $";
#endif /* not lint */
#include <assert.h>
@@ -2229,10 +2229,6 @@
if (reqDataPtr->ipcFd < 0) {
return (errno > 0) ? (0 - errno) : -9999;
}
-#ifdef _WIN32
- } else if (!OS_StartImpersonation()) {
- FCGX_Free(reqDataPtr, 1);
-#endif
}
/*
* A connection is open. Read from the connection in order to
@@ -2279,6 +2275,16 @@
FCGX_Free(reqDataPtr, 1);
} /* for (;;) */
+
+#ifdef _WIN32
+ /*
+ * impersonate the client
+ */
+ if (!OS_StartImpersonation()) {
+ goto TryAgain;
+ }
+#endif
+
/*
* Build the remaining data structures representing the new
* request and return successfully to the caller.
http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/libfcgi/os_win32.c?r1=1.6.2.1.4.3&r2=1.6.2.1.4.4&diff_format=u
Index: php-src/sapi/cgi/libfcgi/os_win32.c
diff -u php-src/sapi/cgi/libfcgi/os_win32.c:1.6.2.1.4.3
php-src/sapi/cgi/libfcgi/os_win32.c:1.6.2.1.4.4
--- php-src/sapi/cgi/libfcgi/os_win32.c:1.6.2.1.4.3 Thu Mar 1 07:51:07 2007
+++ php-src/sapi/cgi/libfcgi/os_win32.c Thu Apr 19 13:41:37 2007
@@ -17,7 +17,7 @@
* significantly more enjoyable.)
*/
#ifndef lint
-static const char rcsid[] = "$Id: os_win32.c,v 1.6.2.1.4.3 2007/03/01 07:51:07
dmitry Exp $";
+static const char rcsid[] = "$Id: os_win32.c,v 1.6.2.1.4.4 2007/04/19 13:41:37
dmitry Exp $";
#endif /* not lint */
#define WIN32_LEAN_AND_MEAN
@@ -60,6 +60,7 @@
static BOOLEAN shutdownNow = FALSE;
static BOOLEAN bImpersonate = FALSE;
+static BOOLEAN bImpersonated = FALSE;
/*
* An enumeration of the file types
* supported by the FD_TABLE structure.
@@ -308,14 +309,25 @@
int OS_StartImpersonation(void)
{
- return (!bImpersonate ||
- ((hListen != INVALID_HANDLE_VALUE) &&
- !ImpersonateNamedPipeClient(hListen)));
+ if (!bImpersonate) {
+ return 1;
+ } else if (hListen == INVALID_HANDLE_VALUE) {
+ return 1;
+ } else {
+ if (ImpersonateNamedPipeClient(hListen)) {
+ bImpersonated = TRUE;
+ return 1;
+ }
+ }
+ return 0;
}
void OS_StopImpersonation(void)
{
- if (bImpersonate) RevertToSelf();
+ if (bImpersonated) {
+ bImpersonated = FALSE;
+ RevertToSelf();
+ }
}
/*
@@ -1772,18 +1784,10 @@
}
}
- //
- // impersonate the client
- //
- if(bImpersonate && OS_StartImpersonation()) {
- DisconnectNamedPipe(hListen);
- } else {
- ipcFd = Win32NewDescriptor(FD_PIPE_SYNC, (int) hListen, -1);
- if (ipcFd == -1)
- {
- DisconnectNamedPipe(hListen);
- OS_StopImpersonation();
- }
+ ipcFd = Win32NewDescriptor(FD_PIPE_SYNC, (int) hListen, -1);
+ if (ipcFd == -1)
+ {
+ DisconnectNamedPipe(hListen);
}
return ipcFd;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php