summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
author/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org>2007-06-07 16:53:56 +0000
committer/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org>2007-06-07 16:53:56 +0000
commitabe1a6193f8558e1a1ea42ba431d164c18b08a3f (patch)
tree2b77643671f877a0abf9e997d5bda56421e5bbe0 /src
parentbd9578d2dc1bf4ed587e0158b8f3c0753fd18f29 (diff)
nfct_snprintf now returns the number of bytes that would have been written, not just the number of bytes written. Emulate snprintf behaviour as in specified in C99
Diffstat (limited to 'src')
-rw-r--r--src/conntrack/snprintf_default.c84
-rw-r--r--src/conntrack/snprintf_xml.c134
2 files changed, 109 insertions, 109 deletions
diff --git a/src/conntrack/snprintf_default.c b/src/conntrack/snprintf_default.c
index 78c0c64..5674963 100644
--- a/src/conntrack/snprintf_default.c
+++ b/src/conntrack/snprintf_default.c
@@ -70,15 +70,15 @@ int __snprintf_address_ipv4(char *buf,
unsigned int len,
const struct __nfct_tuple *tuple)
{
- int ret, size = 0;
+ int ret, size = 0, offset = 0;
struct in_addr src = { .s_addr = tuple->src.v4 };
struct in_addr dst = { .s_addr = tuple->dst.v4 };
ret = snprintf(buf, len, "src=%s ", inet_ntoa(src));
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len, "dst=%s ", inet_ntoa(dst));
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "dst=%s ", inet_ntoa(dst));
+ BUFFER_SIZE(ret, size, len, offset);
return size;
}
@@ -87,7 +87,7 @@ int __snprintf_address_ipv6(char *buf,
unsigned int len,
const struct __nfct_tuple *tuple)
{
- int ret, size = 0;
+ int ret, size = 0, offset = 0;
struct in6_addr src;
struct in6_addr dst;
char tmp[INET6_ADDRSTRLEN];
@@ -99,13 +99,13 @@ int __snprintf_address_ipv6(char *buf,
return -1;
ret = snprintf(buf, len, "src=%s ", tmp);
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
if (!inet_ntop(AF_INET6, &dst, tmp, sizeof(tmp)))
return -1;
- ret = snprintf(buf+size, len-size, "dst=%s ", tmp);
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len-size, "dst=%s ", tmp);
+ BUFFER_SIZE(ret, size, len, offset);
return size;
}
@@ -205,89 +205,89 @@ int __snprintf_id(char *buf, unsigned int len, u_int32_t id)
}
int __snprintf_conntrack_default(char *buf,
- unsigned int remain,
+ unsigned int len,
const struct nf_conntrack *ct,
unsigned int msg_type,
unsigned int flags)
{
- int ret = 0, size = 0;
+ int ret = 0, size = 0, offset = 0;
switch(msg_type) {
case NFCT_T_NEW:
- ret = snprintf(buf, remain, "%9s ", "[NEW]");
+ ret = snprintf(buf, len, "%9s ", "[NEW]");
break;
case NFCT_T_UPDATE:
- ret = snprintf(buf, remain, "%9s ", "[UPDATE]");
+ ret = snprintf(buf, len, "%9s ", "[UPDATE]");
break;
case NFCT_T_DESTROY:
- ret = snprintf(buf, remain, "%9s ", "[DESTROY]");
+ ret = snprintf(buf, len, "%9s ", "[DESTROY]");
break;
default:
break;
}
- BUFFER_SIZE(ret, size, remain);
+ BUFFER_SIZE(ret, size, len, offset);
if (flags & NFCT_OF_SHOW_LAYER3) {
- ret = __snprintf_l3protocol(buf+size, remain, ct);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_l3protocol(buf+offset, len, ct);
+ BUFFER_SIZE(ret, size, len, offset);
}
- ret = __snprintf_protocol(buf+size, remain, ct);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_protocol(buf+offset, len, ct);
+ BUFFER_SIZE(ret, size, len, offset);
if (test_bit(ATTR_TIMEOUT, ct->set)) {
- ret = __snprintf_timeout(buf+size, remain, ct);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_timeout(buf+offset, len, ct);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_TCP_STATE, ct->set)) {
- ret = __snprintf_protoinfo(buf+size, remain, ct);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_protoinfo(buf+offset, len, ct);
+ BUFFER_SIZE(ret, size, len, offset);
}
- ret = __snprintf_address(buf+size, remain, &ct->tuple[__DIR_ORIG]);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_address(buf+offset, len, &ct->tuple[__DIR_ORIG]);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_proto(buf+size, remain, &ct->tuple[__DIR_ORIG]);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_proto(buf+offset, len, &ct->tuple[__DIR_ORIG]);
+ BUFFER_SIZE(ret, size, len, offset);
if (test_bit(ATTR_ORIG_COUNTER_PACKETS, ct->set) &&
test_bit(ATTR_ORIG_COUNTER_BYTES, ct->set)) {
- ret = __snprintf_counters(buf+size, remain, ct, __DIR_ORIG);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_counters(buf+offset, len, ct, __DIR_ORIG);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_STATUS, ct->set)) {
- ret = __snprintf_status_not_seen_reply(buf+size, remain, ct);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_status_not_seen_reply(buf+offset, len, ct);
+ BUFFER_SIZE(ret, size, len, offset);
}
- ret = __snprintf_address(buf+size, remain, &ct->tuple[__DIR_REPL]);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_address(buf+offset, len, &ct->tuple[__DIR_REPL]);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_proto(buf+size, remain, &ct->tuple[__DIR_REPL]);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_proto(buf+offset, len, &ct->tuple[__DIR_REPL]);
+ BUFFER_SIZE(ret, size, len, offset);
if (test_bit(ATTR_REPL_COUNTER_PACKETS, ct->set) &&
test_bit(ATTR_REPL_COUNTER_BYTES, ct->set)) {
- ret = __snprintf_counters(buf+size, remain, ct, __DIR_REPL);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_counters(buf+offset, len, ct, __DIR_REPL);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_STATUS, ct->set)) {
- ret = __snprintf_status_assured(buf+size, remain, ct);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_status_assured(buf+offset, len, ct);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_MARK, ct->set)) {
- ret = __snprintf_mark(buf+size, remain, ct);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_mark(buf+offset, len, ct);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_USE, ct->set)) {
- ret = __snprintf_use(buf+size, remain, ct);
- BUFFER_SIZE(ret, size, remain);
+ ret = __snprintf_use(buf+offset, len, ct);
+ BUFFER_SIZE(ret, size, len, offset);
}
/* Delete the last blank space */
diff --git a/src/conntrack/snprintf_xml.c b/src/conntrack/snprintf_xml.c
index 892c85b..56b2016 100644
--- a/src/conntrack/snprintf_xml.c
+++ b/src/conntrack/snprintf_xml.c
@@ -112,38 +112,38 @@ static int __snprintf_addr_xml(char *buf,
unsigned int type)
{
int ret;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
switch(type) {
case __ADDR_SRC:
ret = snprintf(buf, len, "<src>");
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
break;
case __ADDR_DST:
- ret = snprintf(buf+size, len, "<dst>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "<dst>");
+ BUFFER_SIZE(ret, size, len, offset);
break;
}
switch (tuple->l3protonum) {
case AF_INET:
- ret = __snprintf_ipv4_xml(buf+size, len, tuple, type);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_ipv4_xml(buf+offset, len, tuple, type);
+ BUFFER_SIZE(ret, size, len, offset);
break;
case AF_INET6:
- ret = __snprintf_ipv6_xml(buf+size, len, tuple, type);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_ipv6_xml(buf+offset, len, tuple, type);
+ BUFFER_SIZE(ret, size, len, offset);
break;
}
switch(type) {
case __ADDR_SRC:
- ret = snprintf(buf+size, len, "</src>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "</src>");
+ BUFFER_SIZE(ret, size, len, offset);
break;
case __ADDR_DST:
- ret = snprintf(buf+size, len, "</dst>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "</dst>");
+ BUFFER_SIZE(ret, size, len, offset);
break;
}
@@ -156,7 +156,7 @@ static int __snprintf_proto_xml(char *buf,
unsigned int type)
{
int ret = 0;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
switch(tuple->protonum) {
case IPPROTO_TCP:
@@ -165,11 +165,11 @@ static int __snprintf_proto_xml(char *buf,
if (type == __ADDR_SRC) {
ret = snprintf(buf, len, "<sport>%u</sport>",
ntohs(tuple->l4src.tcp.port));
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
} else {
ret = snprintf(buf, len, "<dport>%u</dport>",
ntohs(tuple->l4dst.tcp.port));
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
}
break;
}
@@ -183,15 +183,15 @@ static int __snprintf_counters_xml(char *buf,
unsigned int type)
{
int ret;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
ret = snprintf(buf, len, "<packets>%llu</packets>",
ct->counters[type].packets);
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len, "<bytes>%llu</bytes>",
+ ret = snprintf(buf+offset, len, "<bytes>%llu</bytes>",
ct->counters[type].bytes);
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
return size;
}
@@ -202,55 +202,55 @@ static int __snprintf_tuple_xml(char *buf,
unsigned int dir)
{
int ret;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
const struct __nfct_tuple *tuple = &ct->tuple[dir];
ret = snprintf(buf, len, "<meta direction=\"%s\">",
dir == __DIR_ORIG ? "original" : "reply");
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len,
+ ret = snprintf(buf+offset, len,
"<layer3 protonum=\"%d\" protoname=\"%s\">",
tuple->l3protonum, __l3proto2str(tuple->l3protonum));
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_addr_xml(buf+size, len, tuple, __DIR_ORIG);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_addr_xml(buf+offset, len, tuple, __DIR_ORIG);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_addr_xml(buf+size, len, tuple, __DIR_REPL);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_addr_xml(buf+offset, len, tuple, __DIR_REPL);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len, "</layer3>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "</layer3>");
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len,
+ ret = snprintf(buf+offset, len,
"<layer4 protonum=\"%d\" protoname=\"%s\">",
tuple->protonum, __proto2str(tuple->protonum));
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_proto_xml(buf+size, len, tuple, __DIR_ORIG);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_proto_xml(buf+offset, len, tuple, __DIR_ORIG);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_proto_xml(buf+size, len, tuple, __DIR_REPL);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_proto_xml(buf+offset, len, tuple, __DIR_REPL);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len, "</layer4>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "</layer4>");
+ BUFFER_SIZE(ret, size, len, offset);
if (test_bit(ATTR_ORIG_COUNTER_PACKETS, ct->set) &&
test_bit(ATTR_ORIG_COUNTER_BYTES, ct->set)) {
- ret = snprintf(buf+size, len, "<counters>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "<counters>");
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_counters_xml(buf+size, len, ct, dir);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_counters_xml(buf+offset, len, ct, dir);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len, "</counters>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "</counters>");
+ BUFFER_SIZE(ret, size, len, offset);
}
- ret = snprintf(buf+size, len, "</meta>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "</meta>");
+ BUFFER_SIZE(ret, size, len, offset);
return size;
}
@@ -262,7 +262,7 @@ int __snprintf_conntrack_xml(char *buf,
const unsigned int flags)
{
int ret = 0;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
switch(msg_type) {
case NFCT_T_NEW:
@@ -279,61 +279,61 @@ int __snprintf_conntrack_xml(char *buf,
break;
}
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_tuple_xml(buf+size, len, ct, __DIR_ORIG);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_tuple_xml(buf+offset, len, ct, __DIR_ORIG);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_tuple_xml(buf+size, len, ct, __DIR_REPL);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_tuple_xml(buf+offset, len, ct, __DIR_REPL);
+ BUFFER_SIZE(ret, size, len, offset);
if (test_bit(ATTR_TIMEOUT, ct->set) ||
test_bit(ATTR_MARK, ct->set) ||
test_bit(ATTR_USE, ct->set) ||
test_bit(ATTR_STATUS, ct->set)) {
- ret = snprintf(buf+size, len,
+ ret = snprintf(buf+offset, len,
"<meta direction=\"independent\">");
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_TIMEOUT, ct->set)) {
- ret = snprintf(buf+size, len,
+ ret = snprintf(buf+offset, len,
"<timeout>%u</timeout>", ct->timeout);
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_MARK, ct->set)) {
- ret = snprintf(buf+size, len, "<mark>%u</mark>", ct->mark);
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "<mark>%u</mark>", ct->mark);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_USE, ct->set)) {
- ret = snprintf(buf+size, len, "<use>%u</use>", ct->use);
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "<use>%u</use>", ct->use);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_STATUS, ct->set)
&& ct->status & IPS_ASSURED) {
- ret = snprintf(buf+size, len, "<assured/>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "<assured/>");
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_STATUS, ct->set)
&& !(ct->status & IPS_SEEN_REPLY)) {
- ret = snprintf(buf+size, len, "<unreplied/>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "<unreplied/>");
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_TIMEOUT, ct->set) ||
test_bit(ATTR_MARK, ct->set) ||
test_bit(ATTR_USE, ct->set) ||
test_bit(ATTR_STATUS, ct->set)) {
- ret = snprintf(buf+size, len, "</meta>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "</meta>");
+ BUFFER_SIZE(ret, size, len, offset);
}
- ret = snprintf(buf+size, len, "</flow>");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "</flow>");
+ BUFFER_SIZE(ret, size, len, offset);
return size;
}