You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tw...@apache.org on 2021/05/29 19:23:20 UTC
[mina-sshd] branch master updated: SSHD-1164 - fixed parsing of
sshd_config "Host" lines
This is an automated email from the ASF dual-hosted git repository.
twolf pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git
The following commit(s) were added to refs/heads/master by this push:
new 267887a SSHD-1164 - fixed parsing of sshd_config "Host" lines
267887a is described below
commit 267887a816cd66379b9079de09f41c3c6fa61fa7
Author: Alex Sherwin <al...@users.noreply.github.com>
AuthorDate: Fri May 14 22:28:36 2021 -0400
SSHD-1164 - fixed parsing of sshd_config "Host" lines
This makes it more lenient where there is > 1 space between Host line
values
---
.../sshd/client/config/hosts/HostConfigEntry.java | 2 ++
.../org/apache/sshd/common/util/GenericUtils.java | 41 ++++++++++++++++++++++
.../apache/sshd/common/util/GenericUtilsTest.java | 26 ++++++++++++++
.../hosts/testReadMultipleHostPatterns.config.txt | 2 +-
4 files changed, 70 insertions(+), 1 deletion(-)
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 60927de..ad8a604 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
@@ -898,6 +898,8 @@ public class HostConfigEntry extends HostPatternsHolder implements MutableUserHo
List<String> valsList = parseConfigValue(value);
if (HOST_CONFIG_PROP.equalsIgnoreCase(key)) {
+ // parseConfigValue may result in entries that are empty strings if > 1 space is used between values
+ valsList = GenericUtils.filterToNotBlank(valsList);
if (GenericUtils.isEmpty(valsList)) {
throw new StreamCorruptedException("Missing host pattern(s) at line " + lineNumber + ": " + line);
}
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/GenericUtils.java b/sshd-common/src/main/java/org/apache/sshd/common/util/GenericUtils.java
index 11da272..445bcbe 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/GenericUtils.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/GenericUtils.java
@@ -196,6 +196,47 @@ public final class GenericUtils {
return !isEmpty(cs);
}
+ /**
+ * <p>
+ * Checks if a CharSequence is empty (""), null or whitespace only.
+ * </p>
+ *
+ * <p>
+ * Whitespace is defined by {@link Character#isWhitespace(char)}.
+ * </p>
+ *
+ * <pre>
+ * GenericUtils.isBlank(null) = true
+ * GenericUtils.isBlank("") = true
+ * GenericUtils.isBlank(" ") = true
+ * GenericUtils.isBlank("bob") = false
+ * GenericUtils.isBlank(" bob ") = false
+ * </pre>
+ *
+ * @param cs the CharSequence to check, may be null
+ * @return {@code true} if the CharSequence is null, empty or whitespace only
+ */
+ public static boolean isBlank(final CharSequence cs) {
+ int strLen = cs != null ? cs.length() : 0;
+ if (cs == null || strLen == 0) {
+ return true;
+ }
+ for (int i = 0; i < strLen; i++) {
+ if (!Character.isWhitespace(cs.charAt(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static boolean isNotBlank(final CharSequence cs) {
+ return !isBlank(cs);
+ }
+
+ public static List<String> filterToNotBlank(final List<String> values) {
+ return values.stream().filter(GenericUtils::isNotBlank).collect(Collectors.toList());
+ }
+
public static int indexOf(CharSequence cs, char c) {
int len = length(cs);
for (int pos = 0; pos < len; pos++) {
diff --git a/sshd-common/src/test/java/org/apache/sshd/common/util/GenericUtilsTest.java b/sshd-common/src/test/java/org/apache/sshd/common/util/GenericUtilsTest.java
index ce64af1..acceb34 100644
--- a/sshd-common/src/test/java/org/apache/sshd/common/util/GenericUtilsTest.java
+++ b/sshd-common/src/test/java/org/apache/sshd/common/util/GenericUtilsTest.java
@@ -42,6 +42,32 @@ public class GenericUtilsTest extends JUnitTestSupport {
}
@Test
+ public void testIsBlank() {
+ assertTrue(GenericUtils.isBlank(null));
+ assertTrue(GenericUtils.isBlank(""));
+ assertTrue(GenericUtils.isBlank(" "));
+ assertFalse(GenericUtils.isBlank("a"));
+ assertFalse(GenericUtils.isBlank(" a "));
+ }
+
+ @Test
+ public void testFilterToNotBlank() {
+ assertEquals(Collections.emptyList(), GenericUtils.filterToNotBlank(Arrays.asList((String) null)));
+ assertEquals(Collections.emptyList(), GenericUtils.filterToNotBlank(Arrays.asList("")));
+ assertEquals(Collections.emptyList(), GenericUtils.filterToNotBlank(Arrays.asList(" ")));
+ assertEquals(Arrays.asList("a"), GenericUtils.filterToNotBlank(Arrays.asList("a")));
+ assertEquals(Arrays.asList("a", "b"), GenericUtils.filterToNotBlank(Arrays.asList("a", "b")));
+ assertEquals(Arrays.asList("a"), GenericUtils.filterToNotBlank(Arrays.asList("a", "")));
+ assertEquals(Arrays.asList("a"), GenericUtils.filterToNotBlank(Arrays.asList("a", " ")));
+ assertEquals(Arrays.asList("a"), GenericUtils.filterToNotBlank(Arrays.asList("a", " ")));
+ assertEquals(Arrays.asList("a"), GenericUtils.filterToNotBlank(Arrays.asList("a", null)));
+ assertEquals(Arrays.asList("a", "b"), GenericUtils.filterToNotBlank(Arrays.asList("a", null, "b")));
+ assertEquals(Arrays.asList("a", "b"), GenericUtils.filterToNotBlank(Arrays.asList("a", "", "b")));
+ assertEquals(Arrays.asList("a", "b"), GenericUtils.filterToNotBlank(Arrays.asList("a", " ", "b")));
+ assertEquals(Arrays.asList("a", "b"), GenericUtils.filterToNotBlank(Arrays.asList("a", " ", "b")));
+ }
+
+ @Test
public void testSplitAndJoin() {
List<String> expected = Collections.unmodifiableList(
Arrays.asList(
diff --git a/sshd-common/src/test/resources/org/apache/sshd/client/config/hosts/testReadMultipleHostPatterns.config.txt b/sshd-common/src/test/resources/org/apache/sshd/client/config/hosts/testReadMultipleHostPatterns.config.txt
index 0f5edcb..2096448 100644
--- a/sshd-common/src/test/resources/org/apache/sshd/client/config/hosts/testReadMultipleHostPatterns.config.txt
+++ b/sshd-common/src/test/resources/org/apache/sshd/client/config/hosts/testReadMultipleHostPatterns.config.txt
@@ -1,5 +1,5 @@
# Same configuration duplicated in multiple configuration entries
-Host *.github.com *.apache.org 10.*.*.*
+Host *.github.com *.apache.org 10.*.*.*
User mina-sshd
Port 443
HostName 7.3.6.5