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 2016/07/26 17:31:38 UTC

mina-sshd git commit: [SSHD-679] Support (or ignore) IUTF8 terminal mode (42)

Repository: mina-sshd
Updated Branches:
  refs/heads/master 61feea8b3 -> 3c6b0540c


[SSHD-679] Support (or ignore) IUTF8 terminal mode (42)


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/3c6b0540
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/3c6b0540
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/3c6b0540

Branch: refs/heads/master
Commit: 3c6b0540c95872216b966d496f1551d42eb2652d
Parents: 61feea8
Author: Lyor Goldstein <ly...@gmail.com>
Authored: Tue Jul 26 20:33:02 2016 +0300
Committer: Lyor Goldstein <ly...@gmail.com>
Committed: Tue Jul 26 20:33:02 2016 +0300

----------------------------------------------------------------------
 .../org/apache/sshd/common/channel/PtyMode.java  |  6 +++++-
 .../sshd/server/channel/ChannelSession.java      | 19 ++++++++++++-------
 2 files changed, 17 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6b0540/sshd-core/src/main/java/org/apache/sshd/common/channel/PtyMode.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/PtyMode.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/PtyMode.java
index f83cf9c..cae1595 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/PtyMode.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/PtyMode.java
@@ -163,6 +163,10 @@ public enum PtyMode {
      * Ring bell on input queue full.
      */
     IMAXBEL(41),
+    /**
+     * @see <A HREF="https://tools.ietf.org/html/draft-sgtatham-secsh-iutf8-01">IUTF8 Terminal Mode in Secure Shell</A>
+     */
+    IUTF8(42),
 
     /////////////////////////////// L-flags //////////////////////////////////
 
@@ -293,7 +297,7 @@ public enum PtyMode {
                 private static final long serialVersionUID = 1L;    // we're not serializing it
 
                 {
-                    for (PtyMode c : PtyMode.values()) {
+                    for (PtyMode c : PtyMode.MODES) {
                         put(c.toInt(), c);
                     }
                 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3c6b0540/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
index 5843917..a0ede0f 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
@@ -388,23 +388,28 @@ public class ChannelSession extends AbstractServerChannel {
         Environment environment = getEnvironment();
         Map<PtyMode, Integer> ptyModes = environment.getPtyModes();
 
-        for (int i = 0; i < modes.length && (modes[i] != PtyMode.TTY_OP_END);) {
+        for (int i = 0; (i < modes.length) && (modes[i] != PtyMode.TTY_OP_END);) {
             int opcode = modes[i++] & 0x00FF;
-            PtyMode mode = PtyMode.fromInt(opcode);
             /*
-             * According to section 8 of RFC 4254:
+             * According to https://tools.ietf.org/html/rfc4254#section-8:
              *
-             *      "Opcodes 160 to 255 are not yet defined, and cause parsing to stop"
+             *      Opcodes 160 to 255 are not yet defined, and cause parsing to stop
              */
-            if (mode == null) {
-                log.warn("handlePtyReq({}) unknown pty opcode value: {}", this, opcode);
+            if ((opcode >= 160) && (opcode <= 255)) {
+                log.warn("handlePtyReq({}) unknown reserved pty opcode value: {}", this, opcode);
                 break;
             }
+
             int val = ((modes[i++] << 24) & 0xff000000)
                     | ((modes[i++] << 16) & 0x00ff0000)
                     | ((modes[i++] << 8) & 0x0000ff00)
                     | ((modes[i++]) & 0x000000ff);
-            ptyModes.put(mode, val);
+            PtyMode mode = PtyMode.fromInt(opcode);
+            if (mode == null) {
+                log.warn("handlePtyReq({}) unsupported pty opcode value: {}={}", this, opcode, val);
+            } else {
+                ptyModes.put(mode, val);
+            }
         }
 
         if (log.isDebugEnabled()) {