/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jini.tool.envcheck.plugins;
import com.sun.jini.tool.envcheck.AbstractPlugin;
import com.sun.jini.tool.envcheck.Plugin;
import com.sun.jini.tool.envcheck.EnvCheck;
import com.sun.jini.tool.envcheck.Reporter;
import com.sun.jini.tool.envcheck.Reporter.Message;
import com.sun.jini.tool.envcheck.SubVMTask;
import com.sun.jini.tool.envcheck.Util;
import com.sun.jini.start.SharedActivationGroupDescriptor;
/**
* Check whether <code>jsk-policy.jar</code> is installed in the extensions
* directory. For both the current VM and for the group VM (if any) load
* <code>net.jini.security.policy.DynamicPolicyProvider</code> and verify that
* it was loaded with the extension classloader by verifying that the parent
* loader is the bootstrap loader (<code>null</code>). The group VM is checked
* only if the descriptors <code>getServerCommand()</code> method returns
* non-<code>null</code>
*/
public class CheckJSKPolicy extends AbstractPlugin {
private EnvCheck envCheck;
private String codebase;
private static String provider =
"net.jini.security.policy.DynamicPolicyProvider";
/**
* Perform the check both for the current VM, and for the group VM if a
* <code>SharedActivationGroupDescriptor</code> is available from the plugin
* container.
*/
public void run(EnvCheck envCheck) {
this.envCheck = envCheck;
checkPolicy(null);
SharedActivationGroupDescriptor gd = envCheck.getGroupDescriptor();
if (gd != null) {
checkPolicy(gd);
}
}
/**
* Check the policy for the command line or group. If <code>gd</code>
* is <code>null</code>, the policy of the command line being analyzed
* is checked.
*
* @param gd the group descriptor, or <code>null</code>
*/
private void checkPolicy(SharedActivationGroupDescriptor gd) {
String source =
gd == null ? getString("vmsource")
: getString("groupsource", gd.getServerCommand());
Object o = envCheck.launch(null, gd, taskName("JSKPolicyTask"));
if (o instanceof Boolean) {
Message message;
if (((Boolean) o).booleanValue()) {
message = new Message(Reporter.INFO,
getString("policyOK"),
getString("policyExp"));
} else {
message = new Message(Reporter.ERROR,
getString("policyBad"),
getString("missingPolicyExp"));
}
Reporter.print(message, source);
} else {
handleUnexpectedSubtaskReturn(o, source);
}
}
/**
* The task which checks the group VM.
*/
public static class JSKPolicyTask implements SubVMTask {
public Object run(String[] args) {
try {
Class c = Class.forName(provider);
if (c.getClassLoader().getParent() == null) {
return new Boolean(true);
} else {
return new Boolean(false);
}
} catch (ClassNotFoundException e) {
return new Boolean(false);
}
}
}
}