"Kevan Miller" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> The Geronimo project has encountered a TCK issue running with Tomcat
> 5.5.12. We'd appreciate your help with the problem.
>
I hope that you know that you've just violated your NDA by posting this on a
public list :).
> In the test, a POST Request without a message body is being received and
> a 403 "The request body was too large to be cached during the
> authentication process" is being improperly returned by Tomcat.
>
>
> I believe the problem is in
> o.a.c.authenticator.FormAuthenticator.saveRequest() (or subsequent
> processing). In 5.5.12, if the message type is POST, saveRequest() will
> always attempt to save the Request body. The following code is new in
> saveRequest() since 5.5.9.
>
> if ("POST".equalsIgnoreCase(request.getMethod())) {
> ByteChunk body = new ByteChunk();
> body.setLimit(request.getConnector().getMaxSavePostSize());
>
> byte[] buffer = new byte[4096];
> int bytesRead;
> InputStream is = request.getInputStream();
>
> while ( (bytesRead = is.read(buffer) ) >= 0) {
> body.append(buffer, 0, bytesRead);
> }
> saved.setBody(body);
> }
>
> AFAICT, this code is assuming that there will always be a message body in
> the POST Request. However, this is not necessarily the case (and is
> certainly not true for the problem at hand). Eventually,
> SocketInputStream.read() is called from within
> o.a.coyote.http11.InternalReadBuffer.fill(). This call will throw a
> SocketTimeoutException.
>
Then the test is broken. It should either have a 'Content-Length: 0' header
or a 'Transfer-Encoding: chunked' header with a '0' content delimater. I
don't do NDAs, so I don't know which it is. If Sun can't follow the RFC, I
really don't care.
> The following code in FormAuthenticator.authenticate() interprets this
> IOException as a Request body overflow:
>
> try {
> saveRequest(request, session);
> } catch (IOException ioe) {
> log.debug("Request body too big to save during
> authentication");
> response.sendError(HttpServletResponse.SC_FORBIDDEN,
> sm.getString ("authenticator.requestBodyTooBig"));
> return (false);
> }
>
> Thanks for your help...
>
> --kevan
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]