|
| 1 | +From patchwork Fri Feb 3 14:25:45 2017 |
| 2 | +Content-Type: text/plain; charset="utf-8" |
| 3 | +MIME-Version: 1.0 |
| 4 | +Content-Transfer-Encoding: 7bit |
| 5 | +Subject: [nftables] statement: fix print of ip dnat address |
| 6 | +From: Florian Westphal < [email protected]> |
| 7 | +X-Patchwork-Id: 723692 |
| 8 | +X-Patchwork-Delegate: [email protected] |
| 9 | + |
| 10 | + |
| 11 | +Cc: Florian Westphal < [email protected]> |
| 12 | +Date: Fri, 3 Feb 2017 15:25:45 +0100 |
| 13 | + |
| 14 | +the change causes non-ipv6 addresses to not be printed at all in case |
| 15 | +a nfproto was given. |
| 16 | + |
| 17 | +Also add a test case to catch this. |
| 18 | + |
| 19 | +Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1117 |
| 20 | +Fixes: 5ab0e10fc6e2c22363a ("src: support for RFC2732 IPv6 address format with brackets") |
| 21 | +Signed-off-by: Florian Westphal < [email protected]> |
| 22 | +Acked-by: Pablo Neira Ayuso < [email protected]> |
| 23 | +--- |
| 24 | + src/statement.c | 2 ++ |
| 25 | + tests/py/ip/dnat.t | 1 + |
| 26 | + tests/py/ip/dnat.t.payload.ip | 12 ++++++++++++ |
| 27 | + 3 files changed, 15 insertions(+) |
| 28 | + |
| 29 | +diff --git a/src/statement.c b/src/statement.c |
| 30 | +index 9cdabbb979e8..3beb86ab4263 100644 |
| 31 | +--- a/src/statement.c |
| 32 | ++++ b/src/statement.c |
| 33 | +@@ -508,6 +508,8 @@ static void nat_stmt_print(const struct stmt *stmt) |
| 34 | + printf("]-["); |
| 35 | + expr_print(stmt->nat.addr->right); |
| 36 | + printf("]"); |
| 37 | ++ } else { |
| 38 | ++ expr_print(stmt->nat.addr); |
| 39 | + } |
| 40 | + } else { |
| 41 | + expr_print(stmt->nat.addr); |
| 42 | +diff --git a/tests/py/ip/dnat.t b/tests/py/ip/dnat.t |
| 43 | +index da00106edbb4..089017c84704 100644 |
| 44 | +--- a/tests/py/ip/dnat.t |
| 45 | ++++ b/tests/py/ip/dnat.t |
| 46 | +@@ -7,6 +7,7 @@ iifname "eth0" tcp dport != 80-90 dnat to 192.168.3.2;ok |
| 47 | + iifname "eth0" tcp dport {80, 90, 23} dnat to 192.168.3.2;ok |
| 48 | + iifname "eth0" tcp dport != {80, 90, 23} dnat to 192.168.3.2;ok |
| 49 | + iifname "eth0" tcp dport != 23-34 dnat to 192.168.3.2;ok |
| 50 | ++iifname "eth0" tcp dport 81 dnat to 192.168.3.2:8080;ok |
| 51 | + |
| 52 | + dnat to ct mark map { 0x00000014 : 1.2.3.4};ok |
| 53 | + dnat to ct mark . ip daddr map { 0x00000014 . 1.1.1.1 : 1.2.3.4};ok |
| 54 | +diff --git a/tests/py/ip/dnat.t.payload.ip b/tests/py/ip/dnat.t.payload.ip |
| 55 | +index 66926990d880..7a7f5a82dd5a 100644 |
| 56 | +--- a/tests/py/ip/dnat.t.payload.ip |
| 57 | ++++ b/tests/py/ip/dnat.t.payload.ip |
| 58 | +@@ -60,6 +60,18 @@ ip test-ip4 prerouting |
| 59 | + [ immediate reg 1 0x0203a8c0 ] |
| 60 | + [ nat dnat ip addr_min reg 1 addr_max reg 0 ] |
| 61 | + |
| 62 | ++# iifname "eth0" tcp dport 81 dnat to 192.168.3.2:8080 |
| 63 | ++ip test-ip4 prerouting |
| 64 | ++ [ meta load iifname => reg 1 ] |
| 65 | ++ [ cmp eq reg 1 0x30687465 0x00000000 0x00000000 0x00000000 ] |
| 66 | ++ [ payload load 1b @ network header + 9 => reg 1 ] |
| 67 | ++ [ cmp eq reg 1 0x00000006 ] |
| 68 | ++ [ payload load 2b @ transport header + 2 => reg 1 ] |
| 69 | ++ [ cmp eq reg 1 0x00005100 ] |
| 70 | ++ [ immediate reg 1 0x0203a8c0 ] |
| 71 | ++ [ immediate reg 2 0x0000901f ] |
| 72 | ++ [ nat dnat ip addr_min reg 1 addr_max reg 0 proto_min reg 2 proto_max reg 0 ] |
| 73 | ++ |
| 74 | + # dnat to ct mark map { 0x00000014 : 1.2.3.4} |
| 75 | + __map%d test-ip4 b |
| 76 | + __map%d test-ip4 0 |
0 commit comments