Package: flow-tools Version: 1:0.68-6 Severity: normal Tags: patch
Incorrect print of capture times in flow-print and flow-report. -- System Information: Debian Release: 3.1 Architecture: amd64 (x86_64) Kernel: Linux 2.6.12 Locale: LANG=ru_RU.KOI8-R, LC_CTYPE=ru_RU.KOI8-R (charmap=KOI8-R) Versions of packages flow-tools depends on: ii libc6 2.3.2.ds1-22 GNU C Library: Shared libraries an ii libmysqlclient12 4.0.24-10 mysql database client library ii libpq4 8.0.3-15 PostgreSQL C client library ii libwrap0 7.6.dbs-8 Wietse Venema's TCP wrappers libra ii python 2.3.5-2 An interactive high-level object-o ii zlib1g 1:1.2.2-4.sarge.2 compression library - runtime -- no debconf information
--- flow-tools-0.68.orig/src/flow-print.c +++ flow-tools-0.68/src/flow-print.c @@ -298,6 +298,7 @@ u_long bpp; char fmt_buf1[64], fmt_buf2[64]; char *rec; + time_t time_ftt; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | @@ -351,14 +352,16 @@ (u_long)*cur.dPkts, (u_long)*cur.dOctets); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.First); - tm = localtime((time_t*)&ftt.secs); + time_ftt = ftt.secs; + tm = localtime(&time_ftt); printf(" %-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.Last); - tm = localtime((time_t*)&ftt.secs); + time_ftt = ftt.secs; + tm = localtime(&time_ftt); active_secs = (*cur.Last - *cur.First) / 1000; active_msecs = (*cur.Last - *cur.First) % 1000; @@ -398,6 +401,7 @@ u_long active_secs, active_msecs; u_long bpp; char *rec; + time_t time_ftt; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | @@ -465,14 +469,16 @@ (u_long)*cur.dPkts, (u_long)*cur.dOctets); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.First); - tm = localtime((time_t*)&ftt.secs); + time_ftt = ftt.secs; + tm = localtime(&time_ftt); printf(" %-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.Last); - tm = localtime((time_t*)&ftt.secs); + time_ftt = ftt.secs; + tm = localtime(&time_ftt); active_secs = (*cur.Last - *cur.First) / 1000; active_msecs = (*cur.Last - *cur.First) % 1000; @@ -675,6 +681,7 @@ struct ftver ftv; char fmt_buf1[64], fmt_buf2[64]; char *rec; + time_t time_ftt; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | @@ -711,14 +718,16 @@ cur.tcp_flags = ((u_int8*)(rec+fo.tcp_flags)); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.First); - tm = localtime((time_t*)&ftt.secs); + time_ftt = ftt.secs; + tm = localtime(&time_ftt); printf("%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.Last); - tm = localtime((time_t*)&ftt.secs); + time_ftt = ftt.secs; + tm = localtime(&time_ftt); printf("%-2.2d%-2.2d.%-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, @@ -2173,6 +2182,7 @@ u_long bpp; char fmt_buf1[64], fmt_buf2[64], fmt_buf3[64], fmt_buf4[64], fmt_buf5[64], fmt_buf6[64]; char *rec; + time_t time_ftt; if (ftio_check_xfield(ftio, FT_XFIELD_DPKTS | FT_XFIELD_DOCTETS | FT_XFIELD_FIRST | FT_XFIELD_LAST | FT_XFIELD_INPUT | @@ -2239,14 +2249,16 @@ (u_long)*cur.dPkts, (u_long)*cur.dOctets); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.First); - tm = localtime((time_t*)&ftt.secs); + time_ftt = ftt.secs; + tm = localtime(&time_ftt); printf(" %-4.4d-%-2.2d-%-2.2d %-2.2d:%-2.2d:%-2.2d.%-3.3lu ", (int)tm->tm_year+1900, (int)tm->tm_mon+1, (int)tm->tm_mday, (int)tm->tm_hour, (int)tm->tm_min, (int)tm->tm_sec, (u_long)ftt.msecs); ftt = ftltime(*cur.sysUpTime, *cur.unix_secs, *cur.unix_nsecs, *cur.Last); - tm = localtime((time_t*)&ftt.secs); + time_ftt = ftt.secs; + tm = localtime(&time_ftt); active_secs = (*cur.Last - *cur.First) / 1000; active_msecs = (*cur.Last - *cur.First) % 1000; --- flow-tools-0.68.orig/lib/ftstat.c +++ flow-tools-0.68/lib/ftstat.c @@ -12363,7 +12363,7 @@ { int comma, sort_field; char *buf, fmt_buf[32]; - time_t now; + time_t now, time_flow; /* shortcut */ if (!(rpt->out->options & FT_STAT_OPT_HEADER)) @@ -12619,11 +12619,13 @@ fprintf(fp, "# records_shown: %s\n", fmt_buf); } + time_flow = rpt->time_start; fprintf(fp, "# first-flow: %lu %s", - (unsigned long)rpt->time_start, ctime((time_t*)&rpt->time_start)); + (unsigned long)rpt->time_start, ctime(&time_flow)); + time_flow = rpt->time_end; fprintf(fp, "# last-flow: %lu %s", - (unsigned long)rpt->time_end, ctime((time_t*)&rpt->time_end)); + (unsigned long)rpt->time_end, ctime(&time_flow)); now = time((time_t*)0L);