Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6178018

UnicastRemoteObject.export() does not throw SecurityException in linux build

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P3 P3
    • None
    • 5.0u1
    • core-libs
    • None
    • sparc
    • solaris_9

      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

            peterjones Peter Jones (Inactive)
            xwangsunw Xiaozhong Wang (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: