You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2018/11/19 12:50:18 UTC
[3/3] mina-sshd git commit: The various 'ClientIdentitiesWatcher'(s)
use a type-safe 'ClientIdentityLoaderHolder' and 'FilePasswordProviderHolder'
instead of the generic 'Supplier' definition
The various 'ClientIdentitiesWatcher'(s) use a type-safe 'ClientIdentityLoaderHolder' and 'FilePasswordProviderHolder' instead of the generic 'Supplier' definition
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/fc7a8e7c
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/fc7a8e7c
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/fc7a8e7c
Branch: refs/heads/master
Commit: fc7a8e7c2f90a2b20ea4882a4d8b08be31753446
Parents: 98a708a
Author: Lyor Goldstein <lg...@apache.org>
Authored: Mon Nov 19 14:46:10 2018 +0200
Committer: Lyor Goldstein <lg...@apache.org>
Committed: Mon Nov 19 14:50:10 2018 +0200
----------------------------------------------------------------------
CHANGES.md | 6 ++++++
.../sshd/client/config/hosts/HostConfigEntry.java | 4 ++--
.../keys/BuiltinClientIdentitiesWatcher.java | 10 +++++-----
.../config/keys/ClientIdentitiesWatcher.java | 18 +++++++++---------
.../config/keys/ClientIdentityFileWatcher.java | 18 ++++++++----------
.../config/keys/ClientIdentityLoaderHolder.java | 6 ++++--
.../keys/DefaultClientIdentitiesWatcher.java | 13 ++++++-------
.../config/keys/FilePasswordProviderHolder.java | 6 ++++--
8 files changed, 44 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/fc7a8e7c/CHANGES.md
----------------------------------------------------------------------
diff --git a/CHANGES.md b/CHANGES.md
index 9cbb99f..5074ade 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -63,6 +63,9 @@ accept also an `AttributeRepository` connection context argument (propagated fro
* `SshClient#loadClientIdentities` has been renamed to `preloadClientIdentities` + it returns a
`KeyIdentityProvider` instead of a collection of strings representing paths.
+* The various `ClientIdentitiesWatcher`(s) use a type-safe `ClientIdentityLoaderHolder` and
+`FilePasswordProviderHolder` instead of the generic `Supplier` definition.
+
## Behavioral changes and enhancements
* [SSHD-849](https://issues.apache.org/jira/browse/SSHD-849) - Data forwarding code makes sure all
@@ -92,6 +95,9 @@ key loading methods are invoked.
* [SSHD-864](https://issues.apache.org/jira/browse/SSHD-864) - Using a `NamedResource` instead of plain old string
in order to provide key file(s) location information
+* [SSHD-865](https://issues.apache.org/jira/browse/SSHD-865) - Key identities overrides specified in the
+[ssh_config](http://www.gsp.com/cgi-bin/man.cgi?topic=ssh_config) configuration file are also lazy loaded
+
* [SSHD-866](https://issues.apache.org/jira/browse/SSHD-866) - Counting empty challenges separately when enforcing
max. attempts during `keyboard-interactive` authentication
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/fc7a8e7c/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java b/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
index eafedd8..c2d3bcb 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
@@ -61,8 +61,8 @@ import org.apache.sshd.common.util.io.NoCloseReader;
/**
* Represents an entry in the client's configuration file as defined by
- * the <A HREF="http://www.gsp.com/cgi-bin/man.cgi?topic=ssh_config">configuration
- * file format</A>
+ * the <A HREF="http://www.gsp.com/cgi-bin/man.cgi?topic=ssh_config">ssh_config</A>
+ * configuration file format
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
*/
public class HostConfigEntry extends HostPatternsHolder implements MutableUserHolder {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/fc7a8e7c/sshd-common/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java
index bb3f738..5986e25 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java
@@ -26,11 +26,11 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
-import java.util.function.Supplier;
import org.apache.sshd.common.NamedResource;
import org.apache.sshd.common.config.keys.BuiltinIdentities;
import org.apache.sshd.common.config.keys.FilePasswordProvider;
+import org.apache.sshd.common.config.keys.FilePasswordProviderHolder;
import org.apache.sshd.common.config.keys.KeyUtils;
import org.apache.sshd.common.session.SessionContext;
import org.apache.sshd.common.util.GenericUtils;
@@ -49,18 +49,18 @@ public class BuiltinClientIdentitiesWatcher extends ClientIdentitiesWatcher {
public BuiltinClientIdentitiesWatcher(Path keysFolder, Collection<String> ids, boolean supportedOnly,
ClientIdentityLoader loader, FilePasswordProvider provider, boolean strict) {
this(keysFolder, ids, supportedOnly,
- GenericUtils.supplierOf(Objects.requireNonNull(loader, "No client identity loader")),
- GenericUtils.supplierOf(Objects.requireNonNull(provider, "No password provider")),
+ ClientIdentityLoaderHolder.loaderHolderOf(Objects.requireNonNull(loader, "No client identity loader")),
+ FilePasswordProviderHolder.providerHolderOf(Objects.requireNonNull(provider, "No password provider")),
strict);
}
public BuiltinClientIdentitiesWatcher(Path keysFolder, boolean supportedOnly,
- Supplier<ClientIdentityLoader> loader, Supplier<FilePasswordProvider> provider, boolean strict) {
+ ClientIdentityLoaderHolder loader, FilePasswordProviderHolder provider, boolean strict) {
this(keysFolder, NamedResource.getNameList(BuiltinIdentities.VALUES), supportedOnly, loader, provider, strict);
}
public BuiltinClientIdentitiesWatcher(Path keysFolder, Collection<String> ids, boolean supportedOnly,
- Supplier<ClientIdentityLoader> loader, Supplier<FilePasswordProvider> provider, boolean strict) {
+ ClientIdentityLoaderHolder loader, FilePasswordProviderHolder provider, boolean strict) {
super(getBuiltinIdentitiesPaths(keysFolder, ids), loader, provider, strict);
this.supportedOnly = supportedOnly;
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/fc7a8e7c/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
index eed14e9..d3e567c 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
@@ -26,9 +26,9 @@ import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.function.Predicate;
-import java.util.function.Supplier;
import org.apache.sshd.common.config.keys.FilePasswordProvider;
+import org.apache.sshd.common.config.keys.FilePasswordProviderHolder;
import org.apache.sshd.common.keyprovider.AbstractKeyPairProvider;
import org.apache.sshd.common.keyprovider.KeyPairProvider;
import org.apache.sshd.common.session.SessionContext;
@@ -50,18 +50,18 @@ public class ClientIdentitiesWatcher extends AbstractKeyPairProvider implements
public ClientIdentitiesWatcher(Collection<? extends Path> paths,
ClientIdentityLoader loader, FilePasswordProvider provider, boolean strict) {
this(paths,
- GenericUtils.supplierOf(Objects.requireNonNull(loader, "No client identity loader")),
- GenericUtils.supplierOf(Objects.requireNonNull(provider, "No password provider")),
+ ClientIdentityLoaderHolder.loaderHolderOf(Objects.requireNonNull(loader, "No client identity loader")),
+ FilePasswordProviderHolder.providerHolderOf(Objects.requireNonNull(provider, "No password provider")),
strict);
}
public ClientIdentitiesWatcher(Collection<? extends Path> paths,
- Supplier<ClientIdentityLoader> loader, Supplier<FilePasswordProvider> provider) {
+ ClientIdentityLoaderHolder loader, FilePasswordProviderHolder provider) {
this(paths, loader, provider, true);
}
public ClientIdentitiesWatcher(Collection<? extends Path> paths,
- Supplier<ClientIdentityLoader> loader, Supplier<FilePasswordProvider> provider, boolean strict) {
+ ClientIdentityLoaderHolder loader, FilePasswordProviderHolder provider, boolean strict) {
this(buildProviders(paths, loader, provider, strict));
}
@@ -102,14 +102,14 @@ public class ClientIdentitiesWatcher extends AbstractKeyPairProvider implements
public static List<ClientIdentityProvider> buildProviders(
Collection<? extends Path> paths, ClientIdentityLoader loader, FilePasswordProvider provider, boolean strict) {
return buildProviders(paths,
- GenericUtils.supplierOf(Objects.requireNonNull(loader, "No client identity loader")),
- GenericUtils.supplierOf(Objects.requireNonNull(provider, "No password provider")),
+ ClientIdentityLoaderHolder.loaderHolderOf(Objects.requireNonNull(loader, "No client identity loader")),
+ FilePasswordProviderHolder.providerHolderOf(Objects.requireNonNull(provider, "No password provider")),
strict);
}
public static List<ClientIdentityProvider> buildProviders(
- Collection<? extends Path> paths, Supplier<? extends ClientIdentityLoader> loader,
- Supplier<? extends FilePasswordProvider> provider, boolean strict) {
+ Collection<? extends Path> paths, ClientIdentityLoaderHolder loader,
+ FilePasswordProviderHolder provider, boolean strict) {
if (GenericUtils.isEmpty(paths)) {
return Collections.emptyList();
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/fc7a8e7c/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
index 5832911..56f946d 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
@@ -27,13 +27,11 @@ import java.security.PublicKey;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.Supplier;
import org.apache.sshd.common.config.keys.FilePasswordProvider;
import org.apache.sshd.common.config.keys.FilePasswordProviderHolder;
import org.apache.sshd.common.config.keys.KeyUtils;
import org.apache.sshd.common.session.SessionContext;
-import org.apache.sshd.common.util.GenericUtils;
import org.apache.sshd.common.util.io.IoUtils;
import org.apache.sshd.common.util.io.ModifiableFileWatcher;
import org.apache.sshd.common.util.io.resource.PathResource;
@@ -48,8 +46,8 @@ public class ClientIdentityFileWatcher
extends ModifiableFileWatcher
implements ClientIdentityProvider, ClientIdentityLoaderHolder, FilePasswordProviderHolder {
private final AtomicReference<KeyPair> identityHolder = new AtomicReference<>(null);
- private final Supplier<? extends ClientIdentityLoader> loaderHolder;
- private final Supplier<? extends FilePasswordProvider> providerHolder;
+ private final ClientIdentityLoaderHolder loaderHolder;
+ private final FilePasswordProviderHolder providerHolder;
private final boolean strict;
public ClientIdentityFileWatcher(Path path, ClientIdentityLoader loader, FilePasswordProvider provider) {
@@ -58,18 +56,18 @@ public class ClientIdentityFileWatcher
public ClientIdentityFileWatcher(Path path, ClientIdentityLoader loader, FilePasswordProvider provider, boolean strict) {
this(path,
- GenericUtils.supplierOf(Objects.requireNonNull(loader, "No client identity loader")),
- GenericUtils.supplierOf(Objects.requireNonNull(provider, "No password provider")),
+ ClientIdentityLoaderHolder.loaderHolderOf(Objects.requireNonNull(loader, "No client identity loader")),
+ FilePasswordProviderHolder.providerHolderOf(Objects.requireNonNull(provider, "No password provider")),
strict);
}
public ClientIdentityFileWatcher(
- Path path, Supplier<? extends ClientIdentityLoader> loader, Supplier<? extends FilePasswordProvider> provider) {
+ Path path, ClientIdentityLoaderHolder loader, FilePasswordProviderHolder provider) {
this(path, loader, provider, true);
}
public ClientIdentityFileWatcher(
- Path path, Supplier<? extends ClientIdentityLoader> loader, Supplier<? extends FilePasswordProvider> provider, boolean strict) {
+ Path path, ClientIdentityLoaderHolder loader, FilePasswordProviderHolder provider, boolean strict) {
super(path);
this.loaderHolder = Objects.requireNonNull(loader, "No client identity loader");
this.providerHolder = Objects.requireNonNull(provider, "No password provider");
@@ -82,12 +80,12 @@ public class ClientIdentityFileWatcher
@Override
public ClientIdentityLoader getClientIdentityLoader() {
- return loaderHolder.get();
+ return loaderHolder.getClientIdentityLoader();
}
@Override
public FilePasswordProvider getFilePasswordProvider() {
- return providerHolder.get();
+ return providerHolder.getFilePasswordProvider();
}
@Override
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/fc7a8e7c/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityLoaderHolder.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityLoaderHolder.java b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityLoaderHolder.java
index ecd0f0e..922f346 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityLoaderHolder.java
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityLoaderHolder.java
@@ -20,8 +20,6 @@
package org.apache.sshd.client.config.keys;
/**
- * TODO Add javadoc
- *
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
*/
@FunctionalInterface
@@ -31,4 +29,8 @@ public interface ClientIdentityLoaderHolder {
* key pair identities - never {@code null}
*/
ClientIdentityLoader getClientIdentityLoader();
+
+ static ClientIdentityLoaderHolder loaderHolderOf(ClientIdentityLoader loader) {
+ return () -> loader;
+ }
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/fc7a8e7c/sshd-common/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java
index ee710c3..cee0af5 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java
@@ -22,11 +22,10 @@ package org.apache.sshd.client.config.keys;
import java.nio.file.Path;
import java.util.List;
import java.util.Objects;
-import java.util.function.Supplier;
import org.apache.sshd.common.config.keys.FilePasswordProvider;
+import org.apache.sshd.common.config.keys.FilePasswordProviderHolder;
import org.apache.sshd.common.config.keys.PublicKeyEntry;
-import org.apache.sshd.common.util.GenericUtils;
/**
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
@@ -43,21 +42,21 @@ public class DefaultClientIdentitiesWatcher extends BuiltinClientIdentitiesWatch
public DefaultClientIdentitiesWatcher(
boolean supportedOnly, ClientIdentityLoader loader, FilePasswordProvider provider, boolean strict) {
this(supportedOnly,
- GenericUtils.supplierOf(Objects.requireNonNull(loader, "No client identity loader")),
- GenericUtils.supplierOf(Objects.requireNonNull(provider, "No password provider")),
+ ClientIdentityLoaderHolder.loaderHolderOf(Objects.requireNonNull(loader, "No client identity loader")),
+ FilePasswordProviderHolder.providerHolderOf(Objects.requireNonNull(provider, "No password provider")),
strict);
}
- public DefaultClientIdentitiesWatcher(Supplier<ClientIdentityLoader> loader, Supplier<FilePasswordProvider> provider) {
+ public DefaultClientIdentitiesWatcher(ClientIdentityLoaderHolder loader, FilePasswordProviderHolder provider) {
this(loader, provider, true);
}
- public DefaultClientIdentitiesWatcher(Supplier<ClientIdentityLoader> loader, Supplier<FilePasswordProvider> provider, boolean strict) {
+ public DefaultClientIdentitiesWatcher(ClientIdentityLoaderHolder loader, FilePasswordProviderHolder provider, boolean strict) {
this(true, loader, provider, strict);
}
public DefaultClientIdentitiesWatcher(boolean supportedOnly,
- Supplier<ClientIdentityLoader> loader, Supplier<FilePasswordProvider> provider, boolean strict) {
+ ClientIdentityLoaderHolder loader, FilePasswordProviderHolder provider, boolean strict) {
super(PublicKeyEntry.getDefaultKeysFolderPath(), supportedOnly, loader, provider, strict);
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/fc7a8e7c/sshd-common/src/main/java/org/apache/sshd/common/config/keys/FilePasswordProviderHolder.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/FilePasswordProviderHolder.java b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/FilePasswordProviderHolder.java
index a872fac..9e2ce16 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/FilePasswordProviderHolder.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/FilePasswordProviderHolder.java
@@ -20,8 +20,6 @@
package org.apache.sshd.common.config.keys;
/**
- * TODO Add javadoc
- *
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
*/
@FunctionalInterface
@@ -32,4 +30,8 @@ public interface FilePasswordProviderHolder {
* @see FilePasswordProvider#EMPTY
*/
FilePasswordProvider getFilePasswordProvider();
+
+ static FilePasswordProviderHolder providerHolderOf(FilePasswordProvider provider) {
+ return () -> provider;
+ }
}