mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 09:55:18 +00:00
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:
parent
782afa98e4
commit
7960ce842b
@ -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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user