From 8fc64ebacb8e9518af06fc335f0b0fd5c66f2279 Mon Sep 17 00:00:00 2001 From: shum Date: Thu, 22 Oct 2026 05:34:15 +0000 Subject: [PATCH] scripts: delete duplicate egress jumps by rule --- scripts/store-service/egress.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/store-service/egress.sh b/scripts/store-service/egress.sh index cc0c52e007..d7ae809efe 100755 --- a/scripts/store-service/egress.sh +++ b/scripts/store-service/egress.sh @@ -277,18 +277,18 @@ chain_rules() { } # A jump must be the first rule of its parent, or a rule above it could accept what the chain refuses. -# Its other copies are deleted by number, counted after the insert. +# Its copies are deleted by their text in the same commit, since another tool may insert rules +# between this read and the restore and shift every number. jump_restore() { - local tool=$1 parent match jump jumps rules position - local -a copies + local tool=$1 parent match jump jumps rules copies jumps=$(jumps_for "$tool") while read -r parent match; do jump="-A $parent $match -j $CHAIN" rules=$(chain_rules "$tool" "$parent") [[ ${rules%%$'\n'*} == "$jump" ]] && continue - mapfile -t copies < <(grep -nxF -- "$jump" <<<"$rules" | cut -d: -f1 | sort -rn) + copies=$(grep -cxF -- "$jump" <<<"$rules" || true) + for ((; copies > 0; copies--)); do echo "-D $parent $match -j $CHAIN"; done echo "-I $parent 1 $match -j $CHAIN" - for position in "${copies[@]}"; do echo "-D $parent $((position + 1))"; done done <<<"$jumps" }