/*
* @(#)JDK12Security.java 1.8 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package com.sun.media;
import java.util.Hashtable;
import java.lang.reflect.*;
import java.lang.reflect.InvocationTargetException;
import java.security.*;
public class JDK12Security implements JMFSecurity {
public static final JMFSecurity security;
private static Class cls=null;
private static Method dummyMethodRef=null;
private static Permission threadPermission = null;
private static Permission threadGroupPermission = null;
private static Permission connectPermission = null;
private static Permission multicastPermission = null;
private static Permission readAllFilesPermission = null;
private static Constructor filepermcons;
static {
security = new JDK12Security();
try {
cls = security.getClass();
dummyMethodRef = cls.getMethod("dummyMethod",new Class[0]);
Class rtperm = Class.forName("java.lang.RuntimePermission");
Class socketperm = Class.forName("java.net.SocketPermission");
Class fileperm = Class.forName("java.io.FilePermission");
filepermcons = fileperm.getConstructor(new Class[] {String.class, String.class});
Constructor cons = rtperm.getConstructor(new Class[] {String.class});
threadPermission = (Permission) cons.newInstance(new Object[] {"modifyThread"});
// System.out.println("threadPermission is " + threadPermission);
threadGroupPermission = (Permission) cons.newInstance(new Object[] {"modifyThreadGroup"});
// System.out.println("threadGroupPermission is " + threadGroupPermission);
cons = socketperm.getConstructor(new
Class[] {
String.class, String.class
});
connectPermission = (Permission) cons.newInstance(
new Object[] {"*", "connect"});
// System.out.println("connectPermission is " + connectPermission);
multicastPermission = (Permission) cons.newInstance(
new Object[] {"*", "accept,connect"});
// System.out.println("multicastPermission is " + multicastPermission);
// I don't think there is a way of saying
// give permission to read a file called jmf.properties
// no matter what the path. Check
// readAllFilesPermission = (Permission) cons.newInstance(
// new Object[] {"ALL FILES", "read"});
// System.out.println("readAllFilesPermission is " + readAllFilesPermission);
} catch (Exception e) {
}
}
public static Permission getReadFilePermission(String name) {
try {
return (Permission) filepermcons.newInstance(
new Object[] {name, "read"});
} catch (Exception e) {
return null;
}
}
public static Permission getWriteFilePermission(String name) {
try {
return (Permission) filepermcons.newInstance(
new Object[] {name, "read, write"});
} catch (Exception e) {
return null;
}
}
public static void dummyMethod() {
}
private JDK12Security() {
}
public String getName() {
return "jdk12";
}
public static Permission getThreadPermission() {
return threadPermission;
}
public static Permission getThreadGroupPermission() {
return threadGroupPermission;
}
public static Permission getConnectPermission() {
return connectPermission;
}
public static Permission getMulticastPermission() {
return multicastPermission;
}
public static Permission getReadAllFilesPermission() {
return readAllFilesPermission;
}
public void requestPermission(Method[] m, Class[] c, Object[][] args,
int request) throws SecurityException {
m[0] = dummyMethodRef;
c[0] = cls;
args[0] = null;
//throw new SecurityException("DefulatSecurity : Cannot request permission");
}
// parameter not used
public void requestPermission(Method[] m, Class[] c, Object[][] args, int request,
String parameter) throws SecurityException {
requestPermission(m, c, args, request);
}
public boolean isLinkPermissionEnabled() {
return true;
}
public void permissionFailureNotification(int permission) {
}
// Note: this method may be called by user code and will load
// the library using the permissions of this class.
// We need to revisit this case and maybe remove this method.
public void loadLibrary(final String name) throws UnsatisfiedLinkError {
AccessController.doPrivileged(
new java.security.PrivilegedAction() {
public Object run() {
System.loadLibrary(name);
return null;
}
}
);
}
}
|