The role-link element is used to link a security role reference to a
defined security role. The role-link element must contain the name of
one of the security roles defined in the security-role elements.
Result result = getInitializedResult();
ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
if (descriptor.getWebComponentDescriptors().hasMoreElements()) {
boolean oneFailed = false;
int na = 0;
int noWd = 0;
for (Enumeration e = descriptor.getWebComponentDescriptors(); e.hasMoreElements();) {
noWd++;
WebComponentDescriptor next = (WebComponentDescriptor) e.nextElement();
boolean foundIt = false;
// get the security role-link's in this .war
if (next.getSecurityRoleReferences().hasMoreElements()) {
for (Enumeration ee = next.getSecurityRoleReferences(); ee.hasMoreElements();) {
RoleReference rr = (RoleReference) ee.nextElement();
foundIt = false;
String linkName = rr.getValue();
logger.log(Level.FINE, "servlet linkName: " + linkName);
// now check to see if role-link exist in security role names
if (descriptor.getSecurityRoles().hasMoreElements()) {
for (Enumeration eee = descriptor.getSecurityRoles(); eee.hasMoreElements();) {
SecurityRoleDescriptor srdNext = (SecurityRoleDescriptor) eee.nextElement();
if (linkName.equals(srdNext.getName())) {
foundIt = true;
break;
} else {
continue;
}
}
} else {
// if descriptor.getSecurityRoles().hasMoreElements())
foundIt = false;
}
if (foundIt) {
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addGoodDetails(smh.getLocalString
(getClass().getName() + ".passed",
"role-link [ {0} ] links security role reference to a defined security role within web application [ {1} ]",
new Object[] {linkName, descriptor.getName()}));
} else {
if (!oneFailed) {
oneFailed = true;
}
result.addErrorDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addErrorDetails(smh.getLocalString
(getClass().getName() + ".failed",
"Error: role-link [ {0} ] does not link security role reference to a defined security role within web application [ {1} ]",
new Object[] {linkName, descriptor.getName()}));
}
} // for loop next.getSecurityRoleReferences() has more elements
} else {
result.addNaDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addNaDetails(smh.getLocalString
(getClass().getName() + ".notApplicable1",
"[ {0} ] has no role-link element defined within the web archive [ {1} ]",
new Object[] {next.getName(),descriptor.getName()}));
na++;
}
} // for loop descriptor.getWebComponentDescriptors(); e.hasMoreElements()
if (oneFailed) {
result.setStatus(Result.FAILED);
} else if (na == noWd) {
result.setStatus(Result.NOT_APPLICABLE);
} else {
result.setStatus(Result.PASSED);
}
} else {
result.addNaDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.notApplicable(smh.getLocalString
(getClass().getName() + ".notApplicable",
"There are no location elements within the web archive [ {0} ]",
new Object[] {descriptor.getName()}));
}
return result;