Author: mturk Date: Tue Nov 8 18:34:56 2011 New Revision: 1199382 URL: http://svn.apache.org/viewvc?rev=1199382&view=rev Log: Implement BZ51253 on IIS as well
Modified: tomcat/jk/trunk/native/iis/jk_isapi_plugin.c tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml Modified: tomcat/jk/trunk/native/iis/jk_isapi_plugin.c URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/iis/jk_isapi_plugin.c?rev=1199382&r1=1199381&r2=1199382&view=diff ============================================================================== --- tomcat/jk/trunk/native/iis/jk_isapi_plugin.c (original) +++ tomcat/jk/trunk/native/iis/jk_isapi_plugin.c Tue Nov 8 18:34:56 2011 @@ -531,6 +531,7 @@ struct isapi_private_data_t unsigned int bytes_read_so_far; int chunk_content; /* Whether we're responding with Transfer-Encoding: chunked content */ + char *err_hdrs; LPEXTENSION_CONTROL_BLOCK lpEcb; }; @@ -903,7 +904,7 @@ static void write_error_response(PHTTP_F HSE_IO_SYNC); } -static void write_error_message(LPEXTENSION_CONTROL_BLOCK lpEcb, int err) +static void write_error_message(LPEXTENSION_CONTROL_BLOCK lpEcb, int err, const char *err_hdrs) { DWORD len; char status[1024]; @@ -927,13 +928,27 @@ static void write_error_message(LPEXTENS } } lpEcb->dwHttpStatusCode = err; - StringCbPrintf(status, sizeof(status), "%d %s", err, status_reason(err)); + /* XXX: Should we allow something beside 401? + */ + if (err_hdrs && err == 401) { + /* Include extra error headers */ + HRESULT hr = StringCbCopy(body, sizeof(body), err_hdrs); + if (FAILED(hr) || strlen(body) > (8191 - strlen(CONTENT_TYPE))) { + /* Header is too long. + */ + jk_log(logger, JK_LOG_WARNING, + "error header too long (%d bytes requested).", + strlen(err_hdrs)); + body[0] = '\0'; + } + } + StringCbCat(body, sizeof(body), CONTENT_TYPE); lpEcb->ServerSupportFunction(lpEcb->ConnID, HSE_REQ_SEND_RESPONSE_HEADER, status, 0, - (LPDWORD)CONTENT_TYPE); + (LPDWORD)body); /* First write the HEAD */ len = ISIZEOF(HTML_ERROR_HEAD) - 1; lpEcb->WriteClient(lpEcb->ConnID, @@ -984,12 +999,9 @@ static int JK_METHOD start_response(jk_w unsigned int h; for (h = 0; h < num_of_headers; h++) { if (!strcasecmp(header_names[h], "WWW-Authenticate")) { - /* - * TODO: we need to save a copy of header_values[h] - * for later reuse in write_error_message() - * which is called later on form HttpExtensionProc - * because of use_server_error_pages. - */ + p->err_hdrs = jk_pool_strcatv(&p->p, + "WWW-Authenticate:", + header_values[h], CRLF, NULL); found = JK_TRUE; } } @@ -2295,7 +2307,8 @@ DWORD WINAPI HttpExtensionProc(LPEXTENSI " for worker=%s", s.http_response_status, worker_name); lpEcb->dwHttpStatusCode = s.http_response_status; - write_error_message(lpEcb, s.http_response_status); + write_error_message(lpEcb, s.http_response_status, + private_data.err_hdrs); } else { rc = HSE_STATUS_SUCCESS; @@ -2315,7 +2328,7 @@ DWORD WINAPI HttpExtensionProc(LPEXTENSI "service() failed with http error %d", is_error); } lpEcb->dwHttpStatusCode = is_error; - write_error_message(lpEcb, is_error); + write_error_message(lpEcb, is_error, private_data.err_hdrs); } e->done(&e, logger); } Modified: tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml?rev=1199382&r1=1199381&r2=1199382&view=diff ============================================================================== --- tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml (original) +++ tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml Tue Nov 8 18:34:56 2011 @@ -44,6 +44,10 @@ <br /> <subsection name="Native"> <changelog> + <fix> + <bug>51253</bug>: Forward WWW-Authenticate header when using + server generated error pages (rjung, mturk). + </fix> <update> <bug>46406</bug>: IIS: Support relative paths in configuration. The paths are presumed to be relative from isapi_redirect.dll. (mturk) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org