Hi Derick, > > can you resend that patch to php-dev?
Ofcourse. The patch against the php-4.0.6 php4isapi.c is attached. If you would like to have a patch against the current CVS version then please let me know so i can make time to test it first. Please note that we weren't able to test this fix with other webservers than IIS. Regards, Gijsbert te Riet. Muze.
--- php4isapi.c Fri Nov 30 12:33:52 2001 +++ isapi.fix Fri Nov 30 12:35:29 2001 @@ -17,6 +17,7 @@ +----------------------------------------------------------------------+ */ + #ifdef PHP_WIN32 # include <windows.h> # include <process.h> @@ -81,11 +82,13 @@ "CONTENT_LENGTH", "CONTENT_TYPE", "PATH_TRANSLATED", + "PATH_INFO", "QUERY_STRING", "REMOTE_ADDR", "REMOTE_HOST", "REMOTE_USER", "REQUEST_METHOD", + "REQUEST_URI", "SERVER_NAME", "SERVER_PORT", "SERVER_PROTOCOL", @@ -462,38 +465,73 @@ #endif +static char *sapi_isapi_get_server_var(LPEXTENSION_CONTROL_BLOCK lpECB, char +*varname, DWORD *buffer_len) { + char *buffer; + + buffer=emalloc(*buffer_len=ISAPI_SERVER_VAR_BUF_SIZE); + if (!lpECB->GetServerVariable(lpECB->ConnID, varname, buffer, buffer_len)) { + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { + + buffer = (char *) erealloc(buffer, *buffer_len); + if (!lpECB->GetServerVariable(lpECB->ConnID, varname, buffer, +buffer_len)) { + + efree(buffer); + buffer=0; + + } + + } else { + + efree(buffer); + buffer=0; + } + } + + return buffer; +} + static void sapi_isapi_register_server_variables2(char **server_variables, LPEXTENSION_CONTROL_BLOCK lpECB, zval *track_vars_array, char **recorded_values ELS_DC PLS_DC) { char **p=server_variables; - DWORD variable_len; - char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE]; + DWORD varsize, varbufsize; char *variable_buf; + char *var_buf1, *var_buf2; while (*p) { - variable_len = ISAPI_SERVER_VAR_BUF_SIZE; - if (lpECB->GetServerVariable(lpECB->ConnID, *p, static_variable_buf, &variable_len) - && static_variable_buf[0]) { - php_register_variable(*p, static_variable_buf, track_vars_array ELS_CC PLS_CC); - if (recorded_values) { - recorded_values[p-server_variables] = estrndup(static_variable_buf, variable_len); + + if (variable_buf=sapi_isapi_get_server_var(lpECB, *p, &varsize)) { + // translate PATH_INFO to Apache compatible PATH_INFO + if (strcmp(*p, "PATH_INFO") == 0) { + if (var_buf1=sapi_isapi_get_server_var(lpECB, +"SCRIPT_NAME", &varbufsize)) { + memmove(variable_buf, variable_buf + +strlen(var_buf1), strlen(variable_buf) - strlen(var_buf1) + 1); + efree(var_buf1); + } } - } else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { - variable_buf = (char *) emalloc(variable_len); - if (lpECB->GetServerVariable(lpECB->ConnID, *p, variable_buf, &variable_len) - && variable_buf[0]) { - php_register_variable(*p, variable_buf, track_vars_array ELS_CC PLS_CC); + + // translate PATH_TRANSLATED to Apache compatible +PATH_TRANSLATED + if (strcmp(*p, "PATH_TRANSLATED") == 0) { + if (var_buf1=sapi_isapi_get_server_var(lpECB, +"PATH_INFO", &varbufsize)) { + if (var_buf2=sapi_isapi_get_server_var(lpECB, +"SCRIPT_NAME", &varbufsize)) { + +variable_buf[strlen(variable_buf)-(strlen(var_buf1)-strlen(var_buf2))]='\0'; + efree(var_buf2); + } + efree(var_buf1); + } } + + php_register_variable(*p, variable_buf, track_vars_array +ELS_CC PLS_CC); if (recorded_values) { - recorded_values[p-server_variables] = variable_buf; - } else { - efree(variable_buf); + recorded_values[p-server_variables] = +estrndup(variable_buf, varsize); } + + efree(variable_buf); } p++; } } + static void sapi_isapi_register_server_variables(zval *track_vars_array ELS_DC SLS_DC PLS_DC) { DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE; @@ -647,9 +685,25 @@ static void init_request_info(sapi_globals_struct *sapi_globals, LPEXTENSION_CONTROL_BLOCK lpECB) { + DWORD varbufsize; + char *var_buf1, *var_buf2; + + SG(request_info).request_method = lpECB->lpszMethod; SG(request_info).query_string = lpECB->lpszQueryString; SG(request_info).path_translated = lpECB->lpszPathTranslated; + + // translate PATH_TRANSLATED to Apache compatible PATH_TRANSLATED + if (var_buf1=sapi_isapi_get_server_var(lpECB, "PATH_INFO", &varbufsize)) { + if (var_buf2=sapi_isapi_get_server_var(lpECB, "SCRIPT_NAME", +&varbufsize)) { + +SG(request_info).path_translated[strlen(SG(request_info).path_translated)-(strlen(var_buf1)-strlen(var_buf2))]='\0'; + + + efree(var_buf2); + } + efree(var_buf1); + } + + SG(request_info).request_uri = lpECB->lpszPathInfo; SG(request_info).content_type = lpECB->lpszContentType; SG(request_info).content_length = lpECB->cbTotalBytes;
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]