[libvirt] [PATCH] virsh: Clarify escape sequence

Michal Privoznik mprivozn at redhat.com
Tue Apr 3 13:10:32 UTC 2012


Currently, we put no strains on escape sequence possibly leaving users
with console that cannot be terminated. However, not all ASCII
characters can be used as escape sequence. Only those falling in
@ - _ can be; implement and document this constraint.
---
 tools/console.c |    3 ++-
 tools/virsh.c   |   13 ++++++++++++-
 tools/virsh.pod |    3 ++-
 3 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/tools/console.c b/tools/console.c
index ca226c3..0f30b95 100644
--- a/tools/console.c
+++ b/tools/console.c
@@ -34,6 +34,7 @@
 # include <errno.h>
 # include <unistd.h>
 # include <signal.h>
+# include <c-ctype.h>
 
 # include "internal.h"
 # include "console.h"
@@ -292,7 +293,7 @@ static char
 vshGetEscapeChar(const char *s)
 {
     if (*s == '^')
-        return CONTROL(s[1]);
+        return CONTROL(c_islower(s[1]) ? c_toupper(s[1]) : s[1]);
 
     return *s;
 }
diff --git a/tools/virsh.c b/tools/virsh.c
index 1ed2dda..cfdd040 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -19879,6 +19879,16 @@ vshShowVersion(vshControl *ctl ATTRIBUTE_UNUSED)
     vshPrint(ctl, "\n");
 }
 
+static bool
+vshAllowedEscapeChar(char c)
+{
+    /* Allowed escape characters:
+     * a-z A-Z @ [ \ ] ^ _
+     */
+    return ('a' <= c && c <= 'z') ||
+        ('@' <= c && c <= '_');
+}
+
 /*
  * argv[]:  virsh [options] [command]
  *
@@ -19942,7 +19952,8 @@ vshParseArgv(vshControl *ctl, int argc, char **argv)
         case 'e':
             len = strlen(optarg);
 
-            if ((len == 2 && *optarg == '^') ||
+            if ((len == 2 && *optarg == '^' &&
+                 vshAllowedEscapeChar(optarg[1])) ||
                 (len == 1 && *optarg != '^')) {
                 ctl->escapeChar = optarg;
             } else {
diff --git a/tools/virsh.pod b/tools/virsh.pod
index d4971a3..a60e667 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -95,7 +95,8 @@ Output elapsed time information for each command.
 =item B<-e>, B<--escape> I<string>
 
 Set alternative escape sequence for I<console> command. By default,
-telnet's B<^]> is used.
+telnet's B<^]> is used. Allowed characters when using hat notation are:
+alphabetic character, @, [, ], \, ^, _.
 
 =back
 
-- 
1.7.8.5




More information about the libvir-list mailing list