mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-31 10:31:46 +00:00
BUG/MINOR: cli: allow the backslash to be escaped on the CLI
In 1.5-dev20, commit 48bcfda
("MEDIUM: dumpstat: make the CLI parser
understand the backslash as an escape char") introduced support for
backslash on the CLI, but it strips all backslashes in all arguments
instead of only unescaping them, making it impossible to pass a
backslash in an argument.
This will allow us to use a backslash in a command over the socket, eg.
"add acl #0 ABC\\XYZ".
[wt: this should be backported to 1.7 and 1.6]
This commit is contained in:
parent
796c5b7997
commit
a1c35ab68d
@ -1249,8 +1249,8 @@ example :
|
||||
|
||||
# echo "show info;show stat;show table" | socat /var/run/haproxy stdio
|
||||
|
||||
If a command needs to use a semi-colon (eg: in a value), it must be preceeded
|
||||
by a backslash ('\').
|
||||
If a command needs to use a semi-colon or a backslash (eg: in a value), it
|
||||
must be preceeded by a backslash ('\').
|
||||
|
||||
The interactive mode displays a prompt ('>') and waits for commands to be
|
||||
entered on the line, then processes them, and displays the prompt again to wait
|
||||
|
10
src/cli.c
10
src/cli.c
@ -434,13 +434,17 @@ static int cli_parse_request(struct appctx *appctx, char *line)
|
||||
while (++arg <= MAX_STATS_ARGS)
|
||||
args[arg] = line;
|
||||
|
||||
/* remove \ */
|
||||
/* unescape '\' */
|
||||
arg = 0;
|
||||
while (*args[arg] != '\0') {
|
||||
j = 0;
|
||||
for (i=0; args[arg][i] != '\0'; i++) {
|
||||
if (args[arg][i] == '\\')
|
||||
continue;
|
||||
if (args[arg][i] == '\\') {
|
||||
if (args[arg][i+1] == '\\')
|
||||
i++;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
args[arg][j] = args[arg][i];
|
||||
j++;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user