aboutgitcodebugslistschat
path: root/conf.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-08-11 17:36:00 +1000
committerStefano Brivio <sbrivio@redhat.com>2023-08-13 17:30:22 +0200
commit5ed4e034b2ca3b101319b0815cc6002a2ea9ee1a (patch)
tree77ffc78b7e0b744e59a44706676548e28df2b309 /conf.c
parentae5f6c8e1b95580ca3c2f245e02efb28ad11e2aa (diff)
downloadpasst-5ed4e034b2ca3b101319b0815cc6002a2ea9ee1a.tar
passt-5ed4e034b2ca3b101319b0815cc6002a2ea9ee1a.tar.gz
passt-5ed4e034b2ca3b101319b0815cc6002a2ea9ee1a.tar.bz2
passt-5ed4e034b2ca3b101319b0815cc6002a2ea9ee1a.tar.lz
passt-5ed4e034b2ca3b101319b0815cc6002a2ea9ee1a.tar.xz
passt-5ed4e034b2ca3b101319b0815cc6002a2ea9ee1a.tar.zst
passt-5ed4e034b2ca3b101319b0815cc6002a2ea9ee1a.zip
conf: Demote overlapping port ranges error to a warning
We give a fatal error if the port ranges from any port forwarding specifiers overlap. This occurs even if those port ranges are specifically bound to different addresses, so there's not really any overlap. Right now, we can't 100% handle this case correctly, because our data structures don't have a way to represent per-address forwarding. However, there are a number of cases that will actually work just fine: e.g. mapping the same port to the same port on two different addresses (say :: and 127.0.0.1). We have long term plans to fix this properly, but that is still some time away. For the time being, demote this error to a warning so that the cases that already work will be allowed. Link: https://bugs.passt.top/show_bug.cgi?id=56 Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'conf.c')
-rw-r--r--conf.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/conf.c b/conf.c
index 0631b00..0ad6e23 100644
--- a/conf.c
+++ b/conf.c
@@ -303,7 +303,7 @@ static void conf_ports(const struct ctx *c, char optname, const char *optarg,
for (i = xrange.first; i <= xrange.last; i++) {
if (bitmap_isset(exclude, i))
- goto overlap;
+ die("Overlapping excluded ranges %s", optarg);
bitmap_set(exclude, i);
}
@@ -370,7 +370,8 @@ static void conf_ports(const struct ctx *c, char optname, const char *optarg,
for (i = orig_range.first; i <= orig_range.last; i++) {
if (bitmap_isset(fwd->map, i))
- goto overlap;
+ warn(
+"Altering mapping of already mapped port number: %s", optarg);
if (bitmap_isset(exclude, i))
continue;
@@ -406,8 +407,6 @@ enfile:
die("Can't open enough sockets for port specifier: %s", optarg);
bad:
die("Invalid port specifier %s", optarg);
-overlap:
- die("Overlapping port specifier %s", optarg);
mode_conflict:
die("Port forwarding mode '%s' conflicts with previous mode", optarg);
bind_fail: