From: Martin Schwenke Date: Thu, 18 Apr 2024 04:13:11 +0000 (+1000) Subject: ctdb-scripts: Do not de-duplicate the interfaces list X-Git-Url: http://git.samba.org/?p=samba.git;a=commitdiff_plain;h=HEAD;ds=inline ctdb-scripts: Do not de-duplicate the interfaces list Using xargs with sort -u to de-duplicate this list was my idea and causes a couple of things to go wrong. The use of xargs causes double-quotes to be lost. The resulting $public_ifaces value also contains newlines. The newlines could be removed with an additional xargs at the end of the pipeline... but that would add an extra level of quote stripping. I have unsuccessfully tried to find an alternative, but still elegant, command pipeline that de-duplicates the list, while maintaining quoting. So, just drop the de-duplication. This might make interface_ifindex_exists_with_options() slightly less efficient. However, that function walks the whole list, only terminating early when a match is found on both interface and options, so at least it will be correct. Include an extra testcase. Signed-off-by: Martin Schwenke Reviewed-by: Andrew Bartlett Autobuild-User(master): Martin Schwenke Autobuild-Date(master): Thu Apr 18 09:08:34 UTC 2024 on atb-devel-224 --- diff --git a/ctdb/config/events/legacy/50.samba.script b/ctdb/config/events/legacy/50.samba.script index 90de6a3f31b..c9d34cd2245 100755 --- a/ctdb/config/events/legacy/50.samba.script +++ b/ctdb/config/events/legacy/50.samba.script @@ -40,7 +40,6 @@ generate_smb_interfaces_config() if [ -n "$CTDB_SAMBA_INTERFACES_EXTRA" ]; then public_ifaces="$public_ifaces $CTDB_SAMBA_INTERFACES_EXTRA" fi - public_ifaces=$(echo "$public_ifaces" | xargs -n 1 | sort -u) cat < "$CTDB_SAMBA_INTERFACES_FILE" bind interfaces only = yes diff --git a/ctdb/tests/UNIT/eventscripts/50.samba.startup.012.sh b/ctdb/tests/UNIT/eventscripts/50.samba.startup.012.sh new file mode 100755 index 00000000000..fb7627c5898 --- /dev/null +++ b/ctdb/tests/UNIT/eventscripts/50.samba.startup.012.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +. "${TEST_SCRIPTS_DIR}/unit.sh" + +define_test "startup, with interfaces list generation" + +setup + +interfaces_file="${CTDB_TEST_TMP_DIR}/interfaces.conf" + +setup_script_options <