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]>

Reply via email to