001: /*
002: * $Id: PolicyPreferences.java,v 1.3 2002/09/16 08:05:06 jkl Exp $
003: *
004: * Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
005: *
006: * Use is subject to license terms, as defined in
007: * Anvil Sofware License, Version 1.1. See LICENSE
008: * file, or http://njet.org/license-1.1.txt
009: */
010: package anvil.server;
011:
012: import java.lang.reflect.Constructor;
013: import java.util.ArrayList;
014: import java.util.Enumeration;
015: import java.security.Permissions;
016: import java.security.Permission;
017: import anvil.java.security.JavaPermission;
018:
019: /**
020: * class PolicyPreferences
021: *
022: * @author: Jani Lehtimäki
023: */
024: public class PolicyPreferences extends Preferences {
025:
026: private Permissions _permissions = new Permissions();
027: private Permissions _localPermissions = new Permissions();
028:
029: public PolicyPreferences(Zone parent) {
030: super (parent);
031: parent.getDomain().enablePolicy();
032: }
033:
034: protected void addPermission(Permissions permissions, String values) {
035: String[] args = parseValues(values);
036: if (args.length > 0) {
037: Permission perm = null;
038: try {
039: perm = createPermission(args);
040: } catch (Throwable t) {
041: throw new ConfigurationError(
042: "Couldn't set permission '" + args[0]
043: + "', reason: " + t);
044: }
045: if (perm == null) {
046: throw new ConfigurationError(
047: "Invalid number of arguments for permission '"
048: + args[0] + "'");
049: }
050: permissions.add(perm);
051: }
052: }
053:
054: public Permissions getPermissions() {
055: return _permissions;
056: }
057:
058: public Permissions getLocalPermissions() {
059: return _localPermissions;
060: }
061:
062: public int getType() {
063: return POLICY;
064: }
065:
066: public String[] getAdditionalPreferenceNames() {
067: return new String[0];
068: }
069:
070: public Object getPreference(String name) {
071: return null;
072: }
073:
074: public boolean setPreference(String name, String value) {
075: if (name.equalsIgnoreCase("permission")) {
076: addPermission(_permissions, value);
077: } else if (name.equalsIgnoreCase("localpermission")) {
078: addPermission(_localPermissions, value);
079: } else {
080: return false;
081: }
082: return true;
083: }
084:
085: public static final Permission createPermission(String[] args)
086: throws Throwable {
087: Permission perm = null;
088: String name = args[0];
089: int n = args.length;
090: if (name.equals("file")) {
091: if (n >= 3) {
092: perm = new java.io.FilePermission(args[1], args[2]);
093: }
094:
095: } else if (name.equals("socket")) {
096: if (n >= 3) {
097: perm = new java.net.SocketPermission(args[1], args[2]);
098: }
099:
100: } else if (name.equals("java")) {
101: perm = new JavaPermission(args[1]);
102:
103: } else if (name.equals("runtime")) {
104: if (n > 2) {
105: perm = new anvil.core.RuntimePermission(args[1],
106: args[2]);
107: } else {
108: perm = new anvil.core.RuntimePermission(args[1]);
109: }
110:
111: } else if (name.equals("import")) {
112: perm = new anvil.script.ImportPermission(args[1]);
113:
114: } else if (name.equals("pool")) {
115: perm = new anvil.database.ConnectionPoolPermission(args[1]);
116:
117: } else if (name.equals("realm")) {
118: perm = new RealmPermission(args[1]);
119:
120: } else if (name.equals("namespace")) {
121: if (n > 2) {
122: perm = new NamespacePermission(args[1], args[2]);
123: } else {
124: perm = new NamespacePermission(args[1]);
125: }
126:
127: } else if (name.equals("tool")) {
128: if (n > 2) {
129: perm = new anvil.core.ToolPermission(args[1], args[2]);
130: } else {
131: perm = new anvil.core.ToolPermission(args[1]);
132: }
133:
134: } else if (name.equals("property")) {
135: perm = new java.util.PropertyPermission(args[1], args[2]);
136:
137: } else if (name.equals("all")) {
138: perm = new java.security.AllPermission();
139:
140: } else {
141: Class cls = Class.forName(name);
142: n--;
143: Class[] params = new Class[n];
144: for (int i = 0; i < params.length; i++) {
145: params[i] = String.class;
146: }
147: Constructor ctor = cls.getDeclaredConstructor(params);
148: if (ctor != null) {
149: String[] s = new String[n];
150: System.arraycopy(args, 1, s, 0, n);
151: perm = (Permission) ctor.newInstance(s);
152: }
153:
154: }
155: return perm;
156: }
157:
158: }
|