PriviAction.java revision f6c387128427e121477c1b32ad35cdcaa5101ba3
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.luni.util; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.AccessibleObject; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Policy; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.PrivilegedAction; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Security; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Helper class to avoid multiple anonymous inner class for 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <code>{@link java.security.AccessController#doPrivileged(PrivilegedAction)}</code> 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls. 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class PriviAction<T> implements PrivilegedAction<T> { 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object arg1; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object arg2; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private int action; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final int GET_SYSTEM_PROPERTY = 1; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final int GET_SECURITY_POLICY = 2; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final int SET_ACCESSIBLE = 3; 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final int GET_SECURITY_PROPERTY = 4; 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a PrivilegedAction to get the security property with the given 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * name. 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param property 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the name of the property 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see Security#getProperty 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static PrivilegedAction<String> getSecurityProperty(String property) { 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new PriviAction<String>(GET_SECURITY_PROPERTY, property); 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private PriviAction(int action, Object arg) { 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.action = action; 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.arg1 = arg; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a PrivilegedAction to get the current security policy object. 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see Policy#getPolicy 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public PriviAction() { 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project action = GET_SECURITY_POLICY; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a PrivilegedAction to disable the access checks to the given 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * object. 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the object whose accessible flag will be set to 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <code>true</code> 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see AccessibleObject#setAccessible(boolean) 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public PriviAction(AccessibleObject object) { 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project action = SET_ACCESSIBLE; 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project arg1 = object; 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a PrivilegedAction to return the value of the system property 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with the given key. 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param property 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key of the system property 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see System#getProperty(String) 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public PriviAction(String property) { 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project action = GET_SYSTEM_PROPERTY; 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project arg1 = property; 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a PrivilegedAction to return the value of the system property 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with the given key. 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param property 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key of the system property 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param defaultAnswer 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the return value if the system property does not exist 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see System#getProperty(String, String) 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public PriviAction(String property, String defaultAnswer) { 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project action = GET_SYSTEM_PROPERTY; 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project arg1 = property; 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project arg2 = defaultAnswer; 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Performs the actual privileged computation as defined by the constructor. 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.security.PrivilegedAction#run() 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public T run() { 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project switch (action) { 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case GET_SYSTEM_PROPERTY: 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (T)System.getProperty((String) arg1, (String) arg2); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case GET_SECURITY_PROPERTY: 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (T)Security.getProperty((String) arg1); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case GET_SECURITY_POLICY: 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (T)Policy.getPolicy(); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case SET_ACCESSIBLE: 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ((AccessibleObject) arg1).setAccessible(true); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 140