ANALIA DE PEDRO SANTAMARIA wrote:
I'm going to try to explain myself better.

I believe that we understand what you seem to want to do, but that there are some intrinsic problems with the way in which you are looking at this.


What I'm trying to do is create a permission system in Tomcat. This
permission system must allow or avoid the next connections:
- Receive from IP. The application with this permission only can accept
connections (or receive information) from an IP. It can't send anything or
connect to anywhere.
- Receive All. The application with this permission can accept connections
(or receive information) from any IP. It can't send anything or connect to
anywhere.
- Send and Receive IP. The application with this permission can accept
connection and connect to an IP.
- Send to IP.  The application with this permission only can connect or
send information to an IP. It can't receive information or accept
connections from anywhere.
- Send to All. The application with this permission can connect or send
information to any IP. It can't receive information or accept connections
from anywhere.


"Accepting connections from" and "processing HTTP requests from" are two essentially different things, and happen at different levels/moments in time.
"Connecting to" and "sending information to" is a third different and 
independent thing.

Roughly :
- a TCP connection is "accepted" at the Tomcat/Connector level, long before anything starts reading on that connection to receive the actuall HTTP request. - then the HTTP request is read, and it is determined which application (if any) should process that request
- and it is only after the above, that an application would (or would not) 
process the request

In other words, if you really want to "block connections" (or allow them) from selected IP's, then this is something that happens before the target application is even known, and it cannot be specific per application.

On the other hand, when the connection has been accepted and the request has been read and the target application has been selected, it is possible at the level of the selected application, to check the source IP, and reject (or accept) the request.
(But at this stage, not the connection anymore, it's too late for that).

The second part concerns what the application can do, once it is running to 
process a request.

Tomcat has basically no knowledge of any incoming or outgoing connection that the application itself may be setting up with any "third party". Tomcat itself is not involved in such connections, and it has no way to interfere with them. That is the domain of the JVM which runs the application code, and it is at that level that you can allow/disable such connections.


 With the SocketPermission, I can avoid that one application connects to an
specific IP or any IP (not granting SocketPermission "connect"). But if I
try to avoid that one IP connects to the application (not granting
SocketPermission "accept"), it doesn't restrict all connections. For
example, I can connect to the application from a browser in another host.
(I'm using the Security Manager in a correct way because it works with
others permissions).

If I add  <Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="localhost"/> to the context.xml, I can restrict the previous
example, but with this I restrict all connections, so it doesn't allow me
to do what I want.

If I combine the SocketPermission with the RemoteHostValve I can grant the
first three permissions (or connections) in my list above. But I need to
restrict the incoming connections (accept connections) to grant the last
two.


Yes, and it is all perfectly logical that it would be that way, because of where and when things happen.

What I am trying to say, is that it is your requirements that do not fit the reality of how things work. You are trying to combine, under one artificial "permission name", things which are difficult to combine because they happen at different levels and have different scopes.

For example, if you do not grant to an application the SocketPermission "accept", it means that this application cannot open it's *own* listening socket and accept connections on it. But this concerns listening sockets that your application would want to open on its own, and it is totally distinct from (and has nothing to do with) the listening socket on which Tomcat accepts HTTP requests (for this application and others).

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to