$OpenBSD: patch-modules_syslogformat_syslog-format_c,v 1.1 2014/11/21 08:10:48 jasper Exp $

From e6aeb3e21bbcfed3137a558449222c6a4bca7c7b Mon Sep 17 00:00:00 2001
From: Budai Laszlo <Laszlo.Budai@balabit.com>
Date: Thu, 20 Nov 2014 10:17:39 +0100
Subject: [PATCH] timeutils: fix bad pointer cast that leads to timestamp overwriting

https://github.com/balabit/syslog-ng/pull/305

--- modules/syslogformat/syslog-format.c.orig	Fri Jun  6 12:50:49 2014
+++ modules/syslogformat/syslog-format.c	Thu Nov 20 01:35:02 2014
@@ -245,6 +245,7 @@ log_msg_parse_date(LogMessage *self, const guchar **da
     {
       /* RFC3339 timestamp, expected format: YYYY-MM-DDTHH:MM:SS[.frac]<+/->ZZ:ZZ */
       gint hours, mins;
+      time_t now_tv_sec = (time_t)now.tv_sec;
 
       self->timestamps[LM_TS_STAMP].tv_usec = 0;
 
@@ -253,7 +254,7 @@ log_msg_parse_date(LogMessage *self, const guchar **da
        * not exist on all platforms and 0 initializing it causes trouble on
        * time-zone barriers */
 
-      cached_localtime(&now.tv_sec, &tm);
+      cached_localtime(&now_tv_sec, &tm);
       if (!scan_iso_timestamp((const gchar **) &src, &left, &tm))
         {
           goto error;
@@ -315,8 +316,8 @@ log_msg_parse_date(LogMessage *self, const guchar **da
         {
           /* PIX timestamp, expected format: MMM DD YYYY HH:MM:SS: */
           /* ASA timestamp, expected format: MMM DD YYYY HH:MM:SS */
-
-          cached_localtime(&now.tv_sec, &tm);
+          time_t now_tv_sec = (time_t)now.tv_sec;
+          cached_localtime(&now_tv_sec, &tm);
           if (!scan_pix_timestamp((const gchar **) &src, &left, &tm))
             goto error;
 
@@ -338,7 +339,8 @@ log_msg_parse_date(LogMessage *self, const guchar **da
         {
           /* LinkSys timestamp, expected format: MMM DD HH:MM:SS YYYY */
 
-          cached_localtime(&now.tv_sec, &tm);
+          time_t now_tv_sec = (time_t)now.tv_sec;
+          cached_localtime(&now_tv_sec, &tm);
           if (!scan_linksys_timestamp((const gchar **) &src, &left, &tm))
             goto error;
           tm.tm_isdst = -1;
@@ -354,8 +356,8 @@ log_msg_parse_date(LogMessage *self, const guchar **da
           /* RFC 3164 timestamp, expected format: MMM DD HH:MM:SS ... */
           struct tm nowtm;
           glong usec = 0;
-
-          cached_localtime(&now.tv_sec, &nowtm);
+          time_t now_tv_sec = (time_t)now.tv_sec;
+          cached_localtime(&now_tv_sec, &nowtm);
           tm = nowtm;
           if (!scan_bsd_timestamp((const gchar **) &src, &left, &tm))
             goto error;
@@ -879,7 +881,7 @@ log_msg_parse_legacy(const MsgFormatOptions *parse_opt
   log_msg_parse_seq(self, &src, &left);
   log_msg_parse_skip_chars(self, &src, &left, " ", -1);
   cached_g_current_time(&now);
-  if (log_msg_parse_date(self, &src, &left, parse_options->flags & ~LP_SYSLOG_PROTOCOL, time_zone_info_get_offset(parse_options->recv_time_zone_info, now.tv_sec)))
+  if (log_msg_parse_date(self, &src, &left, parse_options->flags & ~LP_SYSLOG_PROTOCOL, time_zone_info_get_offset(parse_options->recv_time_zone_info, (time_t)now.tv_sec)))
     {
       /* Expected format: hostname program[pid]: */
       /* Possibly: Message forwarded from hostname: ... */
