Repository: mina-sshd Updated Branches: refs/heads/master a4f4e2811 -> 3c6bfab46
[SSHD-824] Do not use anonymous inner classes to initialize collections Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/3c6bfab4 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/3c6bfab4 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/3c6bfab4 Branch: refs/heads/master Commit: 3c6bfab46d08e87b195d5d7f72cb940eeedda495 Parents: a4f4e28 Author: Guillaume Nodet <gno...@apache.org> Authored: Mon May 28 12:42:06 2018 +0200 Committer: Guillaume Nodet <gno...@apache.org> Committed: Mon May 28 12:42:06 2018 +0200 ---------------------------------------------------------------------- .../config/keys/loader/putty/PuttyKeyUtils.java | 58 ++++++--------- .../sshd/agent/unix/UnixAgentFactory.java | 37 ++++------ .../loader/PrivateKeyEncryptionContext.java | 21 ++---- .../apache/sshd/common/io/nio2/Nio2Service.java | 26 +++---- .../sshd/common/util/net/SshdSocketAddress.java | 32 ++------ .../sshd/common/channel/WindowInitTest.java | 28 +++---- ...AuthorizedKeyEntryLoginOptionsParseTest.java | 78 +++++++++----------- .../pem/PKCS8PEMResourceKeyPairParserTest.java | 25 ++----- .../sshd/common/io/nio2/Nio2ServiceTest.java | 22 ++---- .../util/net/SshdSocketIpv6AddressTest.java | 21 ++---- ...SecurityProviderRegistrarCipherNameTest.java | 27 +++---- .../util/security/eddsa/Ed25519VectorsTest.java | 25 +++---- .../sshd/common/subsystem/sftp/SftpHelper.java | 78 ++++++++++---------- 13 files changed, 188 insertions(+), 290 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-contrib/src/main/java/org/apache/sshd/common/config/keys/loader/putty/PuttyKeyUtils.java ---------------------------------------------------------------------- diff --git a/sshd-contrib/src/main/java/org/apache/sshd/common/config/keys/loader/putty/PuttyKeyUtils.java b/sshd-contrib/src/main/java/org/apache/sshd/common/config/keys/loader/putty/PuttyKeyUtils.java index ee2851b..e750ace 100644 --- a/sshd-contrib/src/main/java/org/apache/sshd/common/config/keys/loader/putty/PuttyKeyUtils.java +++ b/sshd-contrib/src/main/java/org/apache/sshd/common/config/keys/loader/putty/PuttyKeyUtils.java @@ -33,43 +33,33 @@ import org.apache.sshd.common.util.security.SecurityUtils; * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ public final class PuttyKeyUtils { - public static final List<PuttyKeyPairResourceParser<?, ?>> DEFAULT_PARSERS = - Collections.unmodifiableList(new ArrayList<PuttyKeyPairResourceParser<?, ?>>() { - // Not serializing it - private static final long serialVersionUID = 1L; + public static final List<PuttyKeyPairResourceParser<?, ?>> DEFAULT_PARSERS; - { - add(RSAPuttyKeyDecoder.INSTANCE); - add(DSSPuttyKeyDecoder.INSTANCE); + public static final NavigableMap<String, PuttyKeyPairResourceParser<?, ?>> BY_KEY_TYPE; - if (SecurityUtils.isECCSupported()) { - add(ECDSAPuttyKeyDecoder.INSTANCE); - } + public static final KeyPairResourceParser DEFAULT_INSTANCE; - if (SecurityUtils.isEDDSACurveSupported()) { - add(EdDSAPuttyKeyDecoder.INSTANCE); - } - } - }); - - public static final NavigableMap<String, PuttyKeyPairResourceParser<?, ?>> BY_KEY_TYPE = - Collections.unmodifiableNavigableMap( - new TreeMap<String, PuttyKeyPairResourceParser<?, ?>>(String.CASE_INSENSITIVE_ORDER) { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - for (PuttyKeyPairResourceParser<?, ?> p : DEFAULT_PARSERS) { - Collection<String> supported = p.getSupportedTypeNames(); - for (String k : supported) { - put(k, p); - } - } - } - }); - - public static final KeyPairResourceParser DEFAULT_INSTANCE = - KeyPairResourceParser.aggregate(DEFAULT_PARSERS); + static { + List<PuttyKeyPairResourceParser<?, ?>> parsers = new ArrayList<>(); + parsers.add(RSAPuttyKeyDecoder.INSTANCE); + parsers.add(DSSPuttyKeyDecoder.INSTANCE); + if (SecurityUtils.isECCSupported()) { + parsers.add(ECDSAPuttyKeyDecoder.INSTANCE); + } + if (SecurityUtils.isEDDSACurveSupported()) { + parsers.add(EdDSAPuttyKeyDecoder.INSTANCE); + } + NavigableMap<String, PuttyKeyPairResourceParser<?, ?>> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + for (PuttyKeyPairResourceParser<?, ?> p : parsers) { + Collection<String> supported = p.getSupportedTypeNames(); + for (String k : supported) { + map.put(k, p); + } + } + DEFAULT_PARSERS = Collections.unmodifiableList(parsers); + BY_KEY_TYPE = Collections.unmodifiableNavigableMap(map); + DEFAULT_INSTANCE = KeyPairResourceParser.aggregate(parsers); + } private PuttyKeyUtils() { throw new UnsupportedOperationException("No instance"); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/main/java/org/apache/sshd/agent/unix/UnixAgentFactory.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/UnixAgentFactory.java b/sshd-core/src/main/java/org/apache/sshd/agent/unix/UnixAgentFactory.java index c701dbe..128214b 100644 --- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/UnixAgentFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/UnixAgentFactory.java @@ -19,19 +19,18 @@ package org.apache.sshd.agent.unix; import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.concurrent.ExecutorService; +import java.util.stream.Collectors; import org.apache.sshd.agent.SshAgent; import org.apache.sshd.agent.SshAgentFactory; import org.apache.sshd.agent.SshAgentServer; import org.apache.sshd.common.FactoryManager; import org.apache.sshd.common.NamedFactory; -import org.apache.sshd.common.NamedResource; import org.apache.sshd.common.SshException; import org.apache.sshd.common.channel.Channel; import org.apache.sshd.common.session.ConnectionService; @@ -84,27 +83,19 @@ public class UnixAgentFactory implements SshAgentFactory, ExecutorServiceConfigu @Override public List<NamedFactory<Channel>> getChannelForwardingFactories(FactoryManager manager) { final ExecutorServiceConfigurer configurer = this; - return Collections.unmodifiableList(new ArrayList<NamedFactory<Channel>>(DEFAULT_FORWARDING_CHANNELS.size()) { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - for (NamedResource r : DEFAULT_FORWARDING_CHANNELS) { - String channelType = r.getName(); - add(new ChannelAgentForwardingFactory(channelType) { - @Override - public ExecutorService getExecutorService() { - return configurer.getExecutorService(); - } - - @Override - public boolean isShutdownOnExit() { - return configurer.isShutdownOnExit(); - } - }); - } - } - }); + return Collections.unmodifiableList(DEFAULT_FORWARDING_CHANNELS.stream() + .map(cf -> new ChannelAgentForwardingFactory(cf.getName()) { + @Override + public ExecutorService getExecutorService() { + return configurer.getExecutorService(); + } + + @Override + public boolean isShutdownOnExit() { + return configurer.isShutdownOnExit(); + } + }) + .collect(Collectors.toList())); } @Override http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/main/java/org/apache/sshd/common/config/keys/loader/PrivateKeyEncryptionContext.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/config/keys/loader/PrivateKeyEncryptionContext.java b/sshd-core/src/main/java/org/apache/sshd/common/config/keys/loader/PrivateKeyEncryptionContext.java index f4f4cda..5e03cdb 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/config/keys/loader/PrivateKeyEncryptionContext.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/config/keys/loader/PrivateKeyEncryptionContext.java @@ -23,10 +23,12 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.NavigableMap; +import java.util.Map; import java.util.NavigableSet; import java.util.Objects; -import java.util.TreeMap; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.ValidateUtils; @@ -37,18 +39,9 @@ import org.apache.sshd.common.util.ValidateUtils; public class PrivateKeyEncryptionContext implements Cloneable { public static final String DEFAULT_CIPHER_MODE = "CBC"; - private static final NavigableMap<String, PrivateKeyObfuscator> OBFUSCATORS = - new TreeMap<String, PrivateKeyObfuscator>(String.CASE_INSENSITIVE_ORDER) { - private static final long serialVersionUID = 1L; // no serialization expected - - { - for (PrivateKeyObfuscator o : new PrivateKeyObfuscator[]{ - AESPrivateKeyObfuscator.INSTANCE, DESPrivateKeyObfuscator.INSTANCE - }) { - put(o.getCipherName(), o); - } - } - }; + private static final Map<String, PrivateKeyObfuscator> OBFUSCATORS = + Stream.of(AESPrivateKeyObfuscator.INSTANCE, DESPrivateKeyObfuscator.INSTANCE) + .collect(Collectors.toMap(AbstractPrivateKeyObfuscator::getCipherName, Function.identity())); private String cipherName; private String cipherType; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java index acf5761..d0983ff 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java @@ -48,20 +48,18 @@ import org.apache.sshd.common.util.closeable.AbstractInnerCloseable; */ public abstract class Nio2Service extends AbstractInnerCloseable implements IoService, FactoryManagerHolder { // Note: order may be important so that's why we use a LinkedHashMap - public static final Map<String, SimpleImmutableEntry<SocketOption<?>, Object>> CONFIGURABLE_OPTIONS = - Collections.unmodifiableMap(new LinkedHashMap<String, SimpleImmutableEntry<SocketOption<?>, Object>>() { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - put(FactoryManager.SOCKET_KEEPALIVE, new SimpleImmutableEntry<>(StandardSocketOptions.SO_KEEPALIVE, null)); - put(FactoryManager.SOCKET_LINGER, new SimpleImmutableEntry<>(StandardSocketOptions.SO_LINGER, null)); - put(FactoryManager.SOCKET_RCVBUF, new SimpleImmutableEntry<>(StandardSocketOptions.SO_RCVBUF, null)); - put(FactoryManager.SOCKET_REUSEADDR, new SimpleImmutableEntry<>(StandardSocketOptions.SO_REUSEADDR, DEFAULT_REUSE_ADDRESS)); - put(FactoryManager.SOCKET_SNDBUF, new SimpleImmutableEntry<>(StandardSocketOptions.SO_SNDBUF, null)); - put(FactoryManager.TCP_NODELAY, new SimpleImmutableEntry<>(StandardSocketOptions.TCP_NODELAY, null)); - } - }); + public static final Map<String, SimpleImmutableEntry<SocketOption<?>, Object>> CONFIGURABLE_OPTIONS; + + static { + Map<String, SimpleImmutableEntry<SocketOption<?>, Object>> map = new LinkedHashMap<>(); + map.put(FactoryManager.SOCKET_KEEPALIVE, new SimpleImmutableEntry<>(StandardSocketOptions.SO_KEEPALIVE, null)); + map.put(FactoryManager.SOCKET_LINGER, new SimpleImmutableEntry<>(StandardSocketOptions.SO_LINGER, null)); + map.put(FactoryManager.SOCKET_RCVBUF, new SimpleImmutableEntry<>(StandardSocketOptions.SO_RCVBUF, null)); + map.put(FactoryManager.SOCKET_REUSEADDR, new SimpleImmutableEntry<>(StandardSocketOptions.SO_REUSEADDR, DEFAULT_REUSE_ADDRESS)); + map.put(FactoryManager.SOCKET_SNDBUF, new SimpleImmutableEntry<>(StandardSocketOptions.SO_SNDBUF, null)); + map.put(FactoryManager.TCP_NODELAY, new SimpleImmutableEntry<>(StandardSocketOptions.TCP_NODELAY, null)); + CONFIGURABLE_OPTIONS = Collections.unmodifiableMap(map); + } protected final Map<Long, IoSession> sessions; protected final AtomicBoolean disposing = new AtomicBoolean(); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/main/java/org/apache/sshd/common/util/net/SshdSocketAddress.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/net/SshdSocketAddress.java b/sshd-core/src/main/java/org/apache/sshd/common/util/net/SshdSocketAddress.java index c14b7f1..9e51bd9 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/util/net/SshdSocketAddress.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/net/SshdSocketAddress.java @@ -29,10 +29,10 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Enumeration; +import java.util.LinkedHashSet; import java.util.List; -import java.util.NavigableSet; import java.util.Objects; -import java.util.TreeSet; +import java.util.Set; import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.NumberUtils; @@ -62,16 +62,8 @@ public class SshdSocketAddress extends SocketAddress { public static final String LOCALHOST_IPV4 = "127.0.0.1"; public static final String IPV4_ANYADDR = "0.0.0.0"; - public static final NavigableSet<String> WELL_KNOWN_IPV4_ADDRESSES = - Collections.unmodifiableNavigableSet( - new TreeSet<String>(String.CASE_INSENSITIVE_ORDER) { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - addAll(Arrays.asList(LOCALHOST_IPV4, IPV4_ANYADDR)); - } - }); + public static final Set<String> WELL_KNOWN_IPV4_ADDRESSES = + Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(LOCALHOST_IPV4, IPV4_ANYADDR))); // 10.0.0.0 - 10.255.255.255 public static final String PRIVATE_CLASS_A_PREFIX = "10."; @@ -96,18 +88,10 @@ public class SshdSocketAddress extends SocketAddress { public static final String IPV6_LONG_LOCALHOST = "0:0:0:0:0:0:0:1"; public static final String IPV6_SHORT_LOCALHOST = "::1"; - public static final NavigableSet<String> WELL_KNOWN_IPV6_ADDRESSES = - Collections.unmodifiableNavigableSet( - new TreeSet<String>(String.CASE_INSENSITIVE_ORDER) { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - addAll(Arrays.asList( - IPV6_LONG_LOCALHOST, IPV6_SHORT_LOCALHOST, - IPV6_LONG_ANY_ADDRESS, IPV6_SHORT_ANY_ADDRESS)); - } - }); + public static final Set<String> WELL_KNOWN_IPV6_ADDRESSES = + Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList( + IPV6_LONG_LOCALHOST, IPV6_SHORT_LOCALHOST, + IPV6_LONG_ANY_ADDRESS, IPV6_SHORT_ANY_ADDRESS))); /** * A dummy placeholder that can be used instead of {@code null}s http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/test/java/org/apache/sshd/common/channel/WindowInitTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/channel/WindowInitTest.java b/sshd-core/src/test/java/org/apache/sshd/common/channel/WindowInitTest.java index 2a8ccd6..90e9811 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/channel/WindowInitTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/channel/WindowInitTest.java @@ -20,7 +20,6 @@ package org.apache.sshd.common.channel; import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.apache.sshd.client.future.OpenFuture; @@ -85,30 +84,21 @@ public class WindowInitTest extends BaseTestSupport { @Parameters(name = "initial-size={0}, packet-size={1}") public static List<Object[]> parameters() { - return Collections.unmodifiableList(new ArrayList<Object[]>() { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - addTestCase(Byte.MIN_VALUE, FactoryManager.DEFAULT_MAX_PACKET_SIZE); - addTestCase(BufferUtils.MAX_UINT32_VALUE + 1L, FactoryManager.DEFAULT_MAX_PACKET_SIZE); - addTestCase(FactoryManager.DEFAULT_WINDOW_SIZE, 0L); - addTestCase(FactoryManager.DEFAULT_WINDOW_SIZE, Byte.MIN_VALUE); - addTestCase(FactoryManager.DEFAULT_WINDOW_SIZE, BufferUtils.MAX_UINT32_VALUE + 1L); - addTestCase(FactoryManager.DEFAULT_WINDOW_SIZE, FactoryManager.DEFAULT_LIMIT_PACKET_SIZE + 1L); - } - - private void addTestCase(long initialSize, long packetSize) { - add(new Object[]{initialSize, packetSize}); - } - }); + List<Object[]> params = new ArrayList<>(); + params.add(new Object[] {Byte.MIN_VALUE, FactoryManager.DEFAULT_MAX_PACKET_SIZE }); + params.add(new Object[] {BufferUtils.MAX_UINT32_VALUE + 1L, FactoryManager.DEFAULT_MAX_PACKET_SIZE }); + params.add(new Object[] {FactoryManager.DEFAULT_WINDOW_SIZE, 0L }); + params.add(new Object[] {FactoryManager.DEFAULT_WINDOW_SIZE, Byte.MIN_VALUE }); + params.add(new Object[] {FactoryManager.DEFAULT_WINDOW_SIZE, BufferUtils.MAX_UINT32_VALUE + 1L }); + params.add(new Object[] {FactoryManager.DEFAULT_WINDOW_SIZE, FactoryManager.DEFAULT_LIMIT_PACKET_SIZE + 1L }); + return params; } @Test(expected = IllegalArgumentException.class) public void testInitializationFailure() throws IOException { try (Window w = new Window(MOCK_CHANNEL, null, true, true)) { w.init(initialSize, packetSize, PropertyResolver.EMPTY); - fail("Unexpected success for initialiSize=" + initialSize + ", packetSize=" + packetSize); + fail("Unexpected success for initialSize=" + initialSize + ", packetSize=" + packetSize); } } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryLoginOptionsParseTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryLoginOptionsParseTest.java b/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryLoginOptionsParseTest.java index 7f3be56..5588622 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryLoginOptionsParseTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntryLoginOptionsParseTest.java @@ -19,7 +19,6 @@ package org.apache.sshd.common.config.keys; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -56,55 +55,48 @@ public class AuthorizedKeyEntryLoginOptionsParseTest extends BaseTestSupport { @Parameters(name = "{0}") public static List<Object[]> parameters() { - return Collections.unmodifiableList(new ArrayList<Object[]>() { - // not serializing it - private static final long serialVersionUID = 1L; + List<Object[]> params = new ArrayList<>(); + addData(params, "ssh-rsa AAAAB2...19Q==", "j...@example.net", "from=\"*.sales.example.net,!pc.sales.example.net\""); + addData(params, "ssh-dss AAAAC3...51R==", "example.net", "command=\"dump /home\"", "no-pty", "no-port-forwarding"); + addData(params, "ssh-dss AAAAB5...21S==", "", "permitopen=\"192.0.2.1:80\"", "permitopen=\"192.0.2.2:25\""); + addData(params, "ssh-rsa AAAA...==", "j...@example.net", "tunnel=\"0\"", "command=\"sh /etc/netstart tun0\""); + addData(params, "ssh-rsa AAAA1C8...32Tv==", "u...@example.net", "!restrict", "command=\"uptime\""); + addData(params, "ssh-rsa AAAA1f8...IrrC5==", "u...@example.net", "restrict", "!pty", "command=\"nethack\""); + return params; + } - private final StringBuilder sb = new StringBuilder(Byte.MAX_VALUE); + private static void addData(List<Object[]> params, String keyData, String comment, String... comps) { + StringBuilder sb = new StringBuilder(); - { - addData("ssh-rsa AAAAB2...19Q==", "j...@example.net", "from=\"*.sales.example.net,!pc.sales.example.net\""); - addData("ssh-dss AAAAC3...51R==", "example.net", "command=\"dump /home\"", "no-pty", "no-port-forwarding"); - addData("ssh-dss AAAAB5...21S==", "", "permitopen=\"192.0.2.1:80\"", "permitopen=\"192.0.2.2:25\""); - addData("ssh-rsa AAAA...==", "j...@example.net", "tunnel=\"0\"", "command=\"sh /etc/netstart tun0\""); - addData("ssh-rsa AAAA1C8...32Tv==", "u...@example.net", "!restrict", "command=\"uptime\""); - addData("ssh-rsa AAAA1f8...IrrC5==", "u...@example.net", "restrict", "!pty", "command=\"nethack\""); + Map<String, String> optionsMap = new HashMap<>(); + for (String c : comps) { + if (sb.length() > 0) { + sb.append(','); } - - private void addData(String keyData, String comment, String... comps) { - sb.setLength(0); - - Map<String, String> optionsMap = new HashMap<>(); - for (String c : comps) { - if (sb.length() > 0) { - sb.append(','); - } - sb.append(c); - - int pos = c.indexOf('='); - if (pos > 0) { - String name = c.substring(0, pos); - String value = GenericUtils.stripQuotes(c.substring(pos + 1)).toString(); - String prev = optionsMap.put(name, value); - if (prev != null) { - optionsMap.put(name, prev + "," + value); - } - } else { - optionsMap.put(c, Boolean.toString(c.charAt(0) != AuthorizedKeyEntry.BOOLEAN_OPTION_NEGATION_INDICATOR)); - } + sb.append(c); + + int pos = c.indexOf('='); + if (pos > 0) { + String name = c.substring(0, pos); + String value = GenericUtils.stripQuotes(c.substring(pos + 1)).toString(); + String prev = optionsMap.put(name, value); + if (prev != null) { + optionsMap.put(name, prev + "," + value); } + } else { + optionsMap.put(c, Boolean.toString(c.charAt(0) != AuthorizedKeyEntry.BOOLEAN_OPTION_NEGATION_INDICATOR)); + } + } - int pos = sb.length(); + int pos = sb.length(); - sb.append(' ').append(keyData); - if (GenericUtils.isNotEmpty(comment)) { - sb.append(' ').append(comment); - } + sb.append(' ').append(keyData); + if (GenericUtils.isNotEmpty(comment)) { + sb.append(' ').append(comment); + } - String value = sb.toString(); - add(new Object[] {value, value.substring(0, pos), value.substring(pos + 1), optionsMap}); - } - }); + String value = sb.toString(); + params.add(new Object[] {value, value.substring(0, pos), value.substring(pos + 1), optionsMap}); } @Test http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/test/java/org/apache/sshd/common/config/keys/loader/pem/PKCS8PEMResourceKeyPairParserTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/config/keys/loader/pem/PKCS8PEMResourceKeyPairParserTest.java b/sshd-core/src/test/java/org/apache/sshd/common/config/keys/loader/pem/PKCS8PEMResourceKeyPairParserTest.java index 7e1aba7..69e6b66 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/config/keys/loader/pem/PKCS8PEMResourceKeyPairParserTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/config/keys/loader/pem/PKCS8PEMResourceKeyPairParserTest.java @@ -27,7 +27,6 @@ import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import org.apache.commons.ssl.PEMItem; @@ -66,22 +65,14 @@ public class PKCS8PEMResourceKeyPairParserTest extends BaseTestSupport { @Parameters(name = "{0} / {1}") public static List<Object[]> parameters() { - return Collections.unmodifiableList(new ArrayList<Object[]>() { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - addTestCases(KeyUtils.RSA_ALGORITHM, RSA_SIZES); - addTestCases(KeyUtils.DSS_ALGORITHM, DSS_SIZES); - // TODO add test cases for ECDSA - } - - private void addTestCases(String algorithm, Collection<Integer> keySizes) { - for (Integer ks : keySizes) { - add(new Object[]{algorithm, ks}); - } - } - }); + List<Object[]> params = new ArrayList<>(); + for (Integer ks : RSA_SIZES) { + params.add(new Object[]{KeyUtils.RSA_ALGORITHM, ks}); + } + for (Integer ks : DSS_SIZES) { + params.add(new Object[]{KeyUtils.DSS_ALGORITHM, ks}); + } + return params; } @Test // see SSHD-760 http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/test/java/org/apache/sshd/common/io/nio2/Nio2ServiceTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/io/nio2/Nio2ServiceTest.java b/sshd-core/src/test/java/org/apache/sshd/common/io/nio2/Nio2ServiceTest.java index a2a6436..0ab8ff4 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/io/nio2/Nio2ServiceTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/io/nio2/Nio2ServiceTest.java @@ -25,7 +25,6 @@ import java.net.SocketOption; import java.nio.channels.AsynchronousSocketChannel; import java.util.AbstractMap.SimpleImmutableEntry; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -57,20 +56,13 @@ public class Nio2ServiceTest extends BaseTestSupport { @Test // see SSHD-554, SSHD-722 public void testSetSocketOptions() throws Exception { try (SshServer sshd = setupTestServer()) { - Map<String, Object> expectedOptions = - Collections.unmodifiableMap(new LinkedHashMap<String, Object>() { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - put(FactoryManager.SOCKET_KEEPALIVE, true); - put(FactoryManager.SOCKET_LINGER, 5); - put(FactoryManager.SOCKET_RCVBUF, 1024); - put(FactoryManager.SOCKET_REUSEADDR, true); - put(FactoryManager.SOCKET_SNDBUF, 1024); - put(FactoryManager.TCP_NODELAY, true); - } - }); + Map<String, Object> expectedOptions = new LinkedHashMap<String, Object>(); + expectedOptions.put(FactoryManager.SOCKET_KEEPALIVE, true); + expectedOptions.put(FactoryManager.SOCKET_LINGER, 5); + expectedOptions.put(FactoryManager.SOCKET_RCVBUF, 1024); + expectedOptions.put(FactoryManager.SOCKET_REUSEADDR, true); + expectedOptions.put(FactoryManager.SOCKET_SNDBUF, 1024); + expectedOptions.put(FactoryManager.TCP_NODELAY, true); for (Map.Entry<String, ?> oe : expectedOptions.entrySet()) { PropertyResolverUtils.updateProperty(sshd, oe.getKey(), oe.getValue()); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/test/java/org/apache/sshd/common/util/net/SshdSocketIpv6AddressTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/util/net/SshdSocketIpv6AddressTest.java b/sshd-core/src/test/java/org/apache/sshd/common/util/net/SshdSocketIpv6AddressTest.java index bab005f..cc69df5 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/util/net/SshdSocketIpv6AddressTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/util/net/SshdSocketIpv6AddressTest.java @@ -18,10 +18,11 @@ */ package org.apache.sshd.common.util.net; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.sshd.util.test.BaseTestSupport; import org.apache.sshd.util.test.JUnit4ClassRunnerWithParametersFactory; @@ -66,20 +67,10 @@ public class SshdSocketIpv6AddressTest extends BaseTestSupport { @Parameters(name = "{0}") public static List<Object[]> parameters() { - return new ArrayList<Object[]>() { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - for (String address : SshdSocketAddress.WELL_KNOWN_IPV6_ADDRESSES) { - add(new Object[] {address, Boolean.TRUE}); - } - - for (String address : VALID_ADDRESSES) { - add(new Object[] {address, Boolean.TRUE}); - } - } - }; + return Stream + .concat(SshdSocketAddress.WELL_KNOWN_IPV6_ADDRESSES.stream(), VALID_ADDRESSES.stream()) + .map(address -> new Object[] {address, Boolean.TRUE}) + .collect(Collectors.toList()); } @Test http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/test/java/org/apache/sshd/common/util/security/SecurityProviderRegistrarCipherNameTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/util/security/SecurityProviderRegistrarCipherNameTest.java b/sshd-core/src/test/java/org/apache/sshd/common/util/security/SecurityProviderRegistrarCipherNameTest.java index db50770..c0c89eb 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/util/security/SecurityProviderRegistrarCipherNameTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/util/security/SecurityProviderRegistrarCipherNameTest.java @@ -19,7 +19,6 @@ package org.apache.sshd.common.util.security; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import javax.crypto.Cipher; @@ -54,23 +53,17 @@ public class SecurityProviderRegistrarCipherNameTest extends BaseTestSupport { @Parameters(name = "{0}") public static List<Object[]> parameters() { - return Collections.unmodifiableList( - new ArrayList<Object[]>(BuiltinCiphers.VALUES.size()) { - // Not serializing it - private static final long serialVersionUID = 1L; + List<Object[]> params = new ArrayList<>(); + for (CipherInformation cipherInfo : BuiltinCiphers.VALUES) { + String algorithm = cipherInfo.getAlgorithm(); + String xform = cipherInfo.getTransformation(); + if (!xform.startsWith(algorithm)) { + continue; + } - { - for (CipherInformation cipherInfo : BuiltinCiphers.VALUES) { - String algorithm = cipherInfo.getAlgorithm(); - String xform = cipherInfo.getTransformation(); - if (!xform.startsWith(algorithm)) { - continue; - } - - add(new Object[]{cipherInfo}); - } - } - }); + params.add(new Object[]{cipherInfo}); + } + return params; } @Test http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-core/src/test/java/org/apache/sshd/common/util/security/eddsa/Ed25519VectorsTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/util/security/eddsa/Ed25519VectorsTest.java b/sshd-core/src/test/java/org/apache/sshd/common/util/security/eddsa/Ed25519VectorsTest.java index 8354c21..00a64b9 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/util/security/eddsa/Ed25519VectorsTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/util/security/eddsa/Ed25519VectorsTest.java @@ -24,6 +24,7 @@ import java.security.GeneralSecurityException; import java.security.PrivateKey; import java.security.PublicKey; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import net.i2p.crypto.eddsa.EdDSAPrivateKey; @@ -76,12 +77,8 @@ public class Ed25519VectorsTest extends BaseTestSupport { @Parameters(name = "{0}") @SuppressWarnings("checkstyle:anoninnerlength") public static List<Object[]> parameters() { - return new ArrayList<Object[]>() { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - add(new Object[]{ + return new ArrayList<>(Arrays.asList( + new Object[]{ "TEST1 - empty message", "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60", "d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a", @@ -90,8 +87,8 @@ public class Ed25519VectorsTest extends BaseTestSupport { + "84877f1eb8e5d974d873e06522490155" + "5fb8821590a33bacc61e39701cf9b46b" + "d25bf5f0595bbe24655141438e7a100b" - }); - add(new Object[]{ + }, + new Object[]{ "TEST2 - one byte", "4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb", "3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c", @@ -100,8 +97,8 @@ public class Ed25519VectorsTest extends BaseTestSupport { + "a2b27b5416503f8fb3762223ebdb69da" + "085ac1e43e15996e458f3613d0f11d8c" + "387b2eaeb4302aeeb00d291612bb0c00" - }); - add(new Object[]{ + }, + new Object[]{ "TEST3 - 2 bytes", "c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7", "fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025", @@ -110,8 +107,8 @@ public class Ed25519VectorsTest extends BaseTestSupport { + "0ce548a284743a445e3680d7db5ac3ac" + "18ff9b538d16f290ae67f760984dc659" + "4a7c15e9716ed28dc027beceea1ec40a" - }); - add(new Object[]{ + }, + new Object[]{ "TEST1024 - large message", "f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5", "278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e", @@ -183,9 +180,7 @@ public class Ed25519VectorsTest extends BaseTestSupport { + "87df5e4843b2cbdb67cbf6e460fec350" + "aa5371b1508f9f4528ecea23c436d94b" + "5e8fcd4f681e30a6ac00a9704a188a03" - }); - } - }; + })); } @BeforeClass http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6bfab4/sshd-sftp/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpHelper.java ---------------------------------------------------------------------- diff --git a/sshd-sftp/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpHelper.java b/sshd-sftp/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpHelper.java index 90cdfad..d0d87e7 100644 --- a/sshd-sftp/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpHelper.java +++ b/sshd-sftp/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpHelper.java @@ -80,46 +80,44 @@ public final class SftpHelper { */ public static final boolean DEFAULT_APPEND_END_OF_LIST_INDICATOR = true; - public static final NavigableMap<Integer, String> DEFAULT_SUBSTATUS_MESSAGE = - Collections.unmodifiableNavigableMap(new TreeMap<Integer, String>(Comparator.naturalOrder()) { - // Not serializing it - private static final long serialVersionUID = 1L; - - { - put(SftpConstants.SSH_FX_OK, "Success"); - put(SftpConstants.SSH_FX_EOF, "End of file"); - put(SftpConstants.SSH_FX_NO_SUCH_FILE, "No such file or directory"); - put(SftpConstants.SSH_FX_PERMISSION_DENIED, "Permission denied"); - put(SftpConstants.SSH_FX_FAILURE, "General failure"); - put(SftpConstants.SSH_FX_BAD_MESSAGE, "Bad message data"); - put(SftpConstants.SSH_FX_NO_CONNECTION, "No connection to server"); - put(SftpConstants.SSH_FX_CONNECTION_LOST, "Connection lost"); - put(SftpConstants.SSH_FX_OP_UNSUPPORTED, "Unsupported operation requested"); - put(SftpConstants.SSH_FX_INVALID_HANDLE, "Invalid handle value"); - put(SftpConstants.SSH_FX_NO_SUCH_PATH, "No such path"); - put(SftpConstants.SSH_FX_FILE_ALREADY_EXISTS, "File/Directory already exists"); - put(SftpConstants.SSH_FX_WRITE_PROTECT, "File/Directory is write-protected"); - put(SftpConstants.SSH_FX_NO_MEDIA, "No such meadia"); - put(SftpConstants.SSH_FX_NO_SPACE_ON_FILESYSTEM, "No space left on device"); - put(SftpConstants.SSH_FX_QUOTA_EXCEEDED, "Quota exceeded"); - put(SftpConstants.SSH_FX_UNKNOWN_PRINCIPAL, "Unknown user/group"); - put(SftpConstants.SSH_FX_LOCK_CONFLICT, "Lock conflict"); - put(SftpConstants.SSH_FX_DIR_NOT_EMPTY, "Directory not empty"); - put(SftpConstants.SSH_FX_NOT_A_DIRECTORY, "Accessed location is not a directory"); - put(SftpConstants.SSH_FX_INVALID_FILENAME, "Invalid filename"); - put(SftpConstants.SSH_FX_LINK_LOOP, "Link loop"); - put(SftpConstants.SSH_FX_CANNOT_DELETE, "Cannot remove"); - put(SftpConstants.SSH_FX_INVALID_PARAMETER, "Invalid parameter"); - put(SftpConstants.SSH_FX_FILE_IS_A_DIRECTORY, "Accessed location is a directory"); - put(SftpConstants.SSH_FX_BYTE_RANGE_LOCK_CONFLICT, "Range lock conflict"); - put(SftpConstants.SSH_FX_BYTE_RANGE_LOCK_REFUSED, "Range lock refused"); - put(SftpConstants.SSH_FX_DELETE_PENDING, "Delete pending"); - put(SftpConstants.SSH_FX_FILE_CORRUPT, "Corrupted file/directory"); - put(SftpConstants.SSH_FX_OWNER_INVALID, "Invalid file/directory owner"); - put(SftpConstants.SSH_FX_GROUP_INVALID, "Invalid file/directory group"); - put(SftpConstants.SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK, "No matching byte range lock"); - } - }); + public static final Map<Integer, String> DEFAULT_SUBSTATUS_MESSAGE; + + static { + Map<Integer, String> map = new TreeMap<>(Comparator.naturalOrder()); + map.put(SftpConstants.SSH_FX_OK, "Success"); + map.put(SftpConstants.SSH_FX_EOF, "End of file"); + map.put(SftpConstants.SSH_FX_NO_SUCH_FILE, "No such file or directory"); + map.put(SftpConstants.SSH_FX_PERMISSION_DENIED, "Permission denied"); + map.put(SftpConstants.SSH_FX_FAILURE, "General failure"); + map.put(SftpConstants.SSH_FX_BAD_MESSAGE, "Bad message data"); + map.put(SftpConstants.SSH_FX_NO_CONNECTION, "No connection to server"); + map.put(SftpConstants.SSH_FX_CONNECTION_LOST, "Connection lost"); + map.put(SftpConstants.SSH_FX_OP_UNSUPPORTED, "Unsupported operation requested"); + map.put(SftpConstants.SSH_FX_INVALID_HANDLE, "Invalid handle value"); + map.put(SftpConstants.SSH_FX_NO_SUCH_PATH, "No such path"); + map.put(SftpConstants.SSH_FX_FILE_ALREADY_EXISTS, "File/Directory already exists"); + map.put(SftpConstants.SSH_FX_WRITE_PROTECT, "File/Directory is write-protected"); + map.put(SftpConstants.SSH_FX_NO_MEDIA, "No such meadia"); + map.put(SftpConstants.SSH_FX_NO_SPACE_ON_FILESYSTEM, "No space left on device"); + map.put(SftpConstants.SSH_FX_QUOTA_EXCEEDED, "Quota exceeded"); + map.put(SftpConstants.SSH_FX_UNKNOWN_PRINCIPAL, "Unknown user/group"); + map.put(SftpConstants.SSH_FX_LOCK_CONFLICT, "Lock conflict"); + map.put(SftpConstants.SSH_FX_DIR_NOT_EMPTY, "Directory not empty"); + map.put(SftpConstants.SSH_FX_NOT_A_DIRECTORY, "Accessed location is not a directory"); + map.put(SftpConstants.SSH_FX_INVALID_FILENAME, "Invalid filename"); + map.put(SftpConstants.SSH_FX_LINK_LOOP, "Link loop"); + map.put(SftpConstants.SSH_FX_CANNOT_DELETE, "Cannot remove"); + map.put(SftpConstants.SSH_FX_INVALID_PARAMETER, "Invalid parameter"); + map.put(SftpConstants.SSH_FX_FILE_IS_A_DIRECTORY, "Accessed location is a directory"); + map.put(SftpConstants.SSH_FX_BYTE_RANGE_LOCK_CONFLICT, "Range lock conflict"); + map.put(SftpConstants.SSH_FX_BYTE_RANGE_LOCK_REFUSED, "Range lock refused"); + map.put(SftpConstants.SSH_FX_DELETE_PENDING, "Delete pending"); + map.put(SftpConstants.SSH_FX_FILE_CORRUPT, "Corrupted file/directory"); + map.put(SftpConstants.SSH_FX_OWNER_INVALID, "Invalid file/directory owner"); + map.put(SftpConstants.SSH_FX_GROUP_INVALID, "Invalid file/directory group"); + map.put(SftpConstants.SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK, "No matching byte range lock"); + DEFAULT_SUBSTATUS_MESSAGE = Collections.unmodifiableMap(map); + } private SftpHelper() { throw new UnsupportedOperationException("No instance allowed");