On 21/02/2011 02:36, Charles Lee wrote:
:
Thanks Chris. You have answer my first question. I have noticed that IP
is important when we try to judge the imply. So it comes my other

Yes, IP is very important. SocketPermission tries to resolve hostnames to IP before asserting checks.

questions:
1. What if the machine is multihost? Two different domains may have the
same IP. (localhost.localdomain vs mytest)

SocketPermission star_All = new
SocketPermission("localhost.localdomain", "listen,accept,connect");
SocketPermission www_All = new SocketPermission("mytest",
"listen,accept,connect");
System.out.println(star_All.implies(www_All));

Return is true.

I think this is reasonable, since you explicitly edited /etc/hosts so that mytest and localhost.localdomain resolve to the same IP. If you try to make a connection to each of these hostnames, then you will actually be trying to connect to the same machine.

2. What if the domain name can not be got from the dns? (*.blabla.bla vs
bla.blabla.bla)

I guess since SocketPermissions are typically useful in asserting privilege before connecting, then this is not such a common problem. Since the host bla.blabla.bla does not resolve you cannot connect to it. The java.net, and I believe nio, socket/channel classes try to resolve the hostname before asserting privileges, and UnknownHostException/UnresolvedAddressException will be thrown at this point.

I guess you have seen trustProxy? This was added for situations where the user is behind a firewall and deferring all actual connections to a proxy. I would have expected that -DtrustProxy=true would cause *.blabla.bla to imply bla.blabla.bla, but it does not. Maybe inProxyWeTrust() should accept wildcards?

-Chris.

Reply via email to