summaryrefslogtreecommitdiffstats
path: root/src/conntrack
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2008-06-16 01:58:41 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2008-06-16 01:58:41 +0200
commit29ce47fc611015a64f66d1ec93c67a9d998f0592 (patch)
treee5cbd8a7bd91c4be822dd18545982517ad5a3c2e /src/conntrack
parent0ceaca69ad2517e156066203111e153084140a18 (diff)
fix wrong ATTR_*_L3PROTO handling in the message building
- include missing ATTR_MASTER_L3PROTO attribute into messages - include ATTR_[ORIG|REPL]_L3PROTO iff there is at least another layer 3 attribute
Diffstat (limited to 'src/conntrack')
-rw-r--r--src/conntrack/parse.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/conntrack/parse.c b/src/conntrack/parse.c
index a18e3ad..7b6c0c5 100644
--- a/src/conntrack/parse.c
+++ b/src/conntrack/parse.c
@@ -379,23 +379,29 @@ void __parse_conntrack(const struct nlmsghdr *nlh,
{
struct nfgenmsg *nfhdr = NLMSG_DATA(nlh);
- ct->tuple[__DIR_ORIG].l3protonum = nfhdr->nfgen_family;
- set_bit(ATTR_ORIG_L3PROTO, ct->set);
+ if (cda[CTA_TUPLE_ORIG-1]) {
+ ct->tuple[__DIR_ORIG].l3protonum = nfhdr->nfgen_family;
+ set_bit(ATTR_ORIG_L3PROTO, ct->set);
- ct->tuple[__DIR_REPL].l3protonum = nfhdr->nfgen_family;
- set_bit(ATTR_REPL_L3PROTO, ct->set);
-
- if (cda[CTA_TUPLE_ORIG-1])
__parse_tuple(cda[CTA_TUPLE_ORIG-1],
&ct->tuple[__DIR_ORIG], __DIR_ORIG, ct->set);
+ }
+
+ if (cda[CTA_TUPLE_REPLY-1]) {
+ ct->tuple[__DIR_REPL].l3protonum = nfhdr->nfgen_family;
+ set_bit(ATTR_REPL_L3PROTO, ct->set);
- if (cda[CTA_TUPLE_REPLY-1])
__parse_tuple(cda[CTA_TUPLE_REPLY-1],
&ct->tuple[__DIR_REPL], __DIR_REPL, ct->set);
+ }
+
+ if (cda[CTA_TUPLE_MASTER-1]) {
+ ct->tuple[__DIR_MASTER].l3protonum = nfhdr->nfgen_family;
+ set_bit(ATTR_MASTER_L3PROTO, ct->set);
- if (cda[CTA_TUPLE_MASTER-1])
__parse_tuple(cda[CTA_TUPLE_MASTER-1],
&ct->tuple[__DIR_MASTER], __DIR_MASTER, ct->set);
+ }
if (cda[CTA_NAT_SEQ_ADJ_ORIG-1])
__parse_nat_seq(cda[CTA_NAT_SEQ_ADJ_ORIG-1], ct, __DIR_ORIG);