nacho 02/04/09 16:09:25
Modified: jk/native/iis jk_isapi_plugin.c
Log:
* Fix for #2342
Revision Changes Path
1.15 +73 -23 jakarta-tomcat-connectors/jk/native/iis/jk_isapi_plugin.c
Index: jk_isapi_plugin.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/iis/jk_isapi_plugin.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- jk_isapi_plugin.c 13 Jan 2002 21:54:32 -0000 1.14
+++ jk_isapi_plugin.c 9 Apr 2002 23:09:25 -0000 1.15
@@ -60,7 +60,7 @@
* Author: Gal Shachor <[EMAIL PROTECTED]> *
* Author: Larry Isaacs <[EMAIL PROTECTED]> *
* Author: Ignacio J. Ortega <[EMAIL PROTECTED]> *
- * Version: $Revision: 1.14 $ *
+ * Version: $Revision: 1.15 $ *
***************************************************************************/
// This define is needed to include wincrypt,h, needed to get client certificates
@@ -113,6 +113,7 @@
#define BAD_PATH -2
#define MAX_SERVERNAME 128
+
#define GET_SERVER_VARIABLE_VALUE(name, place) { \
(place) = NULL; \
huge_buf_sz = sizeof(huge_buf); \
@@ -145,9 +146,12 @@
static int using_ini_file = JK_FALSE;
static int is_inited = JK_FALSE;
static int is_mapread = JK_FALSE;
+static int iis5 = -1;
+
static jk_uri_worker_map_t *uw_map = NULL;
static jk_logger_t *logger = NULL;
static char *SERVER_NAME = "SERVER_NAME";
+static char *SERVER_SOFTWARE = "SERVER_SOFTWARE";
static char extension_uri[INTERNET_MAX_URL_LENGTH] = "/jakarta/isapi_redirect.dll";
@@ -610,7 +614,8 @@
pVer->dwFlags = SF_NOTIFY_ORDER_HIGH |
SF_NOTIFY_SECURE_PORT |
SF_NOTIFY_NONSECURE_PORT |
- SF_NOTIFY_PREPROC_HEADERS;
+ SF_NOTIFY_PREPROC_HEADERS |
+ SF_NOTIFY_AUTH_COMPLETE;
strcpy(pVer->lpszFilterDesc, VERSION_STRING);
@@ -630,8 +635,7 @@
char serverName[MAX_SERVERNAME];
DWORD dwLen = sizeof(serverName);
- if (pfc->GetServerVariable(pfc, SERVER_NAME, serverName, &dwLen))
- {
+ if (pfc->GetServerVariable(pfc, SERVER_NAME, serverName, &dwLen)){
if (dwLen > 0) serverName[dwLen-1] = '\0';
if (init_jk(serverName))
is_mapread = JK_TRUE;
@@ -641,19 +645,66 @@
is_inited = JK_FALSE;
}
+ if (is_inited && (iis5 < 0) ) {
+ char serverSoftware[256];
+ DWORD dwLen = sizeof(serverSoftware);
+ iis5=0;
+ if (pfc->GetServerVariable(pfc,SERVER_SOFTWARE, serverSoftware, &dwLen)){
+ iis5=(atof(serverSoftware + 14) >= 5.0);
+ if (iis5) {
+ jk_log(logger, JK_LOG_INFO,"Detected IIS >= 5.0\n");
+ } else {
+ jk_log(logger, JK_LOG_INFO,"Detected IIS < 5.0\n");
+ }
+ }
+ }
+
if (is_inited &&
- (SF_NOTIFY_PREPROC_HEADERS == dwNotificationType)) {
- PHTTP_FILTER_PREPROC_HEADERS p =
(PHTTP_FILTER_PREPROC_HEADERS)pvNotification;
+ (((SF_NOTIFY_PREPROC_HEADERS == dwNotificationType) && !iis5) ||
+ ((SF_NOTIFY_AUTH_COMPLETE == dwNotificationType) && iis5)
+ )
+ )
+ {
char uri[INTERNET_MAX_URL_LENGTH];
char snuri[INTERNET_MAX_URL_LENGTH]="/";
char Host[INTERNET_MAX_URL_LENGTH];
char Translate[INTERNET_MAX_URL_LENGTH];
+ BOOL (WINAPI * GetHeader) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ LPSTR lpszName,
+ LPVOID lpvBuffer,
+ LPDWORD lpdwSize
+ );
+
+ BOOL (WINAPI * SetHeader) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ LPSTR lpszName,
+ LPSTR lpszValue
+ );
+
+ BOOL (WINAPI * AddHeader) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ LPSTR lpszName,
+ LPSTR lpszValue
+ );
+
char *query;
DWORD sz = sizeof(uri);
DWORD szHost = sizeof(Host);
DWORD szTranslate = sizeof(Translate);
+ if (iis5) {
+
GetHeader=((PHTTP_FILTER_AUTH_COMPLETE_INFO)pvNotification)->GetHeader;
+
SetHeader=((PHTTP_FILTER_AUTH_COMPLETE_INFO)pvNotification)->SetHeader;
+
AddHeader=((PHTTP_FILTER_AUTH_COMPLETE_INFO)pvNotification)->AddHeader;
+ } else {
+
GetHeader=((PHTTP_FILTER_PREPROC_HEADERS)pvNotification)->GetHeader;
+
SetHeader=((PHTTP_FILTER_PREPROC_HEADERS)pvNotification)->SetHeader;
+
AddHeader=((PHTTP_FILTER_PREPROC_HEADERS)pvNotification)->AddHeader;
+ }
+
+
jk_log(logger, JK_LOG_DEBUG,
"HttpFilterProc started\n");
@@ -661,12 +712,12 @@
/*
* Just in case somebody set these headers in the request!
*/
- p->SetHeader(pfc, URI_HEADER_NAME, NULL);
- p->SetHeader(pfc, QUERY_HEADER_NAME, NULL);
- p->SetHeader(pfc, WORKER_HEADER_NAME, NULL);
- p->SetHeader(pfc, TOMCAT_TRANSLATE_HEADER_NAME, NULL);
+ SetHeader(pfc, URI_HEADER_NAME, NULL);
+ SetHeader(pfc, QUERY_HEADER_NAME, NULL);
+ SetHeader(pfc, WORKER_HEADER_NAME, NULL);
+ SetHeader(pfc, TOMCAT_TRANSLATE_HEADER_NAME, NULL);
- if (!p->GetHeader(pfc, "url", (LPVOID)uri, (LPDWORD)&sz)) {
+ if (!GetHeader(pfc, "url", (LPVOID)uri, (LPDWORD)&sz)) {
jk_log(logger, JK_LOG_ERROR,
"HttpFilterProc error while getting the url\n");
return SF_STATUS_REQ_ERROR;
@@ -699,7 +750,7 @@
}
getparents(uri);
- if(p->GetHeader(pfc, "Host:", (LPVOID)Host, (LPDWORD)&szHost)) {
+ if(GetHeader(pfc, "Host:", (LPVOID)Host, (LPDWORD)&szHost)) {
strcat(snuri,Host);
strcat(snuri,uri);
jk_log(logger, JK_LOG_DEBUG,
@@ -725,7 +776,7 @@
/* get URI we should forward */
if (uri_select_option == URI_SELECT_OPT_UNPARSED) {
/* get original unparsed URI */
- p->GetHeader(pfc, "url", (LPVOID)uri, (LPDWORD)&sz);
+ GetHeader(pfc, "url", (LPVOID)uri, (LPDWORD)&sz);
/* restore terminator for uri portion */
if (query)
*(query - 1) = '\0';
@@ -748,11 +799,11 @@
forwardURI = uri;
}
- if(!p->AddHeader(pfc, URI_HEADER_NAME, forwardURI) ||
+ if(!AddHeader(pfc, URI_HEADER_NAME, forwardURI) ||
( (query != NULL && strlen(query) > 0)
- ? !p->AddHeader(pfc, QUERY_HEADER_NAME, query) : FALSE )
||
- !p->AddHeader(pfc, WORKER_HEADER_NAME, worker) ||
- !p->SetHeader(pfc, "url", extension_uri)) {
+ ? !AddHeader(pfc, QUERY_HEADER_NAME, query) : FALSE ) ||
+ !AddHeader(pfc, WORKER_HEADER_NAME, worker) ||
+ !SetHeader(pfc, "url", extension_uri)) {
jk_log(logger, JK_LOG_ERROR,
"HttpFilterProc error while adding request headers\n");
return SF_STATUS_REQ_ERROR;
@@ -762,14 +813,14 @@
* that the extension proc will be called.
* This allows the servlet to handle 'Translate: f'.
*/
- if(p->GetHeader(pfc, "Translate:", (LPVOID)Translate,
(LPDWORD)&szTranslate) &&
+ if(GetHeader(pfc, "Translate:", (LPVOID)Translate,
(LPDWORD)&szTranslate) &&
Translate != NULL && szTranslate > 0) {
- if (!p->AddHeader(pfc, TOMCAT_TRANSLATE_HEADER_NAME,
Translate)) {
+ if (!AddHeader(pfc, TOMCAT_TRANSLATE_HEADER_NAME, Translate)) {
jk_log(logger, JK_LOG_ERROR,
"HttpFilterProc error while adding Tomcat-Translate
headers\n");
return SF_STATUS_REQ_ERROR;
}
- p->SetHeader(pfc, "Translate:", NULL);
+ SetHeader(pfc, "Translate:", NULL);
}
} else {
jk_log(logger, JK_LOG_DEBUG,
@@ -828,8 +879,7 @@
if (is_inited && !is_mapread) {
char serverName[MAX_SERVERNAME];
DWORD dwLen = sizeof(serverName);
- if (lpEcb->GetServerVariable(lpEcb->ConnID, SERVER_NAME, serverName,
&dwLen))
- {
+ if (lpEcb->GetServerVariable(lpEcb->ConnID, SERVER_NAME, serverName,
&dwLen)){
if (dwLen > 0) serverName[dwLen-1] = '\0';
if (init_jk(serverName))
is_mapread = JK_TRUE;
@@ -1239,7 +1289,7 @@
GET_SERVER_VARIABLE_VALUE("REMOTE_ADDR", s->remote_addr);
GET_SERVER_VARIABLE_VALUE(SERVER_NAME, s->server_name);
GET_SERVER_VARIABLE_VALUE_INT("SERVER_PORT", s->server_port, 80)
- GET_SERVER_VARIABLE_VALUE("SERVER_SOFTWARE", s->server_software);
+ GET_SERVER_VARIABLE_VALUE(SERVER_SOFTWARE, s->server_software);
GET_SERVER_VARIABLE_VALUE_INT("SERVER_PORT_SECURE", s->is_ssl, 0);
s->method = private_data->lpEcb->lpszMethod;
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>