[java-identity-provider] branch main updated: IDP-1973 - Don't traverse directories forbidden by permission
Scott Cantor
cantor.2 at osu.edu
Thu Aug 18 21:54:06 UTC 2022
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=c974b2c70e231f3b8e88a4517771359d9ec059bd
The following commit(s) were added to refs/heads/main by this push:
new c974b2c70 IDP-1973 - Don't traverse directories forbidden by permission
c974b2c70 is described below
commit c974b2c70e231f3b8e88a4517771359d9ec059bd
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Aug 18 17:51:15 2022 -0400
IDP-1973 - Don't traverse directories forbidden by permission
https://shibboleth.atlassian.net/browse/IDP-1973
Replaced Files.find with Files.fileTreeWalk.
---
...IdPPropertiesApplicationContextInitializer.java | 112 ++++++++++++---------
1 file changed, 67 insertions(+), 45 deletions(-)
diff --git a/idp-core/src/main/java/net/shibboleth/idp/spring/IdPPropertiesApplicationContextInitializer.java b/idp-core/src/main/java/net/shibboleth/idp/spring/IdPPropertiesApplicationContextInitializer.java
index 7caa7718c..a2c762537 100644
--- a/idp-core/src/main/java/net/shibboleth/idp/spring/IdPPropertiesApplicationContextInitializer.java
+++ b/idp-core/src/main/java/net/shibboleth/idp/spring/IdPPropertiesApplicationContextInitializer.java
@@ -21,19 +21,19 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.FileVisitOption;
+import java.nio.file.FileVisitResult;
+import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
import java.util.Properties;
import java.util.TreeSet;
-import java.util.function.BiPredicate;
import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -227,56 +227,78 @@ public class IdPPropertiesApplicationContextInitializer
}
}
- /** Find out all the additional property files we need to load.
+// Checkstyle: AnonInnerLength OFF
+ /**
+ * Find out all the additional property files we need to load.
+ *
* @param searchLocation Where to search from
* @param properties the content of idp.properties so far
+ *
* @return a collection of paths
*/
public static Collection<String> getAdditionalSources(@Nonnull final String searchLocation,
@Nonnull final Properties properties) {
- final Collection<String> sources = new ArrayList<>();
+
+ final Collection<String> sources = new ArrayList<>();
- final Boolean autosearch = Boolean.valueOf(properties.getProperty(IDP_AUTOSEARCH_PROPERTY, "false"));
- if (autosearch) {
- final Path searchRoot = Path.of(searchLocation).resolve("conf");
- if (searchRoot.toFile().isDirectory()) {
- final Path registryRoot = searchRoot.resolve("attributes");
- final String idpPropertiesNative = Path.of(IDP_PROPERTIES).toString();
- try (final Stream<Path> paths = Files.find(searchRoot, Integer.MAX_VALUE,
- new BiPredicate<Path,BasicFileAttributes>() {
- public boolean test(final Path path, final BasicFileAttributes u) {
- final String pathAsString = path.toString();
- // convert back and forth to handle different dir separators
- if (u.isRegularFile()
- && path.getFileName().toString().endsWith(".properties")
- && !pathAsString.endsWith(idpPropertiesNative)
- && !pathAsString.startsWith(registryRoot.toString())) {
- LOG.info("Including auto-located properties in {}", path);
- return true;
- }
- return false;
- }
- }, FileVisitOption.FOLLOW_LINKS)) {
-
- sources.addAll(paths.map(Path::toString).collect(Collectors.toUnmodifiableList()));
- } catch (final IOException e) {
- LOG.error("Error searching for additional properties", e);
- }
- }
- }
+ final Boolean autosearch = Boolean.valueOf(properties.getProperty(IDP_AUTOSEARCH_PROPERTY, "false"));
+ if (autosearch) {
+ final Path searchRoot = Path.of(searchLocation).resolve("conf");
+ if (searchRoot.toFile().isDirectory()) {
+ final Path registryRoot = searchRoot.resolve("attributes");
+ final String idpPropertiesNative = Path.of(IDP_PROPERTIES).toString();
+
+ try {
+ Files.walkFileTree(searchRoot, Collections.singleton(FileVisitOption.FOLLOW_LINKS),
+ Integer.MAX_VALUE,
+ new FileVisitor<Path>() {
+
+ public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) {
+ if (dir.equals(registryRoot)) {
+ return FileVisitResult.SKIP_SUBTREE;
+ }
+ return FileVisitResult.CONTINUE;
+ }
+
+ public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) {
+ if (attrs.isRegularFile()
+ && file.getFileName().toString().endsWith(".properties")
+ && !file.toString().endsWith(idpPropertiesNative)) {
+ sources.add(file.toString());
+ }
+ return FileVisitResult.CONTINUE;
+ }
+
+ public FileVisitResult visitFileFailed(final Path file, final IOException exc) {
+ LOG.error("Error accessing {}", file.toString(), exc);
+ return FileVisitResult.CONTINUE;
+ }
+
+ public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) {
+ return FileVisitResult.CONTINUE;
+ }
+
+ });
+ } catch (final IOException e) {
+ LOG.error("Error searching for additional properties", e);
+ }
+ }
+ }
- final String additionalSources = properties.getProperty(IDP_ADDITIONAL_PROPERTY);
- if (additionalSources != null) {
- final String[] split = additionalSources.split(",");
- for (final String s : split) {
- final String trimmedSource = StringSupport.trimOrNull(s);
- if (trimmedSource != null) {
- sources.add(searchLocation + trimmedSource);
- }
- }
- }
- return sources;
- }
+ final String additionalSources = properties.getProperty(IDP_ADDITIONAL_PROPERTY);
+ if (additionalSources != null) {
+ final String[] split = additionalSources.split(",");
+ for (final String s : split) {
+ final String trimmedSource = StringSupport.trimOrNull(s);
+ if (trimmedSource != null) {
+ sources.add(searchLocation + trimmedSource);
+ }
+ }
+ }
+ return sources;
+ }
+// Checkstyle: AnonInnerLength ON
+
/**
* Load additional property sources.
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list