home *** CD-ROM | disk | FTP | other *** search
- package lotus.notes;
-
- import java.io.FileDescriptor;
- import java.net.InetAddress;
- import java.util.Hashtable;
-
- public class AgentSecurityManager extends SecurityManager {
- private Hashtable ctx = new Hashtable();
- private Hashtable propkeys;
- private ThreadGroup utg;
-
- public AgentSecurityManager() {
- this.fillPropKeys();
- this.utg = Thread.currentThread().getThreadGroup();
- System.setSecurityManager(this);
- new AgentSecurityContext(this.utg, false);
- new AgentSecurityContext(this.utg.getParent(), false);
- }
-
- public void checkAccept(String var1, int var2) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
- if (var3 == null) {
- throw new SecurityException(var1 + "," + var2);
- }
-
- if (!var3.netAllowed()) {
- throw new SecurityException(var1 + "," + var2);
- }
- }
-
- }
-
- public void checkAccess(Thread var1) {
- if (((SecurityManager)this).classLoaderDepth() == 3) {
- if (var1 != null) {
- ThreadGroup var2 = var1.getThreadGroup();
- this.checkRelatedThreadGroup(var2);
- } else {
- throw new NullPointerException();
- }
- }
- }
-
- public void checkAccess(ThreadGroup var1) {
- if (((SecurityManager)this).classLoaderDepth() == 3) {
- this.checkRelatedThreadGroup(var1);
- }
-
- }
-
- public void checkAwtEventQueueAccess() {
- }
-
- public void checkConnect(String var1, int var2) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
- if (var3 == null) {
- throw new SecurityException(var1 + "," + var2);
- }
-
- if (!var3.netAllowed()) {
- throw new SecurityException(var1 + "," + var2);
- }
- }
-
- }
-
- public void checkConnect(String var1, int var2, Object var3) {
- AgentSecurityContext var4 = null;
- if (((SecurityManager)this).inClassLoader()) {
- try {
- var4 = (AgentSecurityContext)var3;
- } catch (ClassCastException var5) {
- }
-
- if (var4 == null) {
- throw new SecurityException(var1 + "," + var2 + "," + var3.toString());
- }
-
- if (!var4.netAllowed()) {
- throw new SecurityException(var1 + "," + var2 + "," + var3.toString());
- }
- }
-
- }
-
- public void checkCreateClassLoader() {
- if (((SecurityManager)this).classLoaderDepth() == 2) {
- AgentSecurityContext var1 = (AgentSecurityContext)this.getSecurityContext();
- if (var1 == null) {
- throw new SecurityException();
- }
-
- if (!var1.classLoaderAllowed()) {
- throw new SecurityException();
- }
- }
-
- }
-
- public void checkDelete(String var1) {
- if (((SecurityManager)this).classLoaderDepth() == 2) {
- AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
- if (var2 == null) {
- throw new SecurityException(var1);
- }
-
- if (!var2.writeAllowed()) {
- throw new SecurityException(var1);
- }
- }
-
- }
-
- public void checkExec(String var1) {
- int var2 = ((SecurityManager)this).classLoaderDepth();
- if (var2 == 2 || var2 == 3) {
- AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
- if (var3 == null) {
- throw new SecurityException(var1);
- }
-
- if (!var3.execAllowed()) {
- throw new SecurityException(var1);
- }
- }
-
- }
-
- public void checkExit(int var1) {
- throw new SecurityException();
- }
-
- public void checkLink(String var1) {
- switch (((SecurityManager)this).classLoaderDepth()) {
- case 2:
- case 3:
- AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
- if (var2 == null) {
- throw new SecurityException(var1);
- } else if (!var2.linkAllowed()) {
- throw new SecurityException(var1);
- }
- default:
- }
- }
-
- public void checkListen(int var1) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
- if (var2 == null) {
- throw new SecurityException(String.valueOf(var1));
- }
-
- if (!var2.netAllowed()) {
- throw new SecurityException(String.valueOf(var1));
- }
- }
-
- }
-
- public void checkMemberAccess(Class var1, int var2) {
- if (var2 != 0) {
- ClassLoader var3 = ((SecurityManager)this).currentClassLoader();
- if (var3 != null && ((SecurityManager)this).classLoaderDepth() <= 3 && var3 != var1.getClassLoader()) {
- throw new SecurityException(var1.toString());
- }
- }
-
- }
-
- public void checkMulticast(InetAddress var1) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
- if (var2 == null) {
- throw new SecurityException(var1.toString());
- }
-
- if (!var2.netAllowed()) {
- throw new SecurityException(var1.toString());
- }
- }
-
- }
-
- public void checkMulticast(InetAddress var1, byte var2) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
- if (var3 == null) {
- throw new SecurityException();
- }
-
- if (!var3.netAllowed()) {
- throw new SecurityException();
- }
- }
-
- }
-
- public void checkPackageAccess(String var1) {
- }
-
- public void checkPackageDefinition(String var1) {
- if (var1.startsWith("lotus.notes")) {
- throw new SecurityException();
- }
- }
-
- public void checkPrintJobAccess() {
- }
-
- public void checkPropertiesAccess() {
- if (((SecurityManager)this).classLoaderDepth() == 2) {
- throw new SecurityException();
- }
- }
-
- public void checkPropertyAccess(String var1) {
- if (((SecurityManager)this).classLoaderDepth() == 2) {
- AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
- if (var2 == null) {
- throw new SecurityException(var1);
- }
-
- if (!var2.propAllowed() && this.propkeys.get(var1) == null) {
- throw new SecurityException(var1);
- }
- }
-
- }
-
- public void checkRead(FileDescriptor var1) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
- if (var2 == null) {
- throw new SecurityException();
- }
-
- if (!var2.readAllowed() && !((SecurityManager)this).inClass("java.net.SocketInputStream")) {
- throw new SecurityException(var1.toString());
- }
- }
-
- }
-
- public void checkRead(String var1) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
- if (var2 == null) {
- throw new SecurityException(var1);
- }
-
- if (!var2.readAllowed()) {
- throw new SecurityException(var1);
- }
- }
-
- }
-
- public void checkRead(String var1, Object var2) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
- if (var3 == null) {
- throw new SecurityException(var1);
- }
-
- if (!var3.readAllowed()) {
- throw new SecurityException(var1);
- }
- }
-
- }
-
- public void checkSecurityAccess(String var1) {
- }
-
- public void checkSetFactory() {
- AgentSecurityContext var1 = (AgentSecurityContext)this.getSecurityContext();
- if (var1 != null) {
- if (!var1.netAllowed()) {
- throw new SecurityException();
- }
- } else {
- throw new SecurityException();
- }
- }
-
- public void checkSystemClipboardAccess() {
- }
-
- public boolean checkTopLevelWindow(Object var1) {
- return false;
- }
-
- public void checkWrite(FileDescriptor var1) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
- if (var2 == null) {
- throw new SecurityException(var1.toString());
- }
-
- if (!var2.writeAllowed() && !((SecurityManager)this).inClass("java.net.SocketInputStream")) {
- throw new SecurityException(var1.toString());
- }
- }
-
- }
-
- public void checkWrite(String var1) {
- if (((SecurityManager)this).inClassLoader()) {
- AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
- if (var2 == null) {
- throw new SecurityException(var1);
- }
-
- if (!var2.writeAllowed()) {
- throw new SecurityException(var1);
- }
- }
-
- }
-
- public ThreadGroup getThreadGroup() {
- return Thread.currentThread().getThreadGroup();
- }
-
- public Object getSecurityContext() {
- Object var1 = null;
- ThreadGroup var2 = this.getAgentThreadGroup();
- AgentSecurityContext var3 = (AgentSecurityContext)this.ctx.get(var2);
- if (var3 == null) {
- throw new SecurityContextException(var2);
- } else {
- return var3;
- }
- }
-
- private ThreadGroup getAgentThreadGroup() {
- return this.getAgentThreadGroup(Thread.currentThread().getThreadGroup());
- }
-
- private ThreadGroup getAgentThreadGroup(ThreadGroup var1) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- while(var1.getParent() != null && !(var1 instanceof AgentThreadGroup)) {
- var1 = var1.getParent();
- }
-
- if (this.ctx.get(var1) == null) {
- throw new SecurityContextException(var1);
- } else {
- return var1;
- }
- }
- }
-
- private void checkRelatedThreadGroup(ThreadGroup var1) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- ThreadGroup var2 = this.getAgentThreadGroup();
- ThreadGroup var3 = this.getAgentThreadGroup(var1);
- if (!var2.getName().equals("system") && (var3 != var2 || var3 == var1)) {
- throw new SecurityException();
- }
- }
- }
-
- protected void newSecurityContext(AgentSecurityContext var1, ThreadGroup var2) {
- AgentSecurityContext var3 = (AgentSecurityContext)this.ctx.get(var2);
- if (var3 == null) {
- this.ctx.put(var2, var1);
- } else {
- throw new SecurityException(JavaString.resource.getString("security_exists"));
- }
- }
-
- private void fillPropKeys() {
- this.propkeys = new Hashtable();
- String var1 = "dummy";
- this.propkeys.put("awt.toolkit", var1);
- this.propkeys.put("file.encoding", var1);
- this.propkeys.put("file.encoding.pkg", var1);
- this.propkeys.put("java.class.version", var1);
- this.propkeys.put("java.vendor", var1);
- this.propkeys.put("java.vendor.url", var1);
- this.propkeys.put("java.version", var1);
- this.propkeys.put("os.arch", var1);
- this.propkeys.put("os.name", var1);
- this.propkeys.put("os.version", var1);
- this.propkeys.put("user.language", var1);
- this.propkeys.put("user.timezone", var1);
- this.propkeys.put("user.region", var1);
- this.propkeys.put("lotus.notes.nativecreated", var1);
- }
- }
-