The AJP protocol allows forwarding of arbitrary request attributes. For instance we allow to send httpd environment variables via JkEnvVar as request attributes to the backend.

The attributes can be retrieved on the backend side via request.getAttribute(attributeName).

Unfortunately attributes send via AJP are not included in the list produced by request.getAttributeNames().

As far as I can see, mod_jk doesn't use AJP attribute forwarding in any internal way. So it should be save (and helpful) to include the request attributes forwarded via AJP in request.getAttributeNames().

In catalina/src/share/org/apache/catalina/connector/Request.java we have two types of attributes, the internal ones, and the ones belonging to the coyoteRequest. The AJP attributes unfortunately belong to the coyoteRequest.

When retrieving an attribute via getAttribute(), we first look for an internal one

Object attr=attributes.get(name);
if(attr!=null)
    return(attr);

and then we query the coyoteRequest:

attr =  coyoteRequest.getAttribute(name);
if(attr != null)
    return attr;

When we list all attribute names in getAttributeNames(), we only return the internal ones:

return new Enumerator(attributes.keySet(), true);

Question 1: Are there any secrets or internal attributes hidden in the coyoteRequest? If no, I would suggest to return the union of the names in the internal attributes and the coyoteRequest ones. If yes, is there a robust way of distinguishing the TC private attributes from the public ones?

Question 2: In removeAttribute() we never pass any key along to the coyoteRequest. Either it is an internal attribute, or we don't remove it. In putAttribute() we pass it along to the coyoteRequest iff the name of the attribute starts with "org.apache.tomcat.". Are there any known reasons for the inconsistency? Could we always pass removeAttribute and putAttribute along to the coyoteRequest after handling the internal attributes, or is therew something we need to protect?

Question 3: there is some special handling for SSL related atributes. When one of them is first retrieved, a hook parses the data, sets the coyoteRequest SSL attributes and then they are copied from the coyoteRequest to the internal attributes. If we add the coyote request attributes to the result of getAttributeNames(), we will no longer need to copy, because when retrieving via getAttribute() we check coyoteRequest anyhow. Right?

Question 4: There are a lot of additional request attribute names defined in catalina/src/share/org/apache/catalina/Globals.java. Are those held i either the above Request object or the coyote request? Do we need to protect them against overwriting, deletion or even showing their existence?

Any help appreciated.

Regards,

Rainer


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to