summaryrefslogtreecommitdiff
path: root/sapi/cgi/cgi_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'sapi/cgi/cgi_main.c')
-rw-r--r--sapi/cgi/cgi_main.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index d45037150e..a94b26669d 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -81,6 +81,9 @@
#ifdef PHP_FASTCGI
#include "fcgi_config.h"
#include "fcgiapp.h"
+/* don't want to include fcgios.h, causes conflicts */
+extern int OS_SetImpersonate(void);
+
FCGX_Stream *in, *out, *err;
FCGX_ParamArray envp;
@@ -475,6 +478,9 @@ int main(int argc, char *argv[])
int max_requests = 500;
int requests = 0;
int fastcgi = !FCGX_IsCGI();
+#ifdef PHP_WIN32
+ int impersonate = 0;
+#endif
if (fastcgi) {
/* Calculate environment size */
@@ -729,6 +735,18 @@ If you are running IIS, you may safely set cgi.force_redirect=0 in php.ini.\n\
#ifdef PHP_FASTCGI
/* start of FAST CGI loop */
+
+#ifdef PHP_WIN32
+ /* attempt to set security impersonation for fastcgi
+ will only happen on NT based OS, others will ignore it. */
+ if (fastcgi) {
+ if (cfg_get_long("fastcgi.impersonate", &impersonate) == FAILURE) {
+ impersonate = 0;
+ }
+ if (impersonate) OS_SetImpersonate();
+ }
+#endif
+
while (!fastcgi
|| FCGX_Accept( &in, &out, &err, &cgi_env ) >= 0) {