]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
[master] Handle long commands in execute better
authorShawn Routhier <sar@isc.org>
Tue, 2 Feb 2016 18:13:11 +0000 (10:13 -0800)
committerShawn Routhier <sar@isc.org>
Tue, 2 Feb 2016 18:13:11 +0000 (10:13 -0800)
    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.

RELNOTES
common/execute.c

index 9050331d1250a0c4b7694634bd4b02c4f50caeae..66506cd0e48c4f57f3f62cc733a2d28987f8425f 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -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
index cd2ebbc196ebd953d869feb81680d6369fceff1f..da68201daeb77d402b04897117f826cbf4f022c9 100644 (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);