1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package net.sf.jguard.core.authorization.policy;
29
30 import java.io.File;
31 import java.io.FileInputStream;
32 import java.io.FileNotFoundException;
33 import java.io.IOException;
34 import java.security.CodeSource;
35 import java.security.Permission;
36 import java.security.PermissionCollection;
37 import java.security.Permissions;
38 import java.security.Policy;
39 import java.security.ProtectionDomain;
40 import java.util.Enumeration;
41 import java.util.Properties;
42
43 import net.sf.jguard.core.authorization.manager.PermissionProvider;
44 import net.sf.jguard.core.authorization.permissions.AuditPermissionCollection;
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48
49
50
51
52
53
54
55
56
57 public abstract class JGuardPolicy extends java.security.Policy {
58
59 private static final String LIB = "lib";
60 private static final String SECURITY = "security";
61 private static final String J_GUARD_POLICY = "jGuard.policy";
62 private static final String JGUARD_POLICY_LOCATION = File.separator + JGuardPolicy.LIB + File.separator + JGuardPolicy.SECURITY + File.separator + JGuardPolicy.J_GUARD_POLICY;
63 private static final String DEFAULT_POLICY = "defaultPolicy";
64 private static final String JAVA_HOME = "java.home";
65
66 protected static Policy defaultPolicy;
67
68 private static Class policyClass;
69 private static Logger logger = LoggerFactory.getLogger(JGuardPolicy.class.getName());
70 protected final static String version = "1.1.0 beta 5";
71
72
73
74
75
76 public JGuardPolicy(){
77 super();
78 }
79
80
81
82
83 protected void loadDefaultPolicy() {
84
85 if (System.getSecurityManager() == null) {
86 String javaHome = System.getProperty(JGuardPolicy.JAVA_HOME);
87 Properties props = new Properties();
88 String defPolicy = null;
89
90 try {
91 props.load(new FileInputStream(new File(javaHome + JGuardPolicy.JGUARD_POLICY_LOCATION)));
92 defPolicy = props.getProperty(JGuardPolicy.DEFAULT_POLICY);
93 } catch (FileNotFoundException e) {
94 logger.info( "loadDefaultPolicy() - jGuard.policy is not found " + e.getMessage());
95 } catch (IOException e) {
96 logger.info( "loadDefaultPolicy() - jGuard.policy is not reachable " + e.getMessage());
97 }
98
99 try {
100
101 if(defPolicy==null){
102 logger.info("loadDefaultPolicy() - 'defaultPolicy' field in the jGuard.Policy file is not defined ");
103 logger.info("loadDefaultPolicy() - jGuard try to discover the default one ");
104
105 policyClass = PolicyHelper.findDefaultPolicy();
106 } else {
107
108 policyClass = Class.forName(defPolicy);
109 }
110 } catch (ClassNotFoundException e1) {
111 logger.info( "loadDefaultPolicy() - the default policy class cannot be found " + e1.getMessage());
112 }
113
114
115 }else{
116 policyClass = PolicyHelper.findDefaultPolicy();
117 }
118
119 try {
120 defaultPolicy = (Policy)policyClass.newInstance();
121 } catch (InstantiationException e2) {
122 logger.info("loadDefaultPolicy() - the default policy class cannot be instantiated"
123 + e2.getMessage());
124 } catch (IllegalAccessException e2) {
125 logger.info("loadDefaultPolicy() - the default policy class cannot be accessed "
126 + e2.getMessage());
127 }
128 }
129
130
131
132
133
134
135
136
137 public PermissionCollection getPermissions(CodeSource codesource) {
138 PermissionCollection permColl = defaultPolicy.getPermissions(codesource);
139 return new AuditPermissionCollection(permColl, codesource);
140 }
141
142 public abstract PermissionCollection getPermissions(ProtectionDomain protectionDomain);
143
144 public abstract void refresh();
145
146 protected PermissionCollection getPermissions(ProtectionDomain protectionDomain, PermissionProvider permissionProvider) {
147 PermissionCollection pc = null;
148 if(System.getSecurityManager()!=null){
149 pc = defaultPolicy.getPermissions(protectionDomain);
150 }
151
152
153 if(permissionProvider!=null){
154
155
156 PermissionCollection pc2= permissionProvider.getPermissions(protectionDomain);
157
158
159 if(System.getSecurityManager()!=null){
160 Enumeration enumeration = pc2.elements();
161 while(enumeration.hasMoreElements()){
162 pc.add((Permission)enumeration.nextElement());
163 }
164 }else{
165
166
167 pc = pc2;
168 }
169 }
170
171 return pc;
172 }
173
174 public abstract void addAlwaysGrantedPermissions(ClassLoader cl,Permissions alwaysGrantedPermissions);
175
176
177 }