From 01acae8ad97ccf24acc42a70201aed3a6d4a165a Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Tue, 22 Apr 2025 16:32:12 +0200 Subject: [PATCH] Refreshing time64.patch with an updated version from upstream. Signed-off-by: Daniel Baumann --- debian/patches/upstream/0001-time64.patch | 229 +++++++++++++++++++--- 1 file changed, 205 insertions(+), 24 deletions(-) diff --git a/debian/patches/upstream/0001-time64.patch b/debian/patches/upstream/0001-time64.patch index 63b009e..281b8fb 100644 --- a/debian/patches/upstream/0001-time64.patch +++ b/debian/patches/upstream/0001-time64.patch @@ -1,31 +1,189 @@ -From 0f8e75aff4ae7c01c27a6aacc580be25b0e0c971 Mon Sep 17 00:00:00 2001 +From 731d9e00c686f1b67660403406252f0c742f38eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jerry=20Lundstr=C3=B6m?= Date: Tue, 22 Apr 2025 09:50:50 +0200 -Subject: [PATCH] . +Subject: [PATCH] Add support for 64bit time structures on 32bit systems +- Fix #324: + - Add macros for printing `timeval` when `_TIME_BITS` is set to 64 + - Clean up usage and printing of `timeval` structures in `src` and `plugins` --- - src/dnscap.h | 6 ++++++ - src/dumper.c | 2 +- - src/network.c | 10 +++++----- - 3 files changed, 12 insertions(+), 6 deletions(-) + plugins/pcapdump/pcapdump.c | 6 +++--- + plugins/rssm/rssm.c | 16 ++++++++-------- + plugins/rzkeychange/rzkeychange.c | 8 ++++---- + plugins/txtout/txtout.c | 2 +- + src/dnscap.c | 4 ++-- + src/dnscap_common.h | 15 +++++++++++++++ + src/dumper.c | 2 +- + src/network.c | 18 +++++++++--------- + 8 files changed, 43 insertions(+), 28 deletions(-) -diff --git a/src/dnscap.h b/src/dnscap.h -index d339ff1..bede3c3 100644 ---- a/src/dnscap.h -+++ b/src/dnscap.h -@@ -204,6 +204,12 @@ - #define MAX_TCP_WINDOW (0xFFFF << 14) - #define MEM_MAX 20000000000 /* SETTING MAX MEMORY USAGE TO 2GB */ +diff --git a/plugins/pcapdump/pcapdump.c b/plugins/pcapdump/pcapdump.c +index 5a93b22..e6f2996 100644 +--- a/plugins/pcapdump/pcapdump.c ++++ b/plugins/pcapdump/pcapdump.c +@@ -175,10 +175,10 @@ int pcapdump_open(my_bpftimeval ts) + ts.tv_sec++; + ts.tv_usec -= MILLION; + } +- gmtime_r((time_t*)&ts.tv_sec, &tm); ++ gmtime_r(&ts.tv_sec, &tm); + strftime(sbuf, 64, "%Y%m%d.%H%M%S", &tm); +- if (asprintf(&dumpname, "%s.%s.%06lu", +- dump_base, sbuf, (u_long)ts.tv_usec) ++ if (asprintf(&dumpname, "%s.%s.%06" PRI_tv_usec, ++ dump_base, sbuf, ts.tv_usec) + < 0 + || asprintf(&dumpnamepart, "%s.part", dumpname) < 0) { + logerr("asprintf: %s", strerror(errno)); +diff --git a/plugins/rssm/rssm.c b/plugins/rssm/rssm.c +index 8d3428b..e760990 100644 +--- a/plugins/rssm/rssm.c ++++ b/plugins/rssm/rssm.c +@@ -286,7 +286,7 @@ void rssm_save_counts(const char* sbuf) + FILE* fp; + int i; + char* tbuf = 0; +- i = asprintf(&tbuf, "%s.%s.%06lu", counts_prefix ? counts_prefix : COUNTS_PREFIX_DEFAULT, sbuf, (u_long)open_ts.tv_usec); ++ i = asprintf(&tbuf, "%s.%s.%06" PRI_tv_usec, counts_prefix ? counts_prefix : COUNTS_PREFIX_DEFAULT, sbuf, open_ts.tv_usec); + if (i < 1 || !tbuf) { + logerr("asprintf: out of memory"); + return; +@@ -302,7 +302,7 @@ void rssm_save_counts(const char* sbuf) + char tz[21]; + struct tm tm; +- gmtime_r((time_t*)&open_ts.tv_sec, &tm); ++ gmtime_r(&open_ts.tv_sec, &tm); + if (!strftime(tz, sizeof(tz), "%Y-%m-%dT%H:%M:%SZ", &tm)) { + logerr("rssm: strftime failed"); + fclose(fp); +@@ -443,8 +443,8 @@ void rssm_save_counts(const char* sbuf) + } + } + } else { +- fprintf(fp, "first-packet-time %ld\n", (long)open_ts.tv_sec); +- fprintf(fp, "last-packet-time %ld\n", (long)close_ts.tv_sec); ++ fprintf(fp, "first-packet-time %" PRI_tv_sec "\n", open_ts.tv_sec); ++ fprintf(fp, "last-packet-time %" PRI_tv_sec "\n", close_ts.tv_sec); + fprintf(fp, "dns-udp-queries-received-ipv4 %" PRIu64 "\n", counts.dns_udp_queries_received_ipv4); + fprintf(fp, "dns-udp-queries-received-ipv6 %" PRIu64 "\n", counts.dns_udp_queries_received_ipv6); + fprintf(fp, "dns-tcp-queries-received-ipv4 %" PRIu64 "\n", counts.dns_tcp_queries_received_ipv4); +@@ -510,7 +510,7 @@ void rssm_save_sources(const char* sbuf) + FILE* fp; + char* tbuf = 0; + int i; +- i = asprintf(&tbuf, "%s.%s.%06lu", sources_prefix, sbuf, (u_long)open_ts.tv_usec); ++ i = asprintf(&tbuf, "%s.%s.%06" PRI_tv_usec, sources_prefix, sbuf, open_ts.tv_usec); + if (i < 1 || !tbuf) { + logerr("asprintf: out of memory"); + return; +@@ -535,7 +535,7 @@ void rssm_save_aggregated(const char* sbuf) + FILE* fp; + char* tbuf = 0; + int i; +- i = asprintf(&tbuf, "%s.%s.%06lu", aggregated_prefix, sbuf, (u_long)open_ts.tv_usec); ++ i = asprintf(&tbuf, "%s.%s.%06" PRI_tv_usec, aggregated_prefix, sbuf, open_ts.tv_usec); + if (i < 1 || !tbuf) { + logerr("asprintf: out of memory"); + return; +@@ -566,7 +566,7 @@ int rssm_close(my_bpftimeval ts) + struct tm tm; + + if (dont_fork_on_close) { +- gmtime_r((time_t*)&open_ts.tv_sec, &tm); ++ gmtime_r(&open_ts.tv_sec, &tm); + strftime(sbuf, sizeof(sbuf), "%Y%m%d.%H%M%S", &tm); + close_ts = ts; + rssm_save_counts(sbuf); +@@ -596,7 +596,7 @@ int rssm_close(my_bpftimeval ts) + exit(0); + } + /* grandchild (2nd gen) continues */ +- gmtime_r((time_t*)&open_ts.tv_sec, &tm); ++ gmtime_r(&open_ts.tv_sec, &tm); + strftime(sbuf, sizeof(sbuf), "%Y%m%d.%H%M%S", &tm); + close_ts = ts; + rssm_save_counts(sbuf); +diff --git a/plugins/rzkeychange/rzkeychange.c b/plugins/rzkeychange/rzkeychange.c +index dd99316..540e415 100644 +--- a/plugins/rzkeychange/rzkeychange.c ++++ b/plugins/rzkeychange/rzkeychange.c +@@ -290,8 +290,8 @@ void rzkeychange_submit_counts(void) + double elapsed = (double)clos_ts.tv_sec - (double)open_ts.tv_sec + 0.000001 * clos_ts.tv_usec - 0.000001 * open_ts.tv_usec; // NOSONAR + int k; + +- k = snprintf(qname, sizeof(qname), "%lu-%u-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 ".%s.%s.%s", +- (u_long)open_ts.tv_sec, ++ k = snprintf(qname, sizeof(qname), "%" PRI_tv_sec "-%u-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 ".%s.%s.%s", ++ open_ts.tv_sec, + (unsigned int)(elapsed + 0.5), + counts.total, + counts.dnskey, +@@ -330,8 +330,8 @@ void rzkeychange_submit_counts(void) + if (*t == '.' || *t == ':') + *t = '-'; + +- k = snprintf(qname, sizeof(qname), "%lu.%s.%hhx.%s.%s.%s.%s", +- (u_long)open_ts.tv_sec, ++ k = snprintf(qname, sizeof(qname), "%" PRI_tv_sec ".%s.%hhx.%s.%s.%s.%s", ++ open_ts.tv_sec, + s, + key_tag_signals[i].flags, + key_tag_signals[i].signal, +diff --git a/plugins/txtout/txtout.c b/plugins/txtout/txtout.c +index 67b41c3..54c71e7 100644 +--- a/plugins/txtout/txtout.c ++++ b/plugins/txtout/txtout.c +@@ -220,7 +220,7 @@ void txtout_output(const char* descr, iaddr from, iaddr to, uint8_t proto, unsig + /* + * IP Stuff + */ +- fprintf(out, "%10ld.%06ld", (long)ts.tv_sec, (long)ts.tv_usec); ++ fprintf(out, "%10" PRI_tv_sec ".%06" PRI_tv_usec, ts.tv_sec, ts.tv_usec); + fprintf(out, " %s %u", ia_str(from), sport); + fprintf(out, " %s %u", ia_str(to), dport); + fprintf(out, " %hhu", proto); +diff --git a/src/dnscap.c b/src/dnscap.c +index 7788f0a..aea8370 100644 +--- a/src/dnscap.c ++++ b/src/dnscap.c +@@ -143,8 +143,8 @@ int main(int argc, char* argv[]) + struct tm tm; + gmtime_r(&start_time, &tm); + strftime(when, sizeof when, "%F %T", &tm); +- fprintf(stderr, "Sleeping for %d seconds until %s UTC\n", +- (int)(start_time - now.tv_sec), when); ++ fprintf(stderr, "Sleeping for %" PRI_tv_sec " seconds until %s UTC\n", ++ start_time - now.tv_sec, when); + sleep(start_time - now.tv_sec); + fprintf(stderr, "Awake.\n"); + } +diff --git a/src/dnscap_common.h b/src/dnscap_common.h +index 719ebf4..f131330 100644 +--- a/src/dnscap_common.h ++++ b/src/dnscap_common.h +@@ -49,6 +49,21 @@ + #endif + #endif + ++/* Macros for printing timeval */ ++#include +#if _TIME_BITS == 64 -+#define PRI_tv_usec "lld" ++#define PRI_tv_sec PRId64 ++#define PRI_tv_usec PRId64 +#else ++#ifdef __OpenBSD__ ++#define PRI_tv_sec PRId64 ++#define PRI_tv_usec "ld" ++#else ++#define PRI_tv_sec "ld" +#define PRI_tv_usec "ld" +#endif ++#endif + - #define ISC_CHECK_NONE 1 - #include "isc/list.h" - #include "isc/assertions.h" + /* + * setup MY_BPFTIMEVAL as the timeval structure that bpf packets + * will be assoicated with packets from libpcap diff --git a/src/dumper.c b/src/dumper.c index 68783e7..b1e6c9a 100644 --- a/src/dumper.c @@ -40,9 +198,18 @@ index 68783e7..b1e6c9a 100644 ts.tv_usec, dump_suffix ? dump_suffix : "") < 0 diff --git a/src/network.c b/src/network.c -index f0a6238..6b20c55 100644 +index f0a6238..7227752 100644 --- a/src/network.c +++ b/src/network.c +@@ -192,7 +192,7 @@ void layer_pkt(u_char* user, const pcap_thread_packet_t* packet, const u_char* p + break; + } + +- t = (time_t)firstpkt->pkthdr.ts.tv_sec; ++ t = firstpkt->pkthdr.ts.tv_sec; + gmtime_r(&t, &tm); + strftime(when, sizeof(when), "%Y-%m-%d %T", &tm); + @@ -207,7 +207,7 @@ void layer_pkt(u_char* user, const pcap_thread_packet_t* packet, const u_char* p } @@ -61,6 +228,15 @@ index f0a6238..6b20c55 100644 len, when, firstpkt->pkthdr.ts.tv_usec, +@@ -426,7 +426,7 @@ void dl_pkt(u_char* user, const struct pcap_pkthdr* hdr, const u_char* pkt, cons + struct tm tm; + time_t t; + +- t = (time_t)hdr->ts.tv_sec; ++ t = hdr->ts.tv_sec; + gmtime_r(&t, &tm); + strftime(when, sizeof when, "%Y-%m-%d %T", &tm); + if (vlan != MAX_VLAN) { @@ -437,7 +437,7 @@ void dl_pkt(u_char* user, const struct pcap_pkthdr* hdr, const u_char* pkt, cons } else { viap = "\"some interface\""; @@ -70,21 +246,26 @@ index f0a6238..6b20c55 100644 len, when, hdr->ts.tv_usec, msgcount, viap, vlan); } else { descr[0] = '\0'; -@@ -725,7 +725,7 @@ void network_pkt2(const char* descr, my_bpftimeval ts, const pcap_thread_packet_ +@@ -725,9 +725,9 @@ void network_pkt2(const char* descr, my_bpftimeval ts, const pcap_thread_packet_ tcpstate = tcpstate_find(from, to, sport, dport, ts.tv_sec); if (dumptrace >= 3) { - fprintf(stderr, "%s: tcp pkt: %" PRIdMAX ".%06ld [%4zu] %15s -> ", -+ fprintf(stderr, "%s: tcp pkt: %" PRIdMAX ".%06" PRI_tv_usec " [%4zu] %15s -> ", ++ fprintf(stderr, "%s: tcp pkt: %" PRI_tv_sec ".%06" PRI_tv_usec " [%4zu] %15s -> ", ProgramName, - (intmax_t)ts.tv_sec, +- (intmax_t)ts.tv_sec, ++ ts.tv_sec, ts.tv_usec, -@@ -1327,7 +1327,7 @@ void network_pkt(const char* descr, my_bpftimeval ts, unsigned pf, + len, + ia_str(from)); +@@ -1327,8 +1327,8 @@ void network_pkt(const char* descr, my_bpftimeval ts, unsigned pf, tcpstate = tcpstate_find(from, to, sport, dport, ts.tv_sec); if (dumptrace >= 3) { - fprintf(stderr, "%s: tcp pkt: %" PRIdMAX ".%06ld [%4zu] ", ProgramName, -+ fprintf(stderr, "%s: tcp pkt: %" PRIdMAX ".%06" PRI_tv_usec " [%4zu] ", ProgramName, - (intmax_t)ts.tv_sec, ts.tv_usec, len); +- (intmax_t)ts.tv_sec, ts.tv_usec, len); ++ fprintf(stderr, "%s: tcp pkt: %" PRI_tv_sec ".%06" PRI_tv_usec " [%4zu] ", ProgramName, ++ ts.tv_sec, ts.tv_usec, len); fprintf(stderr, "%15s -> ", ia_str(from)); fprintf(stderr, "%15s; ", ia_str(to)); + if (tcpstate)