redirects: properly handle src_dport in SNAT rules
authorHans Dedecker <dedeckeh@gmail.com>
Thu, 6 Dec 2018 17:03:06 +0000 (18:03 +0100)
committerHans Dedecker <dedeckeh@gmail.com>
Thu, 6 Dec 2018 20:16:03 +0000 (21:16 +0100)
In case of SNAT rules the src_dport parameter is used both as a rewrite
parameter as well as a matching parameter which is not the expected
behavior.
The latter is caused by port_redir being set to src_dport in case dest_port
parameter is not.
As this logic is in place to mimic the old shell script based firewall
behavior for DNAT only set port_redir in case the redirect rule is
a DNAT rule.

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Acked-by: Jo-Philipp Wich <jo@mein.io>
redirects.c

index 6cd09f16143d84d3737c3157e4c3b23b1e280f94..ab95395ca6afda4f02227e4611e687faabb4673c 100644 (file)
@@ -350,7 +350,7 @@ check_redirect(struct fw3_state *state, struct fw3_redirect *redir, struct uci_e
        if (!valid)
                return false;
 
-       if (!redir->port_redir.set)
+       if (redir->target == FW3_FLAG_DNAT && !redir->port_redir.set)
                redir->port_redir = redir->port_dest;
 
        return true;