UnicastRemoteObject.export() does not throw SecurityException in Linux build if
the SecurityManager does not grant listen permission to the specified port.
See the following program:
import java.rmi.*;
import java.rmi.server.*;
import java.security.Permission;
import java.security.Permissions;
import java.net.SocketPermission;
import java.util.Enumeration;
public class UnicastTest {
public static void main(String[] args) {
Permissions perm = new Permissions();
perm.add(new SocketPermission("127.0.0.1:3000", "listen"));
System.setSecurityManager(new NoPermissionSM(perm));
try {
ExportImpl2 obj = new ExportImpl2();
UnicastRemoteObject.exportObject(obj, 3000);
System.out.println("SecurityException expected");
} catch (SecurityException e) {
System.out.println("OKAY");
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
interface ExceptionRemote extends Remote {
}
class ExportImpl2 implements ExceptionRemote {
}
class NoPermissionSM extends SecurityManager {
Permissions perms;
/**
* Construct a SecurityManager that will forbid all permissions
* specified in perms.
*/
public NoPermissionSM(Permissions perms) {
this.perms = perms;
}
/**
* Construct a SecurityManager that will not forbid any
* permission.
*/
public NoPermissionSM() {
this.perms = new Permissions();
}
/**
* Forbids actions which are specified in the constructor.
* @param p checked permission
*/
public void checkPermission(Permission p) {
for (Enumeration enum = perms.elements(); enum.hasMoreElements();) {
Permission curPerm = (Permission) enum.nextElement();
if (curPerm.implies(p)) {
throw new SecurityException();
}
}
}
/**
* Forbids actions which are specified in the constructor.
* @param p checked permission
*/
public void checkPermission(Permission p, Object context) {
for (Enumeration enum = perms.elements(); enum.hasMoreElements();) {
Permission curPerm = (Permission) enum.nextElement();
if (curPerm.implies(p)) {
throw new SecurityException();
}
}
}
}
The output in latest Linux build is:
$ /java/re/j2se/1.5.0/promoted/latest/binaries/linux-i586/bin/java -classpath . UnicastTest
SecurityException expected
The output in latest Solaris build is:
$ /java/re/j2se/1.5/promoted/latest/binaries/solaris-sparc/bin/java -classpath . UnicastTest
OKAY
###@###.### 10/12/04 21:24 GMT