X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=redirects.c;h=3c0ffada64fc8978a3aa7ff90766db652f9b295f;hb=78e134ba7cdc473e7cdf0422b863579ac700ac13;hp=4e4f5b215b12b92aebbf4a99c8dd4f4dd4a47356;hpb=cb80885eeb7d45b56651c22a7bec2bfe6a646add;p=project%2Ffirewall3.git diff --git a/redirects.c b/redirects.c index 4e4f5b2..3c0ffad 100644 --- a/redirects.c +++ b/redirects.c @@ -52,6 +52,8 @@ const struct fw3_option fw3_redirect_opts[] = { FW3_OPT("weekdays", weekdays, redirect, time.weekdays), FW3_OPT("monthdays", monthdays, redirect, time.monthdays), + FW3_OPT("mark", mark, redirect, mark), + FW3_OPT("reflection", bool, redirect, reflection), FW3_OPT("reflection_src", reflection_source, redirect, reflection_src), @@ -155,14 +157,14 @@ fw3_load_redirects(struct fw3_state *state, struct uci_package *p) continue; } else if (redir->src.set && !redir->src.any && - !(redir->_src = fw3_lookup_zone(state, redir->src.name, false))) + !(redir->_src = fw3_lookup_zone(state, redir->src.name))) { warn_elem(e, "refers to not existing zone '%s'", redir->src.name); fw3_free_redirect(redir); continue; } else if (redir->dest.set && !redir->dest.any && - !(redir->_dest = fw3_lookup_zone(state, redir->dest.name, false))) + !(redir->_dest = fw3_lookup_zone(state, redir->dest.name))) { warn_elem(e, "refers to not existing zone '%s'", redir->dest.name); fw3_free_redirect(redir); @@ -175,7 +177,7 @@ fw3_load_redirects(struct fw3_state *state, struct uci_package *p) continue; } else if (redir->ipset.set && !redir->ipset.any && - !(redir->_ipset = fw3_lookup_ipset(state, redir->ipset.name, false))) + !(redir->_ipset = fw3_lookup_ipset(state, redir->ipset.name))) { warn_elem(e, "refers to unknown ipset '%s'", redir->ipset.name); fw3_free_redirect(redir); @@ -237,6 +239,12 @@ fw3_load_redirects(struct fw3_state *state, struct uci_package *p) } } + if (list_empty(&redir->proto)) + { + warn_elem(e, "does not specify a protocol, assuming TCP+UDP"); + fw3_parse_protocol(&redir->proto, "tcpudp", true); + } + if (!valid) { fw3_free_redirect(redir); @@ -364,6 +372,14 @@ print_redirect(struct fw3_state *state, enum fw3_family family, return; } + if (!fw3_check_ipset(redir->_ipset)) + { + info(" ! Skipping due to missing ipset '%s'", + redir->_ipset->external ? + redir->_ipset->external : redir->_ipset->name); + return; + } + set(redir->_ipset->flags, family, family); } @@ -389,6 +405,7 @@ print_redirect(struct fw3_state *state, enum fw3_family family, fw3_format_mac(mac); fw3_format_time(&redir->time); + fw3_format_mark(&redir->mark); fw3_format_extra(redir->extra); fw3_format_comment(redir->name); print_target_nat(redir); @@ -402,6 +419,7 @@ print_redirect(struct fw3_state *state, enum fw3_family family, fw3_format_sport_dport(&redir->port_src, &redir->port_redir); fw3_format_mac(mac); fw3_format_time(&redir->time); + fw3_format_mark(&redir->mark); fw3_format_extra(redir->extra); fw3_format_comment(redir->name); print_target_filter(redir);