diff --git a/ipset.spec b/ipset.spec index 8bdf960..daa5f6a 100644 --- a/ipset.spec +++ b/ipset.spec @@ -3,7 +3,7 @@ Name: ipset Version: 7.11 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Manage Linux IP sets License: GPLv2 @@ -170,6 +170,9 @@ fi %changelog +* Mon Jan 31 2022 Phil Sutter - 7.11-7 +- Fix for bad performance restoring large sets which are in use + * Mon Nov 08 2021 Phil Sutter - 7.11-6 - Sync ipset.service with RHEL8, fix the required package name diff --git a/ipset.start-stop b/ipset.start-stop index 0c493dc..377beed 100644 --- a/ipset.start-stop +++ b/ipset.start-stop @@ -257,7 +257,13 @@ load() { CLEAN_FILES="${CLEAN_FILES} ${mangled}" chmod 600 "${mangled}" - awk '/^(add|create) ('"${conflicts}"')/ { printf "%s ",$1; system("echo '${salt}'" $2 " | md5sum | head -c31"); $1=""; $2=""; print; next} {print}' "${merged}" > "${mangled}" + cat "${merged}" > "${mangled}" + IFS='|' + for set in ${conflicts}; do + new_name=$(echo "${salt}${set}" | md5sum | head -c31) + echo "s/^(add|create) $set /\1 $new_name /" + done | sed -i -r -f - "${mangled}" + unset IFS if ! ipset_restore "${mangled}"; then err "Failed to restore configured sets" exit 1