[syslog-ng] S_DATE apparently not working
Balazs Scheidler
bazsi at balabit.hu
Wed Jun 13 13:35:06 CEST 2007
On Wed, 2007-06-13 at 12:33 +0200, Giulio Botto wrote:
> Balazs Scheidler wrote:
> > On Thu, 2007-06-07 at 11:57 +0200, Giulio Botto wrote:
> >> Hello,
> >>
> >> I'm new to both syslog-ng and the list so I first tried the docs and archives,
> >> but couldn't find anything enlightening.
> >>
> >> We have a syslog-ng 2.0.3 running on CentOS 5 and some Cisco PIX appliances
> >> sending their logs to it.
> >>
> >> If my understanding is correct I should be receiving the sender's timestamp
> >> and should be able to log it in my log files instead of the the receiving
> >> timestamp by application of the S_DATE macro.
> >
> > If syslog-ng received an invalid timestamp or no timestamp, it generates
> > a new value for S_DATE based on the local time.
> >
> > Can you post a sample log message as received by syslog-ng? a tcpdump or
> > an strace dump with the string size set to a high value (-s 4096 for
> > instance) could be helpful.
> >
PIX uses a funny timestamp, that syslog-ng could not understand. Can you
check if this patch fixes the issue:
--- a/src/logmsg.c
+++ b/src/logmsg.c
@@ -268,6 +268,32 @@ log_msg_parse(LogMessage *self, gchar *data, gint length, guint flags, regex_t *
src += stamp_length;
left -= stamp_length;
}
+ else if (left >= 21 && src[3] == ' ' && src[6] == ' ' && src[11] == ' ' && src[14] == ':' && src[17] == ':' && src[20] == ':')
+ {
+ /* PIX timestamp, expected format: MMM DD YYYY HH:MM:SS: */
+
+ struct tm tm, *nowtm;
+
+ /* Just read the buffer data into a textual
+ datestamp. */
+
+ g_string_assign_len(&self->date, src, 21);
+ src += 21;
+ left -= 21;
+
+ /* And also make struct time timestamp for the msg */
+
+ nowtm = localtime(&now);
+ tm = *nowtm;
+ strptime(self->date.str, "%b %e %Y %H:%M:%S:", &tm);
+ tm.tm_isdst = -1;
+
+ /* NOTE: no timezone information in the message, assume it is local time */
+ self->stamp.time.tv_sec = mktime(&tm);
+ self->stamp.time.tv_usec = 0;
+ self->stamp.zone_offset = get_local_timezone_ofs(self->stamp.time.tv_sec); /* assume local timezone */
+
+ }
else if (left >= 15 && src[3] == ' ' && src[6] == ' ' && src[9] == ':' && src[12] == ':')
{
/* RFC 3164 timestamp, expected format: MMM DD HH:MM:SS ... */
--
Bazsi
More information about the syslog-ng
mailing list