2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-08-22 01:49:35 +00:00

[master] Handle long commands in execute better

Use token_print_indent_concat() to write the comamnd in an
    execute statement to the lease file.  This keeps the quotes
    with the command.  When using token_print_indent() and passing
    the quotes as a prefix and suffix they could be discarded
    if the command was overly long.
This commit is contained in:
Shawn Routhier 2016-02-02 10:13:11 -08:00
parent 1bfdeaaee9
commit 1d3fc4d0d8
2 changed files with 19 additions and 8 deletions

View File

@ -195,6 +195,10 @@ by Eric Young (eay@cryptsoft.com).
- Add more option definitions.
[ISC-Bugs #40562]
- Correct outputting of long lines in the lease file when writing
a lease that includes long strings in an execute statement.
[ISC-Bugs #40994]
Changes since 4.3.3b1
- None

View File

@ -3,7 +3,7 @@
Support for executable statements. */
/*
* Copyright (c) 2009,2013-2015 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2009,2013-2016 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2004-2007 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1998-2003 by Internet Software Consortium
*
@ -990,18 +990,25 @@ void write_statements (file, statements, indent)
break;
case execute_statement:
#ifdef ENABLE_EXECUTE
indent_spaces (file, indent);
indent_spaces(file, indent);
col = token_print_indent(file, indent + 4, indent + 4,
"", "", "execute");
col = token_print_indent(file, col, indent + 4, " ", "",
"(");
col = token_print_indent(file, col, indent + 4, "\"", "\"", r->data.execute.command);
for (expr = r->data.execute.arglist; expr; expr = expr->data.arg.next) {
col = token_print_indent(file, col, indent + 4, "", " ", ",");
col = write_expression (file, expr->data.arg.val, col, indent + 4, 0);
}
(void) token_print_indent(file, col, indent + 4, "", "", ");");
col = token_print_indent_concat(file, col, indent + 4,
"", "", "\"",
r->data.execute.command,
"\"", (char *)0);
for (expr = r->data.execute.arglist; expr; expr = expr->data.arg.next) {
col = token_print_indent(file, col, indent + 4,
"", " ", ",");
col = write_expression(file, expr->data.arg.val,
col, indent + 4, 0);
}
(void) token_print_indent(file, col, indent + 4,
"", "", ");");
#else /* !ENABLE_EXECUTE */
log_fatal("Impossible case at %s:%d (ENABLE_EXECUTE "
"is not defined).", MDL);