From d94805d59bbd3a4ceb725f5fc4c6e6778dc25709 Mon Sep 17 00:00:00 2001 From: "/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org" Date: Sun, 13 Jan 2008 16:07:43 +0000 Subject: add NFCT_OF_TIME output flag to nfct_snprintf --- configure.in | 2 +- include/internal.h | 1 + .../libnetfilter_conntrack.h | 3 ++ src/conntrack/api.c | 5 +-- src/conntrack/snprintf_xml.c | 40 ++++++++++++++++++++++ utils/conntrack_events.c | 2 +- 6 files changed, 49 insertions(+), 4 deletions(-) diff --git a/configure.in b/configure.in index 24d8a02..12981db 100644 --- a/configure.in +++ b/configure.in @@ -4,7 +4,7 @@ AC_INIT AC_CANONICAL_SYSTEM -AM_INIT_AUTOMAKE(libnetfilter_conntrack, 0.0.87) +AM_INIT_AUTOMAKE(libnetfilter_conntrack, 0.0.88) AC_PROG_CC AM_PROG_LIBTOOL diff --git a/include/internal.h b/include/internal.h index 820a0bd..e0a08a5 100644 --- a/include/internal.h +++ b/include/internal.h @@ -17,6 +17,7 @@ #include #include #include +#include #include #include diff --git a/include/libnetfilter_conntrack/libnetfilter_conntrack.h b/include/libnetfilter_conntrack/libnetfilter_conntrack.h index b977082..c91949c 100644 --- a/include/libnetfilter_conntrack/libnetfilter_conntrack.h +++ b/include/libnetfilter_conntrack/libnetfilter_conntrack.h @@ -242,6 +242,9 @@ enum { enum { NFCT_OF_SHOW_LAYER3_BIT = 0, NFCT_OF_SHOW_LAYER3 = (1 << NFCT_OF_SHOW_LAYER3_BIT), + + NFCT_OF_TIME_BIT = 1, + NFCT_OF_TIME = (1 << NFCT_OF_TIME_BIT), }; extern int nfct_snprintf(char *buf, diff --git a/src/conntrack/api.c b/src/conntrack/api.c index d020869..f2f3cb5 100644 --- a/src/conntrack/api.c +++ b/src/conntrack/api.c @@ -607,8 +607,9 @@ int nfct_catch(struct nfct_handle *h) * - NFCT_O_XML: XML output * * The output flags are: - * - NFCT_O_LAYER: include layer 3 information in the output, this is - * *only* required by NFCT_O_DEFAULT. + * - NFCT_OF_SHOW_LAYER3: include layer 3 information in the output, + * this is *only* required by NFCT_O_DEFAULT. + * - NFCT_OF_TIME: display time. * * This function returns the size of the information that _would_ have been * written to the buffer, even if there was no room for it. Thus, the diff --git a/src/conntrack/snprintf_xml.c b/src/conntrack/snprintf_xml.c index 1415e0d..9f7f388 100644 --- a/src/conntrack/snprintf_xml.c +++ b/src/conntrack/snprintf_xml.c @@ -341,6 +341,46 @@ int __snprintf_conntrack_xml(char *buf, BUFFER_SIZE(ret, size, len, offset); } + if (flags & NFCT_OF_TIME) { + time_t t; + struct tm tm; + + t = time(NULL); + if (localtime_r(&t, &tm) == NULL) + goto err_out; + + ret = snprintf(buf+offset, len, ""); + BUFFER_SIZE(ret, size, len, offset); + + ret = snprintf(buf+offset, len, "%d", tm.tm_hour); + BUFFER_SIZE(ret, size, len, offset); + + ret = snprintf(buf+offset, len, "%02d", tm.tm_min); + BUFFER_SIZE(ret, size, len, offset); + + ret = snprintf(buf+offset, len, "%02d", tm.tm_sec); + BUFFER_SIZE(ret, size, len, offset); + + ret = snprintf(buf+offset, len, "%d", + tm.tm_wday + 1); + BUFFER_SIZE(ret, size, len, offset); + + ret = snprintf(buf+offset, len, "%d", tm.tm_mday); + BUFFER_SIZE(ret, size, len, offset); + + ret = snprintf(buf+offset, len, "%d", + tm.tm_mon + 1); + BUFFER_SIZE(ret, size, len, offset); + + ret = snprintf(buf+offset, len, "%d", + 1900 + tm.tm_year); + BUFFER_SIZE(ret, size, len, offset); + + ret = snprintf(buf+offset, len, ""); + BUFFER_SIZE(ret, size, len, offset); + } + +err_out: ret = snprintf(buf+offset, len, ""); BUFFER_SIZE(ret, size, len, offset); diff --git a/utils/conntrack_events.c b/utils/conntrack_events.c index 68b9c2c..4be5d48 100644 --- a/utils/conntrack_events.c +++ b/utils/conntrack_events.c @@ -11,7 +11,7 @@ static int event_cb(enum nf_conntrack_msg_type type, static int n = 0; char buf[1024]; - nfct_snprintf(buf, 1024, ct, type, NFCT_O_XML, 0); + nfct_snprintf(buf, 1024, ct, type, NFCT_O_XML, NFCT_OF_TIME); printf("%s\n", buf); if (++n == 10) -- cgit v1.2.3