in src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java [413:438]
public String calculateEnforcedIntermediatePath(@Nullable String intermediatePath) throws ConverterException {
if (enforcePrincipalBasedSupportedPath == null) {
throw new IllegalStateException("No supported path configured");
}
String supportedPath = getRelativeIntermediatePath(enforcePrincipalBasedSupportedPath.toString());
if (intermediatePath == null || intermediatePath.isEmpty()) {
return supportedPath;
}
String relIntermediate = getRelativeIntermediatePath(intermediatePath);
if (Text.isDescendantOrEqual(supportedPath, relIntermediate)) {
return relIntermediate;
} else if (Text.isDescendant(relIntermediate, supportedPath)) {
return supportedPath;
} else {
String parent = Text.getRelativeParent(relIntermediate, 1);
while (!parent.isEmpty() && !"/".equals(parent)) {
if (Text.isDescendantOrEqual(parent, supportedPath)) {
String relpath = relIntermediate.substring(parent.length());
return supportedPath + relpath;
}
parent = Text.getRelativeParent(parent, 1);
}
throw new ConverterException("Cannot calculate intermediate path for service user. Configured Supported path " +enforcePrincipalBasedSupportedPath+" has no common ancestor with "+intermediatePath);
}
}