From 729aa048f35944987ac79cf8b05b05a2be3f9cb1 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Wed, 16 Jul 2003 13:56:55 +0000 Subject: [PATCH] Fix symlink check git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274833 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/tools/ant/DirectoryScanner.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/main/org/apache/tools/ant/DirectoryScanner.java b/src/main/org/apache/tools/ant/DirectoryScanner.java index 27bf61f3a..4bff24462 100644 --- a/src/main/org/apache/tools/ant/DirectoryScanner.java +++ b/src/main/org/apache/tools/ant/DirectoryScanner.java @@ -705,6 +705,10 @@ public class DirectoryScanner } if (myfile.exists()) { + if (!followSymlinks && isSymlink(basedir, currentelement)) { + continue; + } + if (myfile.isDirectory()) { if (isIncluded(currentelement) && currentelement.length() > 0) { @@ -1192,4 +1196,39 @@ public class DirectoryScanner } return null; } + + /** + * Do we have to traverse a symlink when trying to reach path from + * basedir? + * @since Ant 1.6 + */ + private boolean isSymlink(File base, String path) { + return isSymlink(base, SelectorUtils.tokenizePath(path)); + } + + /** + * Do we have to traverse a symlink when trying to reach path from + * basedir? + * @since Ant 1.6 + */ + private boolean isSymlink(File base, Vector pathElements) { + if (pathElements.size() > 0) { + String current = (String) pathElements.remove(0); + try { + if (fileUtils.isSymbolicLink(base, current)) { + return true; + } else { + base = new File(base, current); + return isSymlink(base, pathElements); + } + } catch (IOException ioe) { + String msg = "IOException caught while checking " + + "for links, couldn't get cannonical path!"; + // will be caught and redirected to Ant's logging system + System.err.println(msg); + return false; + } + } + return false; + } }