diff options
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | TSRM/tsrm_win32.c | 12 |
2 files changed, 12 insertions, 4 deletions
@@ -176,7 +176,9 @@ PHP NEWS com, Kalle) - Fixed bug #38091 (Mail() does not use FQDN when sending SMTP helo). (Kalle, Rick Yorgason) -- Fixed bug #28038 (Sent incorrect RCPT TO commands to SMTP server) (Garrett) +- Fixed bug #28038 (Sent incorrect RCPT TO commands to SMTP server) (Garrett) +- Fixed bug #27051 (Impersonation with FastCGI does not exec process as + impersonated user). (Pierre) 30 Jun 2009, PHP 5.3.0 - Upgraded bundled PCRE to version 7.9. (Nuno) diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c index 19139dd7ae..9cf1fa44ae 100644 --- a/TSRM/tsrm_win32.c +++ b/TSRM/tsrm_win32.c @@ -311,6 +311,7 @@ TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, SECURITY_ATTRIBUTES security; HANDLE in, out; DWORD dwCreateFlags = 0; + BOOL res; process_pair *proc; char *cmd; int i; @@ -370,12 +371,17 @@ TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c ")+2); sprintf(cmd, "%s /c \"%s\"", TWG(comspec), command); - if (!CreateProcess(NULL, cmd, &security, &security, security.bInheritHandle, dwCreateFlags, env, cwd, &startup, &process)) { - free(cmd); - return NULL; + if(TWG(impersonation_token) == NULL) { + res = CreateProcess(NULL, cmd, &security, &security, security.bInheritHandle, dwCreateFlags, env, cwd, &startup, &process); + } else { + res = CreateProcessAsUser(TWG(impersonation_token), NULL, cmd, &security, &security, security.bInheritHandle, dwCreateFlags, env, cwd, &startup, &process); } free(cmd); + if (!res) { + return NULL; + } + CloseHandle(process.hThread); proc = process_get(NULL TSRMLS_CC); |