diff options
| author | Christian Breunig <christian@breunig.cc> | 2026-04-01 21:18:55 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-01 21:18:55 +0200 |
| commit | 2ad37c4a8a963651bbc183d24662f2571c4682c6 (patch) | |
| tree | 3268124b8de81434cc07c807f4c5d1d773367a43 | |
| parent | f1a412985288730cc65a250da2bd4f5b87ade43f (diff) | |
| parent | c036e37357141bb71a38df174e21101151e52620 (diff) | |
| download | vyos-1x-2ad37c4a8a963651bbc183d24662f2571c4682c6.tar.gz vyos-1x-2ad37c4a8a963651bbc183d24662f2571c4682c6.zip | |
Merge pull request #5098 from alexandr-san4ez/T8275-current
firewall: T8275: Resolve migration issue for 'weekdays' option from 1.3.8
| -rwxr-xr-x | python/vyos/firewall.py | 17 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_firewall.py | 54 |
2 files changed, 69 insertions, 2 deletions
diff --git a/python/vyos/firewall.py b/python/vyos/firewall.py index 04e59eb25..c655e2de8 100755 --- a/python/vyos/firewall.py +++ b/python/vyos/firewall.py @@ -662,6 +662,19 @@ def parse_tcp_flags(flags): exclude = list(flags['not']) if 'not' in flags else [] return f'tcp flags & ({"|".join(include + exclude)}) == {"|".join(include) if include else "0x0"}' +def expand_weekday(abbrev: str) -> str: + mapping = { + 'mon': 'monday', + 'tue': 'tuesday', + 'wed': 'wednesday', + 'thu': 'thursday', + 'fri': 'friday', + 'sat': 'saturday', + 'sun': 'sunday', + } + return mapping.get(abbrev.lower(), abbrev).lower() + + def parse_time(time): out = [] if 'startdate' in time: @@ -679,7 +692,7 @@ def parse_time(time): if 'stoptime' in time and 'stopdate' not in time: out.append(f'hour < "{time["stoptime"]}"') if 'weekdays' in time: - days = time['weekdays'].split(",") - out_days = [f'"{day}"' for day in days if day[0] != '!'] + days = [day.strip() for day in time['weekdays'].split(",") if day] + out_days = [f'"{expand_weekday(day).title()}"' for day in days if day[0] != '!'] out.append(f'day {{{",".join(out_days)}}}') return " ".join(out) diff --git a/smoketest/scripts/cli/test_firewall.py b/smoketest/scripts/cli/test_firewall.py index cc9289d22..caa36e887 100755 --- a/smoketest/scripts/cli/test_firewall.py +++ b/smoketest/scripts/cli/test_firewall.py @@ -292,6 +292,33 @@ class TestFirewall(VyOSUnitTestSHIM.TestCase): self.verify_nftables(nftables_search, 'ip vyos_filter') + def test_ipv4_time_weekdays(self): + name = 'v4-time-weekdays-test' + rule_base = ['firewall', 'ipv4', 'name', name, 'rule', '10'] + + self.cli_set(rule_base + ['action', 'accept']) + self.cli_set(rule_base + ['time', 'weekdays', 'mon,friday']) + + self.cli_commit() + + nftables_search = [ + [f'chain NAME_{name}'], + ['meta day { "Monday", "Friday" }'], + ] + + self.verify_nftables(nftables_search, 'ip vyos_filter') + + self.cli_set(rule_base + ['time', 'weekdays', 'Monday, Sat']) + + self.cli_commit() + + nftables_search = [ + [f'chain NAME_{name}'], + ['meta day { "Monday", "Saturday" }'], + ] + + self.verify_nftables(nftables_search, 'ip vyos_filter') + def test_ipv4_advanced(self): name = 'smoketest-adv' name2 = 'smoketest-adv2' @@ -540,6 +567,33 @@ class TestFirewall(VyOSUnitTestSHIM.TestCase): self.verify_nftables(nftables_search, 'ip6 vyos_filter') + def test_ipv6_time_weekdays(self): + name = 'v6-time-weekdays-test' + rule_base = ['firewall', 'ipv6', 'name', name, 'rule', '10'] + + self.cli_set(rule_base + ['action', 'accept']) + self.cli_set(rule_base + ['time', 'weekdays', 'mon,friday']) + + self.cli_commit() + + nftables_search = [ + [f'chain NAME6_{name}'], + ['meta day { "Monday", "Friday" }'], + ] + + self.verify_nftables(nftables_search, 'ip6 vyos_filter') + + self.cli_set(rule_base + ['time', 'weekdays', 'Monday, Sat']) + + self.cli_commit() + + nftables_search = [ + [f'chain NAME6_{name}'], + ['meta day { "Monday", "Saturday" }'], + ] + + self.verify_nftables(nftables_search, 'ip6 vyos_filter') + def test_ipv6_advanced(self): name = 'v6-smoke-adv' |
