mirror of
https://github.com/vyos/vyos-build.git
synced 2025-10-01 20:28:40 +02:00
Merge pull request #501 from nicolas-fort/T6009-T6019
T6009-6019: fix hour decoding when timezone offset is negative; bump libnftnl and nftables version.
This commit is contained in:
commit
2ae9dce6d5
4
packages/netfilter/.gitignore
vendored
4
packages/netfilter/.gitignore
vendored
@ -1,3 +1,3 @@
|
||||
pkg-libnftnl/
|
||||
pkg-nftables/
|
||||
/pkg-libnftnl/
|
||||
/pkg-nftables/
|
||||
|
||||
|
||||
6
packages/netfilter/Jenkinsfile
vendored
6
packages/netfilter/Jenkinsfile
vendored
@ -22,17 +22,17 @@
|
||||
def pkgList = [
|
||||
// libnftnl
|
||||
['name': 'pkg-libnftnl',
|
||||
'scmCommit': 'debian/1.2.6-1',
|
||||
'scmCommit': 'debian/1.2.6-2',
|
||||
'scmUrl': 'https://salsa.debian.org/pkg-netfilter-team/pkg-libnftnl.git',
|
||||
'buildCmd': 'sudo mk-build-deps --install --tool "apt-get --yes --no-install-recommends"; dpkg-buildpackage -uc -us -tc -b'],
|
||||
|
||||
// nftables
|
||||
['name': 'pkg-nftables',
|
||||
'scmCommit': 'debian/1.0.8-1',
|
||||
'scmCommit': 'debian/1.0.9-1',
|
||||
'scmUrl': 'https://salsa.debian.org/pkg-netfilter-team/pkg-nftables.git',
|
||||
'buildCmd': '''sudo dpkg -i ../libnftnl*.deb;
|
||||
sudo mk-build-deps --install --tool "apt-get --yes --no-install-recommends";
|
||||
dpkg-buildpackage -uc -us -tc -b'''],
|
||||
../build.py'''],
|
||||
]
|
||||
|
||||
// Start package build using library function from https://github.com/vyos/vyos-build
|
||||
|
||||
55
packages/netfilter/build.py
Executable file
55
packages/netfilter/build.py
Executable file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from pathlib import Path
|
||||
from shutil import copy as copy_file
|
||||
from subprocess import run
|
||||
|
||||
|
||||
# copy patches
|
||||
def apply_deb_patches() -> None:
|
||||
"""Apply patches to sources directory
|
||||
"""
|
||||
package_dir: str = Path.cwd().name
|
||||
current_dir: str = Path.cwd().as_posix()
|
||||
patches_dir = Path(f'../patches/{package_dir}')
|
||||
patches_dir_dst = Path(f'{current_dir}/debian/patches')
|
||||
if not patches_dir_dst.exists():
|
||||
patches_dir_dst.mkdir(parents = True)
|
||||
if patches_dir.exists():
|
||||
patches_list = list(patches_dir.iterdir())
|
||||
patches_list.sort()
|
||||
series_file = Path(f'{patches_dir_dst.as_posix()}/series')
|
||||
if series_file.exists():
|
||||
series_data: str = series_file.read_text()
|
||||
else:
|
||||
|
||||
series_data = ''
|
||||
for patch_file in patches_list:
|
||||
print(f'Applying patch: {patch_file.name}')
|
||||
copy_file(patch_file, f'{patches_dir_dst.as_posix()}')
|
||||
series_data = f'{series_data}\n{patch_file.name}'
|
||||
series_file.write_text(series_data)
|
||||
|
||||
|
||||
def build_package() -> bool:
|
||||
"""Build a package
|
||||
Returns:
|
||||
bool: build status
|
||||
"""
|
||||
build_cmd: list[str] = ['dpkg-buildpackage', '-uc', '-us', '-tc', '-b']
|
||||
build_status: int = run(build_cmd).returncode
|
||||
|
||||
if build_status:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
# build a package
|
||||
if __name__ == '__main__':
|
||||
apply_deb_patches()
|
||||
|
||||
if not build_package():
|
||||
exit(1)
|
||||
|
||||
exit()
|
||||
|
||||
@ -0,0 +1,118 @@
|
||||
From d392ddf243dcbf8a34726c777d2c669b1e8bfa85 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Westphal <fw@strlen.de>
|
||||
Date: Thu, 2 Nov 2023 15:34:13 +0100
|
||||
Subject: meta: fix hour decoding when timezone offset is negative
|
||||
|
||||
Brian Davidson says:
|
||||
|
||||
meta hour rules don't display properly after being created when the
|
||||
hour is on or after 00:00 UTC. The netlink debug looks correct for
|
||||
seconds past midnight UTC, but displaying the rules looks like an
|
||||
overflow or a byte order problem. I am in UTC-0400, so today, 20:00
|
||||
and later exhibits the problem, while 19:00 and earlier hours are
|
||||
fine.
|
||||
|
||||
meta.c only ever worked when the delta to UTC is positive.
|
||||
We need to add in case the second counter turns negative after
|
||||
offset adjustment.
|
||||
|
||||
Also add a test case for this.
|
||||
|
||||
Fixes: f8f32deda31d ("meta: Introduce new conditions 'time', 'day' and 'hour'")
|
||||
Reported-by: Brian Davidson <davidson.brian@gmail.com>
|
||||
Signed-off-by: Florian Westphal <fw@strlen.de>
|
||||
---
|
||||
src/meta.c | 11 ++++-
|
||||
.../shell/testcases/listing/dumps/meta_time.nodump | 0
|
||||
tests/shell/testcases/listing/meta_time | 52 ++++++++++++++++++++++
|
||||
3 files changed, 61 insertions(+), 2 deletions(-)
|
||||
create mode 100644 tests/shell/testcases/listing/dumps/meta_time.nodump
|
||||
create mode 100755 tests/shell/testcases/listing/meta_time
|
||||
|
||||
diff --git a/src/meta.c b/src/meta.c
|
||||
index b578d5e2..7846aefe 100644
|
||||
--- a/src/meta.c
|
||||
+++ b/src/meta.c
|
||||
@@ -495,9 +495,16 @@ static void hour_type_print(const struct expr *expr, struct output_ctx *octx)
|
||||
|
||||
/* Obtain current tm, so that we can add tm_gmtoff */
|
||||
ts = time(NULL);
|
||||
- if (ts != ((time_t) -1) && localtime_r(&ts, &cur_tm))
|
||||
- seconds = (seconds + cur_tm.tm_gmtoff) % SECONDS_PER_DAY;
|
||||
+ if (ts != ((time_t) -1) && localtime_r(&ts, &cur_tm)) {
|
||||
+ int32_t adj = seconds + cur_tm.tm_gmtoff;
|
||||
|
||||
+ if (adj < 0)
|
||||
+ adj += SECONDS_PER_DAY;
|
||||
+ else if (adj >= SECONDS_PER_DAY)
|
||||
+ adj -= SECONDS_PER_DAY;
|
||||
+
|
||||
+ seconds = adj;
|
||||
+ }
|
||||
minutes = seconds / 60;
|
||||
seconds %= 60;
|
||||
hours = minutes / 60;
|
||||
diff --git a/tests/shell/testcases/listing/dumps/meta_time.nodump b/tests/shell/testcases/listing/dumps/meta_time.nodump
|
||||
new file mode 100644
|
||||
index 00000000..e69de29b
|
||||
diff --git a/tests/shell/testcases/listing/meta_time b/tests/shell/testcases/listing/meta_time
|
||||
new file mode 100755
|
||||
index 00000000..a9761998
|
||||
--- /dev/null
|
||||
+++ b/tests/shell/testcases/listing/meta_time
|
||||
@@ -0,0 +1,52 @@
|
||||
+#!/bin/bash
|
||||
+
|
||||
+set -e
|
||||
+
|
||||
+TMP1=$(mktemp)
|
||||
+TMP2=$(mktemp)
|
||||
+
|
||||
+cleanup()
|
||||
+{
|
||||
+ rm -f "$TMP1"
|
||||
+ rm -f "$TMP2"
|
||||
+}
|
||||
+
|
||||
+check_decode()
|
||||
+{
|
||||
+ TZ=$1 $NFT list chain t c | grep meta > "$TMP2"
|
||||
+ diff -u "$TMP1" "$TMP2"
|
||||
+}
|
||||
+
|
||||
+trap cleanup EXIT
|
||||
+
|
||||
+$NFT -f - <<EOF
|
||||
+table t {
|
||||
+ chain c {
|
||||
+ }
|
||||
+}
|
||||
+EOF
|
||||
+
|
||||
+for i in $(seq -w 0 23); do
|
||||
+ TZ=UTC $NFT add rule t c meta hour "$i:00"-"$i:59"
|
||||
+done
|
||||
+
|
||||
+# Check decoding in UTC, this mirrors 1:1 what should have been added.
|
||||
+for i in $(seq 0 23); do
|
||||
+ printf "\t\tmeta hour \"%02d:%02d\"-\"%02d:%02d\"\n" $i 0 $i 59 >> "$TMP1"
|
||||
+done
|
||||
+
|
||||
+check_decode UTC
|
||||
+
|
||||
+printf "\t\tmeta hour \"%02d:%02d\"-\"%02d:%02d\"\n" 23 0 23 59 > "$TMP1"
|
||||
+for i in $(seq 0 22); do
|
||||
+ printf "\t\tmeta hour \"%02d:%02d\"-\"%02d:%02d\"\n" $i 0 $i 59 >> "$TMP1"
|
||||
+done
|
||||
+check_decode UTC+1
|
||||
+
|
||||
+printf "\t\tmeta hour \"%02d:%02d\"-\"%02d:%02d\"\n" 1 0 1 59 > "$TMP1"
|
||||
+for i in $(seq 2 23); do
|
||||
+ printf "\t\tmeta hour \"%02d:%02d\"-\"%02d:%02d\"\n" $i 0 $i 59 >> "$TMP1"
|
||||
+done
|
||||
+printf "\t\tmeta hour \"%02d:%02d\"-\"%02d:%02d\"\n" 0 0 0 59 >> "$TMP1"
|
||||
+
|
||||
+check_decode UTC-1
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user