[syslog-ng] [PATCH (3.4)] cfg_lexer: Drop quotes when expanding a backtick, and already quoted

Gergely Nagy algernon at balabit.hu
Tue Apr 9 13:15:35 CEST 2013


In case we're expanding a backtick while we're already in a quoted
string, and the backtick starts with a '"', drop the extra quotes.

This allows blocks like:

  block source s_logfile (filename("messages")) {
    file("/var/log/`filename`");
  };

  source s_example {
    s_logfile(filename("logfile.log"));
  };

To work properly, and result in file("/var/log/logfile.log");

Reported-by: Eric Berggren <eric_berggren at apple.com>
Signed-off-by: Gergely Nagy <algernon at balabit.hu>
---
 lib/cfg-lexer.c |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/lib/cfg-lexer.c b/lib/cfg-lexer.c
index fbce432..b1c7c93 100644
--- a/lib/cfg-lexer.c
+++ b/lib/cfg-lexer.c
@@ -156,12 +156,18 @@ gchar *
 cfg_lexer_subst_args(CfgArgs *globals, CfgArgs *defs, CfgArgs *args, gchar *cptr, gsize *length)
 {
   gboolean backtick = FALSE;
+  gboolean in_string = FALSE;
   gchar *p, *ref_start = cptr;
   GString *result = g_string_sized_new(32);
 
   p = cptr;
   while (*p)
     {
+      if (!backtick && (*p) == '"')
+        {
+          in_string = !in_string;
+        }
+
       if (!backtick && (*p) == '`')
         {
           /* start of reference */
@@ -195,7 +201,12 @@ cfg_lexer_subst_args(CfgArgs *globals, CfgArgs *defs, CfgArgs *args, gchar *cptr
                 arg = NULL;
 
               *p = '`';
-              g_string_append(result, arg ? arg : "");
+              if (in_string && arg && arg[0] == '"')
+                {
+                  g_string_append_len(result, &arg[1], strlen(arg) - 2);
+                }
+              else
+                g_string_append(result, arg ? arg : "");
             }
         }
       else if (!backtick)
-- 
1.7.10.4




More information about the syslog-ng mailing list