Repository: mina-sshd Updated Branches: refs/heads/master 4554b304e -> 270d91b14
[SSHD-753] SSHD cannot read its keyfile through a symlink Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/270d91b1 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/270d91b1 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/270d91b1 Branch: refs/heads/master Commit: 270d91b14a77d0a18764eebef34fcdcd446021dc Parents: 4554b30 Author: Lyor Goldstein <lyor.goldst...@gmail.com> Authored: Sat Jun 24 20:02:09 2017 +0300 Committer: Goldstein Lyor <l...@c-b4.com> Committed: Sun Jun 25 09:42:20 2017 +0300 ---------------------------------------------------------------------- .../hosts/DefaultConfigFileHostEntryResolver.java | 2 +- .../keyverifier/DefaultKnownHostsServerKeyVerifier.java | 4 ++-- .../org/apache/sshd/client/scp/AbstractScpClient.java | 2 +- .../sshd/common/file/root/RootedFileSystemProvider.java | 2 +- .../main/java/org/apache/sshd/common/scp/ScpHelper.java | 12 ++++++------ .../scp/helpers/LocalFileScpTargetStreamResolver.java | 4 ++-- .../sshd/common/util/io/ModifiableFileWatcher.java | 2 +- .../config/keys/DefaultAuthorizedKeysAuthenticator.java | 4 ++-- .../apache/sshd/server/config/keys/ServerIdentity.java | 2 +- .../keyprovider/AbstractGeneratorHostKeyProvider.java | 2 +- .../sshd/client/config/keys/ClientIdentityTest.java | 2 +- .../extensions/helpers/CopyDataExtensionImplTest.java | 2 +- .../extensions/helpers/CopyFileExtensionImplTest.java | 2 +- .../sshd/common/config/keys/AuthorizedKeyEntryTest.java | 2 +- .../sshd/server/config/keys/ServerIdentityTest.java | 2 +- 15 files changed, 23 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/DefaultConfigFileHostEntryResolver.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/DefaultConfigFileHostEntryResolver.java b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/DefaultConfigFileHostEntryResolver.java index e04cad6..b03225c 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/DefaultConfigFileHostEntryResolver.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/DefaultConfigFileHostEntryResolver.java @@ -56,7 +56,7 @@ public class DefaultConfigFileHostEntryResolver extends ConfigFileHostEntryResol } public DefaultConfigFileHostEntryResolver(File file, boolean strict) { - this(Objects.requireNonNull(file, "No file provided").toPath(), strict, IoUtils.getLinkOptions(false)); + this(Objects.requireNonNull(file, "No file provided").toPath(), strict, IoUtils.getLinkOptions(true)); } public DefaultConfigFileHostEntryResolver(Path path, boolean strict, LinkOption... options) { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DefaultKnownHostsServerKeyVerifier.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DefaultKnownHostsServerKeyVerifier.java b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DefaultKnownHostsServerKeyVerifier.java index 623dfdf..f2f83ad 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DefaultKnownHostsServerKeyVerifier.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DefaultKnownHostsServerKeyVerifier.java @@ -47,11 +47,11 @@ public class DefaultKnownHostsServerKeyVerifier extends KnownHostsServerKeyVerif } public DefaultKnownHostsServerKeyVerifier(ServerKeyVerifier delegate, boolean strict) { - this(delegate, strict, KnownHostEntry.getDefaultKnownHostsFile(), IoUtils.getLinkOptions(false)); + this(delegate, strict, KnownHostEntry.getDefaultKnownHostsFile(), IoUtils.getLinkOptions(true)); } public DefaultKnownHostsServerKeyVerifier(ServerKeyVerifier delegate, boolean strict, File file) { - this(delegate, strict, Objects.requireNonNull(file, "No file provided").toPath(), IoUtils.getLinkOptions(false)); + this(delegate, strict, Objects.requireNonNull(file, "No file provided").toPath(), IoUtils.getLinkOptions(true)); } public DefaultKnownHostsServerKeyVerifier(ServerKeyVerifier delegate, boolean strict, Path file, LinkOption... options) { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java index 2e13046..81c20db 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java @@ -93,7 +93,7 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S local = ValidateUtils.checkNotNull(local, "Invalid argument local: %s", local); remote = ValidateUtils.checkNotNullAndNotEmpty(remote, "Invalid argument remote: %s", remote); - LinkOption[] opts = IoUtils.getLinkOptions(false); + LinkOption[] opts = IoUtils.getLinkOptions(true); if (Files.isDirectory(local, opts)) { options = addTargetIsDirectory(options); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/common/file/root/RootedFileSystemProvider.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/file/root/RootedFileSystemProvider.java b/sshd-core/src/main/java/org/apache/sshd/common/file/root/RootedFileSystemProvider.java index f181710..ee1fa2e 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/file/root/RootedFileSystemProvider.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/file/root/RootedFileSystemProvider.java @@ -132,7 +132,7 @@ public class RootedFileSystemProvider extends FileSystemProvider { } private static Path ensureDirectory(Path path) { - return IoUtils.ensureDirectory(path, IoUtils.getLinkOptions(false)); + return IoUtils.ensureDirectory(path, IoUtils.getLinkOptions(true)); } @Override http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java b/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java index a7e46f9..56f03de 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java @@ -162,9 +162,9 @@ public class ScpHelper extends AbstractLoggingBean implements SessionHolder<Sess } public void receive(Path local, final boolean recursive, boolean shouldBeDir, final boolean preserve, final int bufferSize) throws IOException { - final Path path = Objects.requireNonNull(local, "No local path").normalize().toAbsolutePath(); + Path path = Objects.requireNonNull(local, "No local path").normalize().toAbsolutePath(); if (shouldBeDir) { - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); Boolean status = IoUtils.checkFileExists(path, options); if (status == null) { throw new SshException("Target directory " + path + " is most like inaccessible"); @@ -255,7 +255,7 @@ public class ScpHelper extends AbstractLoggingBean implements SessionHolder<Sess throw new IOException("Expected 0 length for directory but got " + length); } - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); Boolean status = IoUtils.checkFileExists(path, options); if (status == null) { throw new AccessDeniedException("Receive directory existence status cannot be determined: " + path); @@ -446,7 +446,7 @@ public class ScpHelper extends AbstractLoggingBean implements SessionHolder<Sess } validateOperationReadyCode("send", "Paths", readyCode, false); - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); for (String pattern : paths) { pattern = pattern.replace('/', File.separatorChar); @@ -494,7 +494,7 @@ public class ScpHelper extends AbstractLoggingBean implements SessionHolder<Sess } validateOperationReadyCode("sendPaths", "Paths", readyCode, false); - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); for (Path file : paths) { send(file, recursive, preserve, bufferSize, options); } @@ -695,7 +695,7 @@ public class ScpHelper extends AbstractLoggingBean implements SessionHolder<Sess validateAckReplyCode(cmd, path, readyCode, false); } - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); Set<PosixFilePermission> perms = IoUtils.getPermissions(path, options); String cmd = "D" + (preserve ? getOctalPermissions(perms) : "0755") + " " + "0" + " " + path.getFileName().toString(); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/common/scp/helpers/LocalFileScpTargetStreamResolver.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/scp/helpers/LocalFileScpTargetStreamResolver.java b/sshd-core/src/main/java/org/apache/sshd/common/scp/helpers/LocalFileScpTargetStreamResolver.java index 5a97ca1..f2b91ab 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/scp/helpers/LocalFileScpTargetStreamResolver.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/scp/helpers/LocalFileScpTargetStreamResolver.java @@ -51,7 +51,7 @@ public class LocalFileScpTargetStreamResolver extends AbstractLoggingBean implem private Path file; public LocalFileScpTargetStreamResolver(Path path, ScpFileOpener opener) throws IOException { - LinkOption[] linkOptions = IoUtils.getLinkOptions(false); + LinkOption[] linkOptions = IoUtils.getLinkOptions(true); this.status = IoUtils.checkFileExists(path, linkOptions); if (status == null) { throw new AccessDeniedException("Receive target file path existence status cannot be determined: " + path); @@ -68,7 +68,7 @@ public class LocalFileScpTargetStreamResolver extends AbstractLoggingBean implem throw new StreamCorruptedException("resolveTargetStream(" + name + ")[" + perms + "] already resolved: " + file); } - LinkOption[] linkOptions = IoUtils.getLinkOptions(false); + LinkOption[] linkOptions = IoUtils.getLinkOptions(true); if (status && Files.isDirectory(path, linkOptions)) { String localName = name.replace('/', File.separatorChar); // in case we are running on Windows file = path.resolve(localName); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/common/util/io/ModifiableFileWatcher.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/io/ModifiableFileWatcher.java b/sshd-core/src/main/java/org/apache/sshd/common/util/io/ModifiableFileWatcher.java index d1f057c..ba8c276 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/util/io/ModifiableFileWatcher.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/io/ModifiableFileWatcher.java @@ -69,7 +69,7 @@ public class ModifiableFileWatcher extends AbstractLoggingBean { } public ModifiableFileWatcher(Path file) { - this(file, IoUtils.getLinkOptions(false)); + this(file, IoUtils.getLinkOptions(true)); } public ModifiableFileWatcher(Path file, LinkOption... options) { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/server/config/keys/DefaultAuthorizedKeysAuthenticator.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/config/keys/DefaultAuthorizedKeysAuthenticator.java b/sshd-core/src/main/java/org/apache/sshd/server/config/keys/DefaultAuthorizedKeysAuthenticator.java index f2da274..fc7070a 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/config/keys/DefaultAuthorizedKeysAuthenticator.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/config/keys/DefaultAuthorizedKeysAuthenticator.java @@ -70,11 +70,11 @@ public class DefaultAuthorizedKeysAuthenticator extends AuthorizedKeysAuthentica } public DefaultAuthorizedKeysAuthenticator(File file, boolean strict) { - this(Objects.requireNonNull(file, "No file provided").toPath(), strict, IoUtils.getLinkOptions(false)); + this(Objects.requireNonNull(file, "No file provided").toPath(), strict, IoUtils.getLinkOptions(true)); } public DefaultAuthorizedKeysAuthenticator(String user, File file, boolean strict) { - this(user, Objects.requireNonNull(file, "No file provided").toPath(), strict, IoUtils.getLinkOptions(false)); + this(user, Objects.requireNonNull(file, "No file provided").toPath(), strict, IoUtils.getLinkOptions(true)); } public DefaultAuthorizedKeysAuthenticator(Path path, boolean strict, LinkOption... options) { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/server/config/keys/ServerIdentity.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/config/keys/ServerIdentity.java b/sshd-core/src/main/java/org/apache/sshd/server/config/keys/ServerIdentity.java index 8858d32..a15199a 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/config/keys/ServerIdentity.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/config/keys/ServerIdentity.java @@ -79,7 +79,7 @@ public final class ServerIdentity { */ public static <S extends SshServer> S setKeyPairProvider(S server, Properties props, boolean supportedOnly) throws IOException, GeneralSecurityException { - KeyPairProvider provider = loadKeyPairProvider(props, supportedOnly, IoUtils.getLinkOptions(false)); + KeyPairProvider provider = loadKeyPairProvider(props, supportedOnly, IoUtils.getLinkOptions(true)); if (provider != null) { server.setKeyPairProvider(provider); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java b/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java index 79ffbe0..9131f99 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java @@ -209,7 +209,7 @@ public abstract class AbstractGeneratorHostKeyProvider extends AbstractKeyPairPr } protected KeyPair loadFromFile(String alg, Path keyPath) throws IOException, GeneralSecurityException { - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); if ((!Files.exists(keyPath, options)) || (!Files.isRegularFile(keyPath, options))) { return null; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/test/java/org/apache/sshd/client/config/keys/ClientIdentityTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/client/config/keys/ClientIdentityTest.java b/sshd-core/src/test/java/org/apache/sshd/client/config/keys/ClientIdentityTest.java index 896f37d..580d051 100644 --- a/sshd-core/src/test/java/org/apache/sshd/client/config/keys/ClientIdentityTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/client/config/keys/ClientIdentityTest.java @@ -50,7 +50,7 @@ public class ClientIdentityTest extends BaseTestSupport { @Test public void testLoadClientIdentities() throws Exception { Path resFolder = getClassResourcesFolder(TEST_SUBFOLDER, getClass()); - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); Collection<BuiltinIdentities> expected = EnumSet.noneOf(BuiltinIdentities.class); for (BuiltinIdentities type : BuiltinIdentities.VALUES) { String fileName = ClientIdentity.getIdentityFileName(type); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImplTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImplTest.java b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImplTest.java index 1c04c32..473ad1f 100644 --- a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImplTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImplTest.java @@ -136,7 +136,7 @@ public class CopyDataExtensionImplTest extends AbstractSftpClientTestSupport { Path targetPath = detectTargetFolder(); Path parentPath = targetPath.getParent(); Path lclSftp = Utils.resolve(targetPath, SftpConstants.SFTP_SUBSYSTEM_NAME, getClass().getSimpleName()); - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); String baseName = readOffset + "-" + readLength + "-" + writeOffset; Path srcFile = assertHierarchyTargetFolderExists(lclSftp, options).resolve(baseName + "-src.txt"); Files.write(srcFile, data, IoUtils.EMPTY_OPEN_OPTIONS); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImplTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImplTest.java b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImplTest.java index f1acc08..309a145 100644 --- a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImplTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImplTest.java @@ -68,7 +68,7 @@ public class CopyFileExtensionImplTest extends AbstractSftpClientTestSupport { Path dstFile = lclSftp.resolve("dst.txt"); String dstPath = Utils.resolveRelativeRemotePath(parentPath, dstFile); - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); assertFalse("Destination file unexpectedly exists", Files.exists(dstFile, options)); try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryTest.java b/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryTest.java index 8b3340e..d28e3df 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryTest.java @@ -84,7 +84,7 @@ public class AuthorizedKeyEntryTest extends AuthorizedKeysTestSupport { Path path = AuthorizedKeysAuthenticator.getDefaultAuthorizedKeysFile(); assertNotNull("No default location", path); - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); if (!Files.exists(path, options)) { outputDebugMessage("Verify non-existing %s", path); Collection<AuthorizedKeyEntry> entries = AuthorizedKeysAuthenticator.readDefaultAuthorizedKeys(); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/270d91b1/sshd-core/src/test/java/org/apache/sshd/server/config/keys/ServerIdentityTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/server/config/keys/ServerIdentityTest.java b/sshd-core/src/test/java/org/apache/sshd/server/config/keys/ServerIdentityTest.java index 0ff1dd6..c6c379d 100644 --- a/sshd-core/src/test/java/org/apache/sshd/server/config/keys/ServerIdentityTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/server/config/keys/ServerIdentityTest.java @@ -52,7 +52,7 @@ public class ServerIdentityTest extends BaseTestSupport { public void testLoadServerIdentities() throws Exception { Path resFolder = getClassResourcesFolder(TEST_SUBFOLDER, getClass()); Collection<Path> paths = new ArrayList<>(BuiltinIdentities.VALUES.size()); - LinkOption[] options = IoUtils.getLinkOptions(false); + LinkOption[] options = IoUtils.getLinkOptions(true); Collection<BuiltinIdentities> expected = EnumSet.noneOf(BuiltinIdentities.class); for (BuiltinIdentities type : BuiltinIdentities.VALUES) { String fileName = ServerIdentity.getIdentityFileName(type);