aboutsummaryrefslogtreecommitdiffstats
path: root/netx/net/sourceforge/jnlp/runtime/JNLPPolicy.java
diff options
context:
space:
mode:
Diffstat (limited to 'netx/net/sourceforge/jnlp/runtime/JNLPPolicy.java')
-rw-r--r--netx/net/sourceforge/jnlp/runtime/JNLPPolicy.java103
1 files changed, 103 insertions, 0 deletions
diff --git a/netx/net/sourceforge/jnlp/runtime/JNLPPolicy.java b/netx/net/sourceforge/jnlp/runtime/JNLPPolicy.java
new file mode 100644
index 0000000..d839fbd
--- /dev/null
+++ b/netx/net/sourceforge/jnlp/runtime/JNLPPolicy.java
@@ -0,0 +1,103 @@
+// Copyright (C) 2001-2003 Jon A. Maxwell (JAM)
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+package net.sourceforge.jnlp.runtime;
+
+import java.security.*;
+import java.util.Enumeration;
+
+/**
+ * Policy for JNLP environment. This class delegates to the
+ * system policy but always grants permissions to the JNLP code
+ * and system CodeSources (no separate policy file needed). This
+ * class may also grant permissions to applications at runtime if
+ * approved by the user.
+ *
+ * @author <a href="mailto:[email protected]">Jon A. Maxwell (JAM)</a> - initial author
+ * @version $Revision: 1.7 $
+ */
+public class JNLPPolicy extends Policy {
+
+ /** classes from this source have all permissions */
+ private static CodeSource shellSource;
+
+ /** classes from this source have all permissions */
+ private static CodeSource systemSource;
+
+ /** the previous policy */
+ private static Policy systemPolicy;
+
+
+ protected JNLPPolicy() {
+ shellSource = JNLPPolicy.class.getProtectionDomain().getCodeSource();
+ systemSource = Policy.class.getProtectionDomain().getCodeSource();
+ systemPolicy = Policy.getPolicy();
+ }
+
+ /**
+ * Return a mutable, heterogeneous-capable permission collection
+ * for the source.
+ */
+ public PermissionCollection getPermissions(CodeSource source) {
+ if (source.equals(systemSource) || source.equals(shellSource))
+ return getAllPermissions();
+
+ // if we check the SecurityDesc here then keep in mind that
+ // code can add properties at runtime to the ResourcesDesc!
+ if (JNLPRuntime.getApplication() != null) {
+ if (JNLPRuntime.getApplication().getClassLoader() instanceof JNLPClassLoader) {
+ JNLPClassLoader cl = (JNLPClassLoader) JNLPRuntime.getApplication().getClassLoader();
+
+ PermissionCollection clPermissions = cl.getPermissions(source);
+
+ // systempolicy permissions need to be accounted for as well
+ CodeSource appletCS = new CodeSource(JNLPRuntime.getApplication().getJNLPFile().getSourceLocation(), (java.security.cert.Certificate[]) null);
+ Enumeration e = systemPolicy.getPermissions(appletCS).elements();
+ while (e.hasMoreElements())
+ clPermissions.add((Permission) e.nextElement());
+
+ return clPermissions;
+ }
+ }
+
+ // delegate to original Policy object; required to run under WebStart
+ return systemPolicy.getPermissions(source);
+ }
+
+ /**
+ * Refresh.
+ */
+ public void refresh() {
+ // no op
+ }
+
+ /**
+ * Return an all-permissions collection.
+ */
+ private Permissions getAllPermissions() {
+ Permissions result = new Permissions();
+
+ result.add( new AllPermission() );
+ return result;
+ }
+
+ public boolean implies(ProtectionDomain domain, Permission permission) {
+ //Include the permissions that may be added during runtime.
+ PermissionCollection pc = getPermissions(domain.getCodeSource());
+ return super.implies(domain, permission) || pc.implies(permission);
+ }
+}