2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-07-27 08:17:28 +00:00

Merge pull request #7566 from VersatusHPC/fix/nicutils-uuid-hardening

fix: harden nmcli connection handling against spaces in NM profile names
This commit is contained in:
Markus Hilger
2026-05-08 01:55:42 +02:00
committed by GitHub
+14 -9
View File
@@ -1643,7 +1643,7 @@ function is_nmcli_connection_exist {
str_con_name=$1
# the device str_if_name active connectin
nmcli -g NAME connection show |grep -w $str_con_name >/dev/null 2>/dev/null
nmcli -g NAME connection show |grep -wF "$str_con_name" >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
return 0
else
@@ -1874,7 +1874,7 @@ function is_connection_activate_intime {
fi
i=0
while [ $i -lt "$time_out" ]; do
con_state=$(LC_ALL=C $nmcli con show $con_name | grep -i state| awk '{print $2}');
con_state=$(LC_ALL=C $nmcli con show "$con_name" | grep -i state| awk '{print $2}');
if [ ! -z "$con_state" -a "$con_state" = "activated" ]; then
break
fi
@@ -1914,7 +1914,7 @@ function wait_nic_connect_intime {
sleep 1
i=$((i+1))
done
echo $con_name
echo "$con_name"
}
###############################################################################
@@ -2033,10 +2033,12 @@ function create_bridge_interface_nmcli {
return 1
fi
fi
xcat_slave_con_orig=$xcat_slave_con
con_use_same_dev=$(wait_nic_connect_intime $_port)
if [ "$con_use_same_dev" != "--" -a -n "$con_use_same_dev" ]; then
# Resolve to UUID since connection names can contain spaces (e.g. "Wired connection 2")
con_uuid=$($nmcli --get-values connection.uuid c show "$con_use_same_dev")
# Resolve to UUID via device — avoids spaces in names and duplicate name ambiguity
con_uuid=$(nmcli -g GENERAL.CON-UUID device show $_port)
log_info "reusing existing connection '$con_use_same_dev' ($con_uuid) on $_port as bridge slave"
cmd="$nmcli con mod $con_uuid master $ifname $_mtu connection.autoconnect-priority 9 autoconnect yes connection.autoconnect-slaves 1 connection.autoconnect-retries 0"
xcat_slave_con=$con_uuid
else
@@ -2049,7 +2051,7 @@ function create_bridge_interface_nmcli {
log_error "nmcli failed to add bridge slave $_port"
is_nmcli_connection_exist $tmp_slave_con_name
if [ $? -eq 0 ] ; then
$nmcli con modify $tmp_slave_con_name connection.id $xcat_slave_con
$nmcli con modify $tmp_slave_con_name connection.id $xcat_slave_con_orig
fi
return 1
fi
@@ -2087,7 +2089,7 @@ function create_bridge_interface_nmcli {
$nmcli con delete $xcat_slave_con
is_nmcli_connection_exist $tmp_slave_con_name
if [ $? -eq 0 ]; then
nmcli con modify $tmp_slave_con_name connection.id $xcat_slave_con
nmcli con modify $tmp_slave_con_name connection.id $xcat_slave_con_orig
fi
else
is_nmcli_connection_exist $tmp_con_name
@@ -2260,8 +2262,11 @@ function create_bond_interface_nmcli {
fi
con_use_same_dev=$(nmcli dev show $ifslave|grep GENERAL.CONNECTION|awk -F: '{print $2}'|sed 's/^[ \t]*//g')
if [ "$con_use_same_dev" != "--" -a "$con_use_same_dev" != "$xcat_slave_con" ]; then
$nmcli con down "$con_use_same_dev"
$nmcli con mod "$con_use_same_dev" autoconnect no
# Resolve to UUID via device — avoids spaces in names and duplicate name ambiguity
con_uuid=$(nmcli -g GENERAL.CON-UUID device show $ifslave)
log_info "deactivating existing connection '$con_use_same_dev' ($con_uuid) on $ifslave"
$nmcli con down $con_uuid
$nmcli con mod $con_uuid autoconnect no
$ip link set dev $ifslave down
wait_for_ifstate $ifslave DOWN 20 2
fi