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.
This commit is contained in:
Michal Privoznik 2012-04-03 14:59:06 +02:00
parent 782afa98e4
commit 7960ce842b
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