Skip to content

Commit

Permalink
netfilter: nf_conntrack_amanda: add support for STATE streams
Browse files Browse the repository at this point in the history
The Amanda CONNECT command has been updated to establish an optional
fourth connection [0]. Previously, a CONNECT command would look like:

    CONNECT DATA port0 MESG port1 INDEX port2

nf_conntrack_amanda analyses the CONNECT command string in order to
learn the port numbers of the related DATA, MESG and INDEX streams. As
of amanda v3.4, the CONNECT command can advertise an additional port:

    CONNECT DATA port0 MESG port1 INDEX port2 STATE port3

The new STATE stream is not handled, thus the connection on the STATE
port cannot be established.

The patch adds support for STATE streams to the amanda conntrack helper.

I tested with max_expected = 3, leaving the other patch hunks
unmodified. Amanda reports "connection refused" and aborts. After I set
max_expected to 4, the backup completes successfully.

[0] https://github.com/zmanda/amanda/commit/3b8384fc9f2941e2427f44c3aee29f561ed67894#diff-711e502fc81a65182c0954765b42919eR456

Signed-off-by: Florian Tham <tham@fidion.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
  • Loading branch information
Florian Tham authored and Pablo Neira Ayuso committed Feb 27, 2019
1 parent b8e2040 commit 4283428
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions net/netfilter/nf_conntrack_amanda.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ enum amanda_strings {
SEARCH_DATA,
SEARCH_MESG,
SEARCH_INDEX,
SEARCH_STATE,
};

static struct {
Expand Down Expand Up @@ -81,6 +82,10 @@ static struct {
.string = "INDEX ",
.len = 6,
},
[SEARCH_STATE] = {
.string = "STATE ",
.len = 6,
},
};

static int amanda_help(struct sk_buff *skb,
Expand Down Expand Up @@ -124,7 +129,7 @@ static int amanda_help(struct sk_buff *skb,
goto out;
stop += start;

for (i = SEARCH_DATA; i <= SEARCH_INDEX; i++) {
for (i = SEARCH_DATA; i <= SEARCH_STATE; i++) {
off = skb_find_text(skb, start, stop, search[i].ts);
if (off == UINT_MAX)
continue;
Expand Down Expand Up @@ -168,7 +173,7 @@ static int amanda_help(struct sk_buff *skb,
}

static const struct nf_conntrack_expect_policy amanda_exp_policy = {
.max_expected = 3,
.max_expected = 4,
.timeout = 180,
};

Expand Down

0 comments on commit 4283428

Please sign in to comment.