/[classpath]/classpath/java/lang/SecurityManager.java
ViewVC logotype

Diff of /classpath/java/lang/SecurityManager.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.20.2.1 by tromey, Sat Oct 9 23:16:44 2004 UTC revision 1.20.2.2 by gnu_andrew, Sat Jan 15 17:01:53 2005 UTC
# Line 49  import java.security.AccessControlContex Line 49  import java.security.AccessControlContex
49  import java.security.AccessController;  import java.security.AccessController;
50  import java.security.AllPermission;  import java.security.AllPermission;
51  import java.security.Permission;  import java.security.Permission;
52    import java.security.PrivilegedAction;
53  import java.security.Security;  import java.security.Security;
54  import java.security.SecurityPermission;  import java.security.SecurityPermission;
55  import java.util.PropertyPermission;  import java.util.PropertyPermission;
56    import java.util.StringTokenizer;
57    
58  /**  /**
59   * SecurityManager is a class you can extend to create your own Java   * SecurityManager is a class you can extend to create your own Java
# Line 888  public class SecurityManager Line 890  public class SecurityManager
890     */     */
891    public void checkPackageAccess(String packageName)    public void checkPackageAccess(String packageName)
892    {    {
893      checkPackageList(packageName, "access", "accessClassInPackage.");      checkPackageList(packageName, "package.access", "accessClassInPackage.");
894    }    }
895    
896    /**    /**
# Line 910  public class SecurityManager Line 912  public class SecurityManager
912     */     */
913    public void checkPackageDefinition(String packageName)    public void checkPackageDefinition(String packageName)
914    {    {
915      checkPackageList(packageName, "definition", "defineClassInPackage.");      checkPackageList(packageName, "package.definition", "defineClassInPackage.");
916    }    }
917    
918    /**    /**
# Line 1006  public class SecurityManager Line 1008  public class SecurityManager
1008     * <code>RuntimePermission(permission + packageName)</code>.     * <code>RuntimePermission(permission + packageName)</code>.
1009     *     *
1010     * @param packageName the package name to check access to     * @param packageName the package name to check access to
1011     * @param restriction the list of restrictions, after "package."     * @param restriction "package.access" or "package.definition"
1012     * @param permission the base permission, including the '.'     * @param permission the base permission, including the '.'
1013     * @throws SecurityException if permission is denied     * @throws SecurityException if permission is denied
1014     * @throws NullPointerException if packageName is null     * @throws NullPointerException if packageName is null
1015     * @see #checkPackageAccess(String)     * @see #checkPackageAccess(String)
1016     * @see #checkPackageDefinition(String)     * @see #checkPackageDefinition(String)
1017     */     */
1018    void checkPackageList(String packageName, String restriction,    void checkPackageList(String packageName, final String restriction,
1019                          String permission)                          String permission)
1020    {    {
1021      // Use the toString() hack to do the null check.      if (packageName == null)
1022      Permission p = new RuntimePermission(permission + packageName.toString());          throw new NullPointerException();
1023      String list = Security.getProperty("package." + restriction);  
1024      if (list == null)      String list = (String)AccessController.doPrivileged(new PrivilegedAction() {
1025            public Object run() {
1026                return Security.getProperty(restriction);
1027            }
1028        });
1029    
1030        if (list == null || list.equals(""))
1031        return;        return;
1032      while (! "".equals(packageName))  
1033        String packageNamePlusDot = packageName + ".";
1034    
1035        StringTokenizer st = new StringTokenizer(list, ",");
1036        while (st.hasMoreTokens())
1037        {        {
1038          for (int index = list.indexOf(packageName);          if (packageNamePlusDot.startsWith(st.nextToken()))
1039               index != -1; index = list.indexOf(packageName, index + 1))            {
1040            {              Permission p = new RuntimePermission(permission + packageName);
1041              // Exploit package visibility for speed.              checkPermission(p);
1042              int packageNameCount = packageName.length();              return;
1043              if (index + packageNameCount == list.length()            }
                 || list.charAt(index + packageNameCount) == ',')  
               {  
                 checkPermission(p);  
                 return;  
               }  
           }  
         int index = packageName.lastIndexOf('.');  
         packageName = index < 0 ? "" : packageName.substring(0, index);  
1044        }        }
1045    }    }
1046  } // class SecurityManager  } // class SecurityManager

Legend:
Removed from v.1.20.2.1  
changed lines
  Added in v.1.20.2.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26