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 2017/06/21 19:38:42 UTC
mina-sshd git commit: [SSHD-752] HostConfigEntry can't parse tabbed
SSH config files
Repository: mina-sshd
Updated Branches:
refs/heads/master 31c8c3d31 -> 92c24d13c
[SSHD-752] HostConfigEntry can't parse tabbed SSH config files
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/92c24d13
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/92c24d13
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/92c24d13
Branch: refs/heads/master
Commit: 92c24d13cf5333118402288c33750434058556bf
Parents: 31c8c3d
Author: Goldstein Lyor <ly...@c-b4.com>
Authored: Wed Jun 21 12:46:20 2017 +0300
Committer: Lyor Goldstein <ly...@gmail.com>
Committed: Wed Jun 21 22:38:05 2017 +0300
----------------------------------------------------------------------
.../client/config/hosts/HostConfigEntry.java | 4 ++--
.../client/config/hosts/HostPatternsHolder.java | 12 ++++++----
.../client/config/hosts/KnownHostEntry.java | 2 +-
.../client/config/hosts/KnownHostHashValue.java | 6 +++--
.../common/config/keys/AuthorizedKeyEntry.java | 24 ++++++++++----------
.../sshd/common/config/keys/PublicKeyEntry.java | 8 ++++---
.../apache/sshd/common/util/GenericUtils.java | 8 +++++++
7 files changed, 39 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/92c24d13/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
index c17c6ce..3711e45 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostConfigEntry.java
@@ -828,7 +828,7 @@ public class HostConfigEntry extends HostPatternsHolder implements MutableUserHo
int lineNumber = 1;
for (String line = rdr.readLine(); line != null; line = rdr.readLine(), lineNumber++) {
- line = GenericUtils.trimToEmpty(line);
+ line = GenericUtils.replaceWhitespaceAndTrim(line);
if (GenericUtils.isEmpty(line)) {
continue;
}
@@ -1046,7 +1046,7 @@ public class HostConfigEntry extends HostPatternsHolder implements MutableUserHo
* @return A {@link List} of the encountered values
*/
public static List<String> parseConfigValue(String value) {
- String s = GenericUtils.trimToEmpty(value);
+ String s = GenericUtils.replaceWhitespaceAndTrim(value);
if (GenericUtils.isEmpty(s)) {
return Collections.emptyList();
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/92c24d13/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java
index fdef86e..9d90dac 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java
@@ -25,6 +25,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
+import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -242,7 +243,7 @@ public abstract class HostPatternsHolder {
* Converts a host pattern string to a regular expression matcher.
* <B>Note:</B> pattern matching is <U>case insensitive</U>
*
- * @param pattern The original pattern string - ignored if {@code null}/empty
+ * @param patternString The original pattern string - ignored if {@code null}/empty
* @return The regular expression matcher {@link Pattern} and the indication
* whether it is a negating pattern or not - {@code null} if no original string
* @see #NON_STANDARD_PORT_PATTERN_ENCLOSURE_START_DELIM
@@ -251,7 +252,8 @@ public abstract class HostPatternsHolder {
* @see #SINGLE_CHAR_PATTERN
* @see #NEGATION_CHAR_PATTERN
*/
- public static HostPatternValue toPattern(CharSequence pattern) {
+ public static HostPatternValue toPattern(CharSequence patternString) {
+ String pattern = GenericUtils.replaceWhitespaceAndTrim(Objects.toString(patternString, null));
if (GenericUtils.isEmpty(pattern)) {
return null;
}
@@ -267,11 +269,11 @@ public abstract class HostPatternsHolder {
ValidateUtils.checkTrue(pattern.charAt(pos - 1) == HostPatternsHolder.NON_STANDARD_PORT_PATTERN_ENCLOSURE_END_DELIM,
"Invalid non-standard port value host pattern enclosure delimiters in %s", pattern);
- CharSequence csPort = pattern.subSequence(pos + 1, patternLen);
- port = Integer.parseInt(csPort.toString());
+ String csPort = pattern.substring(pos + 1, patternLen);
+ port = Integer.parseInt(csPort);
ValidateUtils.checkTrue((port > 0) && (port <= 0xFFFF), "Invalid non-start port value (%d) in %s", port, pattern);
- pattern = pattern.subSequence(1, pos - 1);
+ pattern = pattern.substring(1, pos - 1);
patternLen = pattern.length();
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/92c24d13/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostEntry.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostEntry.java b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostEntry.java
index bf56ddf..544a5ce 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostEntry.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostEntry.java
@@ -229,7 +229,7 @@ public class KnownHostEntry extends HostPatternsHolder {
}
public static <E extends KnownHostEntry> E parseKnownHostEntry(E entry, String data) {
- String line = data;
+ String line = GenericUtils.replaceWhitespaceAndTrim(data);
if (GenericUtils.isEmpty(line) || (line.charAt(0) == PublicKeyEntry.COMMENT_CHAR)) {
return entry;
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/92c24d13/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostHashValue.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostHashValue.java b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostHashValue.java
index 68ab000..28a3d1f 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostHashValue.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/KnownHostHashValue.java
@@ -143,11 +143,13 @@ public class KnownHostHashValue {
return sb;
}
- public static KnownHostHashValue parse(String pattern) {
+ public static KnownHostHashValue parse(String patternString) {
+ String pattern = GenericUtils.replaceWhitespaceAndTrim(patternString);
return parse(pattern, GenericUtils.isEmpty(pattern) ? null : new KnownHostHashValue());
}
- public static <V extends KnownHostHashValue> V parse(String pattern, V value) {
+ public static <V extends KnownHostHashValue> V parse(String patternString, V value) {
+ String pattern = GenericUtils.replaceWhitespaceAndTrim(patternString);
if (GenericUtils.isEmpty(pattern)) {
return value;
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/92c24d13/sshd-core/src/main/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntry.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntry.java b/sshd-core/src/main/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntry.java
index 9df2872..ac4ddde 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntry.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/config/keys/AuthorizedKeyEntry.java
@@ -39,9 +39,11 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.NavigableMap;
import java.util.TreeMap;
import org.apache.sshd.common.util.GenericUtils;
+import org.apache.sshd.common.util.ValidateUtils;
import org.apache.sshd.common.util.io.NoCloseInputStream;
import org.apache.sshd.common.util.io.NoCloseReader;
import org.apache.sshd.server.auth.pubkey.KeySetPublickeyAuthenticator;
@@ -264,7 +266,7 @@ public class AuthorizedKeyEntry extends PublicKeyEntry {
for (String line = rdr.readLine(); line != null; line = rdr.readLine()) {
AuthorizedKeyEntry entry;
try {
- entry = parseAuthorizedKeyEntry(line.trim());
+ entry = parseAuthorizedKeyEntry(line);
if (entry == null) { // null, empty or comment line
continue;
}
@@ -288,13 +290,14 @@ public class AuthorizedKeyEntry extends PublicKeyEntry {
}
/**
- * @param line Original line from an <code>authorized_keys</code> file
+ * @param value Original line from an <code>authorized_keys</code> file
* @return {@link AuthorizedKeyEntry} or {@code null} if the line is
* {@code null}/empty or a comment line
* @throws IllegalArgumentException If failed to parse/decode the line
* @see #COMMENT_CHAR
*/
- public static AuthorizedKeyEntry parseAuthorizedKeyEntry(String line) throws IllegalArgumentException {
+ public static AuthorizedKeyEntry parseAuthorizedKeyEntry(String value) throws IllegalArgumentException {
+ String line = GenericUtils.replaceWhitespaceAndTrim(value);
if (GenericUtils.isEmpty(line) || (line.charAt(0) == COMMENT_CHAR) /* comment ? */) {
return null;
}
@@ -311,13 +314,10 @@ public class AuthorizedKeyEntry extends PublicKeyEntry {
String keyType = line.substring(0, startPos);
PublicKeyEntryDecoder<?, ?> decoder = KeyUtils.getPublicKeyEntryDecoder(keyType);
- final AuthorizedKeyEntry entry;
+ AuthorizedKeyEntry entry;
if (decoder == null) { // assume this is due to the fact that it starts with login options
entry = parseAuthorizedKeyEntry(line.substring(startPos + 1).trim());
- if (entry == null) {
- throw new IllegalArgumentException("Bad format (no key data after login options): " + line);
- }
-
+ ValidateUtils.checkTrue(entry != null, "Bad format (no key data after login options): %s", line);
entry.setLoginOptions(parseLoginOptions(keyType));
} else {
String encData = (endPos < (line.length() - 1)) ? line.substring(0, endPos).trim() : line;
@@ -329,14 +329,14 @@ public class AuthorizedKeyEntry extends PublicKeyEntry {
return entry;
}
- public static Map<String, String> parseLoginOptions(String options) {
+ public static NavigableMap<String, String> parseLoginOptions(String options) {
// TODO add support if quoted values contain ','
- String[] pairs = GenericUtils.split(options, ',');
+ String[] pairs = GenericUtils.split(GenericUtils.replaceWhitespaceAndTrim(options), ',');
if (GenericUtils.isEmpty(pairs)) {
- return Collections.emptyMap();
+ return Collections.emptyNavigableMap();
}
- Map<String, String> optsMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ NavigableMap<String, String> optsMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
for (String p : pairs) {
p = GenericUtils.trimToEmpty(p);
if (GenericUtils.isEmpty(p)) {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/92c24d13/sshd-core/src/main/java/org/apache/sshd/common/config/keys/PublicKeyEntry.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/config/keys/PublicKeyEntry.java b/sshd-core/src/main/java/org/apache/sshd/common/config/keys/PublicKeyEntry.java
index 95720b4..41e7b42 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/config/keys/PublicKeyEntry.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/config/keys/PublicKeyEntry.java
@@ -173,7 +173,8 @@ public class PublicKeyEntry implements Serializable {
* @throws IllegalArgumentException if bad format found
* @see #parsePublicKeyEntry(PublicKeyEntry, String)
*/
- public static PublicKeyEntry parsePublicKeyEntry(String data) throws IllegalArgumentException {
+ public static PublicKeyEntry parsePublicKeyEntry(String encData) throws IllegalArgumentException {
+ String data = GenericUtils.replaceWhitespaceAndTrim(encData);
if (GenericUtils.isEmpty(data)) {
return null;
} else {
@@ -185,12 +186,13 @@ public class PublicKeyEntry implements Serializable {
* @param <E> The generic entry type
* @param entry The {@link PublicKeyEntry} whose contents are to be
* updated - ignored if {@code null}
- * @param data Assumed to contain at least {@code key-type base64-data} (anything
+ * @param encData Assumed to contain at least {@code key-type base64-data} (anything
* beyond the BASE64 data is ignored) - ignored if {@code null}/empty
* @return The updated entry instance
* @throws IllegalArgumentException if bad format found
*/
- public static <E extends PublicKeyEntry> E parsePublicKeyEntry(E entry, String data) throws IllegalArgumentException {
+ public static <E extends PublicKeyEntry> E parsePublicKeyEntry(E entry, String encData) throws IllegalArgumentException {
+ String data = GenericUtils.replaceWhitespaceAndTrim(encData);
if (GenericUtils.isEmpty(data) || (entry == null)) {
return entry;
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/92c24d13/sshd-core/src/main/java/org/apache/sshd/common/util/GenericUtils.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/GenericUtils.java b/sshd-core/src/main/java/org/apache/sshd/common/util/GenericUtils.java
index bd8a7a3..28456f9 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/util/GenericUtils.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/util/GenericUtils.java
@@ -97,6 +97,14 @@ public final class GenericUtils {
}
}
+ public static String replaceWhitespaceAndTrim(String s) {
+ if (s != null) {
+ s = s.replace('\t', ' ');
+ }
+
+ return trimToEmpty(s);
+ }
+
/**
* @param s The {@link String} value to calculate the hash code on - may
* be <code>null</code>/empty in which case a value of zero is returned