Blame TestCryptoLevel.java

Jiri Vanek work 2d6639a
/* TestCryptoLevel -- Ensure unlimited crypto policy is in use.
Jiri Vanek work 2d6639a
   Copyright (C) 2012 Red Hat, Inc.
Jiri Vanek work 2d6639a
Jiri Vanek work 2d6639a
This program is free software: you can redistribute it and/or modify
Jiri Vanek work 2d6639a
it under the terms of the GNU Affero General Public License as
Jiri Vanek work 2d6639a
published by the Free Software Foundation, either version 3 of the
Jiri Vanek work 2d6639a
License, or (at your option) any later version.
Jiri Vanek work 2d6639a
Jiri Vanek work 2d6639a
This program is distributed in the hope that it will be useful,
Jiri Vanek work 2d6639a
but WITHOUT ANY WARRANTY; without even the implied warranty of
Jiri Vanek work 2d6639a
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Jiri Vanek work 2d6639a
GNU Affero General Public License for more details.
Jiri Vanek work 2d6639a
Jiri Vanek work 2d6639a
You should have received a copy of the GNU Affero General Public License
Jiri Vanek work 2d6639a
along with this program.  If not, see <http://www.gnu.org/licenses/>.
Jiri Vanek work 2d6639a
*/
Jiri Vanek work 2d6639a
Jiri Vanek work 2d6639a
import java.lang.reflect.Field;
Jiri Vanek work 2d6639a
import java.lang.reflect.Method;
Jiri Vanek work 2d6639a
import java.lang.reflect.InvocationTargetException;
Jiri Vanek work 2d6639a
Jiri Vanek work 2d6639a
import java.security.Permission;
Jiri Vanek work 2d6639a
import java.security.PermissionCollection;
Jiri Vanek work 2d6639a
Jiri Vanek work 2d6639a
public class TestCryptoLevel
Jiri Vanek work 2d6639a
{
Jiri Vanek work 2d6639a
  public static void main(String[] args)
Jiri Vanek work 2d6639a
    throws NoSuchFieldException, ClassNotFoundException,
Jiri Vanek work 2d6639a
           IllegalAccessException, InvocationTargetException
Jiri Vanek work 2d6639a
  {
Jiri Vanek work 2d6639a
    Class cls = null;
Jiri Vanek work 2d6639a
    Method def = null, exempt = null;
Jiri Vanek work 2d6639a
Jiri Vanek work 2d6639a
    try
Jiri Vanek work 2d6639a
      {
Jiri Vanek work 2d6639a
        cls = Class.forName("javax.crypto.JceSecurity");
Jiri Vanek work 2d6639a
      }
Jiri Vanek work 2d6639a
    catch (ClassNotFoundException ex)
Jiri Vanek work 2d6639a
      {
Jiri Vanek work 2d6639a
        System.err.println("Running a non-Sun JDK.");
Jiri Vanek work 2d6639a
        System.exit(0);
Jiri Vanek work 2d6639a
      }
Jiri Vanek work 2d6639a
    try
Jiri Vanek work 2d6639a
      {
Jiri Vanek work 2d6639a
        def = cls.getDeclaredMethod("getDefaultPolicy");
Jiri Vanek work 2d6639a
        exempt = cls.getDeclaredMethod("getExemptPolicy");
Jiri Vanek work 2d6639a
      }
Jiri Vanek work 2d6639a
    catch (NoSuchMethodException ex)
Jiri Vanek work 2d6639a
      {
Jiri Vanek work 2d6639a
        System.err.println("Running IcedTea with the original crypto patch.");
Jiri Vanek work 2d6639a
        System.exit(0);
Jiri Vanek work 2d6639a
      }
Jiri Vanek work 2d6639a
    def.setAccessible(true);
Jiri Vanek work 2d6639a
    exempt.setAccessible(true);
Jiri Vanek work 2d6639a
    PermissionCollection defPerms = (PermissionCollection) def.invoke(null);
Jiri Vanek work 2d6639a
    PermissionCollection exemptPerms = (PermissionCollection) exempt.invoke(null);
Jiri Vanek work 2d6639a
    Class apCls = Class.forName("javax.crypto.CryptoAllPermission");
Jiri Vanek work 2d6639a
    Field apField = apCls.getDeclaredField("INSTANCE");
Jiri Vanek work 2d6639a
    apField.setAccessible(true);
Jiri Vanek work 2d6639a
    Permission allPerms = (Permission) apField.get(null);
Jiri Vanek work 2d6639a
    if (defPerms.implies(allPerms) && (exemptPerms == null || exemptPerms.implies(allPerms)))
Jiri Vanek work 2d6639a
      {
Jiri Vanek work 2d6639a
        System.err.println("Running with the unlimited policy.");
Jiri Vanek work 2d6639a
        System.exit(0);
Jiri Vanek work 2d6639a
      }
Jiri Vanek work 2d6639a
    else
Jiri Vanek work 2d6639a
      {
Jiri Vanek work 2d6639a
        System.err.println("WARNING: Running with a restricted crypto policy.");
Jiri Vanek work 2d6639a
        System.exit(-1);
Jiri Vanek work 2d6639a
      }
Jiri Vanek work 2d6639a
  }
Jiri Vanek work 2d6639a
}