virsh: Clarify escape sequence

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.
(cherry picked from commit 7960ce842b)
This commit is contained in:
Michal Privoznik 2012-04-03 14:59:06 +02:00 committed by Daniel P. Berrange
parent 782afa98e4
commit b2ff41d81f
3 changed files with 16 additions and 3 deletions

View File

@ -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_toupper(s[1]));
return *s;
}

View File

@ -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 {

View File

@ -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