summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2017-06-07 16:18:30 +0200
committerJo-Philipp Wich <jo@mein.io>2018-02-13 16:19:22 +0100
commit359adcfc54c0b1f5c8597658bc219dae57b9f082 (patch)
tree82ae6d289ce2f6d930245a60391b08b9666098b3
parent392811a5c468960fa9c178f8de31560224ee7069 (diff)
downloadfirewall3-359adcfc54c0b1f5c8597658bc219dae57b9f082.tar.gz
options: emit an empty address item when resolving networks fails
Adjust fw3_parse_network() to emit an empty address item with .set = false, .resolved = true when we failed to resolve the network name into any ip address. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--options.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/options.c b/options.c
index f686cf0..6d2a283 100644
--- a/options.c
+++ b/options.c
@@ -342,19 +342,31 @@ fw3_parse_network(void *ptr, const char *val, bool is_list)
struct fw3_device dev = { };
struct fw3_address *addr, *tmp;
LIST_HEAD(addr_list);
+ int n_addrs;
if (!fw3_parse_address(ptr, val, is_list))
{
if (!fw3_parse_device(&dev, val, false))
return false;
- fw3_ubus_address(&addr_list, dev.name);
+ n_addrs = fw3_ubus_address(&addr_list, dev.name);
+
list_for_each_entry(addr, &addr_list, list)
{
addr->invert = dev.invert;
addr->resolved = true;
}
+ /* add an empty address member with .set = false, .resolved = true
+ * to signal resolving failure to callers */
+ if (n_addrs == 0)
+ {
+ tmp = fw3_alloc(sizeof(*tmp));
+ tmp->resolved = true;
+
+ list_add_tail(&tmp->list, &addr_list);
+ }
+
if (is_list)
{
list_splice_tail(&addr_list, ptr);