svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/TSRM/tsrm_win32.c trunk/TSRM/tsrm_win32.c
| From: | Pierre-Alain Joye | Date: | Tue, 01 Sep 2009 22:51:31 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/TSRM/tsrm_win32.c trunk/TSRM/tsrm_win32.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-60292@lists.php.net to get a copy of this message | ||
pajoye Tue, 01 Sep 2009 22:51:31 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=287954
Log:
- #27051, create process as impersonated user
Bug: http://bugs.php.net/27051 (Assigned) Impersonation with
FastCGI does not EXEC process as impersonated user
Changed paths:
U php/php-src/branches/PHP_5_3/NEWS
U php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.c
U php/php-src/trunk/TSRM/tsrm_win32.c
Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS 2009-09-01 20:12:02 UTC (rev 287953)
+++ php/php-src/branches/PHP_5_3/NEWS 2009-09-01 22:51:31 UTC (rev 287954)
@@ -176,7 +176,9 @@
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)
Modified: php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.c
===================================================================
--- php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.c 2009-09-01 20:12:02 UTC (rev 287953)
+++ php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.c 2009-09-01 22:51:31 UTC (rev 287954)
@@ -311,6 +311,7 @@
SECURITY_ATTRIBUTES security;
HANDLE in, out;
DWORD dwCreateFlags = 0;
+ BOOL res;
process_pair *proc;
char *cmd;
int i;
@@ -370,12 +371,17 @@
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);
Modified: php/php-src/trunk/TSRM/tsrm_win32.c
===================================================================
--- php/php-src/trunk/TSRM/tsrm_win32.c 2009-09-01 20:12:02 UTC (rev 287953)
+++ php/php-src/trunk/TSRM/tsrm_win32.c 2009-09-01 22:51:31 UTC (rev 287954)
@@ -312,6 +312,7 @@
SECURITY_ATTRIBUTES security;
HANDLE in, out;
DWORD dwCreateFlags = 0;
+ BOOL res;
process_pair *proc;
char *cmd;
int i;
@@ -353,7 +354,6 @@
read = (type[0] == 'r') ? TRUE : FALSE;
mode = ((type_len == 2) && (type[1] == 'b')) ? O_BINARY : O_TEXT;
-
if (read) {
in = dupHandle(in, FALSE);
startup.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
@@ -372,12 +372,17 @@
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);