[syslog-ng] [Bug 118] New: syslog-ng -s errors with catchall flag (1.6 to 3.1)

bugzilla at bugzilla.balabit.com bugzilla at bugzilla.balabit.com
Tue Apr 5 23:20:11 CEST 2011


https://bugzilla.balabit.com/show_bug.cgi?id=118

           Summary: syslog-ng -s errors with catchall flag (1.6 to 3.1)
           Product: syslog-ng
           Version: unspecified
          Platform: Other
        OS/Version: Solaris
            Status: NEW
          Severity: normal
          Priority: unspecified
         Component: syslog-ng
        AssignedTo: bazsi at balabit.hu
        ReportedBy: michael.mishou at csirc.irs.gov
Type of the Report: bug
   Estimated Hours: 0.0


This is a bug report that is pretty much copied from the mailing list, verified by Gergely Nagy.

I used this snapshot to find the bug:
http://git.balabit.hu/?p=bazsi/syslog-ng-3.1.git;a=snapshot;h=8bf13c304b6ab5fc1a372b49d55c78370efe14ca

But Gergely reports that the problem exists in multiple 3.x version (and also likely 2.x versions as well).

I was getting the error Unknown log statement flag; flag='catchall' when doing a 
'syslog-ng -s -f FILE' on a 2.x configuration file using version 3.1.2 of syslog-ng.

All the documentation (2.x and 3.x) refers to log path flags: catchall, fallback, final, flow-control.

But in center.c the actual strcmp functions are looking for: catch-all, fallback, final, flow_control OR flow-control

gint
log_connection_lookup_flag(const gchar *flag)
{
  if (strcmp(flag, "catch-all") == 0)
    return LC_CATCHALL;
  else if (strcmp(flag, "fallback") == 0)
    return LC_FALLBACK;
  else if (strcmp(flag, "final") == 0)
    return LC_FINAL;
  else if (strcmp(flag, "flow_control") == 0 || strcmp(flag, "flow-control") == 0)
    return LC_FLOW_CONTROL;
  msg_error("Unknown log statement flag", evt_tag_str("flag", flag), NULL);
  return 0;
}

I'm guessing it should probably be something like this instead:

gint
log_connection_lookup_flag(const gchar *flag)
{
  if (strcmp(flag, "catch-all") == 0 || strcmp(flag, "catchall") == 0)
    return LC_CATCHALL;
  else if (strcmp(flag, "fallback") == 0)
    return LC_FALLBACK;
  else if (strcmp(flag, "final") == 0)
    return LC_FINAL;
  else if (strcmp(flag, "flow_control") == 0 || strcmp(flag, "flow-control") == 0)
    return LC_FLOW_CONTROL;
  msg_error("Unknown log statement flag", evt_tag_str("flag", flag), NULL);
  return 0;
}

Gergely's notes/recommendations for fix:

It's the same in 3.2 and 3.3 too - good catch!

Whether this is a documentation or code bug, if the docs say it's
'catchall' ever since 2.0, then the code should support that too, along
with 'catch-all'.

I'd say this is a bug in both: the documentation should be updated to
say 'catch-all', which has been working in past versions, and the code
should be updated to support what the documentation has been advertising
in the past years.


-- 
Configure bugmail: https://bugzilla.balabit.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.


More information about the syslog-ng mailing list