Skip to content

Commit

Permalink
Tests: Check cluster member names cannot be 'none' (stable-5.21) (#14026
Browse files Browse the repository at this point in the history
)

As we have both the password and token support in `5.21`, we can
completely backport
c49ef5f.

An additional commit ensures that also when joining cluster nodes using
the legacy password (which is still in `5.21`) the name cannot be
`none`.

This change works with the LXD snap from `5.21/edge`.
  • Loading branch information
tomponline authored Sep 2, 2024
2 parents 4b06d18 + b5a90af commit b0cf2ec
Showing 1 changed file with 34 additions and 1 deletion.
35 changes: 34 additions & 1 deletion test/suites/clustering.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1709,20 +1709,53 @@ test_clustering_join_api() {
ns2="${prefix}2"
LXD_NETNS="${ns2}" spawn_lxd "${LXD_TWO_DIR}" false

op=$(curl --unix-socket "${LXD_TWO_DIR}/unix.socket" -X PUT "lxd/1.0/cluster" -d "{\"server_name\":\"node2\",\"enabled\":true,\"member_config\":[{\"entity\": \"storage-pool\",\"name\":\"data\",\"key\":\"source\",\"value\":\"\"}],\"server_address\":\"10.1.1.102:8443\",\"cluster_address\":\"10.1.1.101:8443\",\"cluster_certificate\":\"${cert}\",\"cluster_password\":\"sekret\"}" | jq -r .operation)
# Check a join token cannot be created for the reserved name 'none'
! lxc cluster add none --quiet || false

# Check a server with the name 'valid' cannot be joined when modifying the token.
# Therefore replace the valid name in the token with 'none'.
malicious_token="$(lxc cluster add valid --quiet | base64 -d | jq '.server_name |= "none"' | base64 --wrap=0)"
op=$(curl --unix-socket "${LXD_TWO_DIR}/unix.socket" -X PUT "lxd/1.0/cluster" -d "{\"server_name\":\"valid\",\"enabled\":true,\"member_config\":[{\"entity\": \"storage-pool\",\"name\":\"data\",\"key\":\"source\",\"value\":\"\"}],\"server_address\":\"10.1.1.102:8443\",\"cluster_address\":\"10.1.1.101:8443\",\"cluster_certificate\":\"${cert}\",\"cluster_token\":\"${malicious_token}\"}" | jq -r .operation)
[ "$(curl --unix-socket "${LXD_TWO_DIR}/unix.socket" "lxd${op}/wait" | jq '.error_code')" = "403" ]

# Check that the server cannot be joined using a valid token by changing it's name to 'none'.
token="$(lxc cluster add valid2 --quiet)"
[ "$(curl --unix-socket "${LXD_TWO_DIR}/unix.socket" -X PUT "lxd/1.0/cluster" -d "{\"server_name\":\"none\",\"enabled\":true,\"member_config\":[{\"entity\": \"storage-pool\",\"name\":\"data\",\"key\":\"source\",\"value\":\"\"}],\"server_address\":\"10.1.1.102:8443\",\"cluster_address\":\"10.1.1.101:8443\",\"cluster_certificate\":\"${cert}\",\"cluster_token\":\"${token}\"}" | jq -r '.error_code')" = "400" ]

# Check the server can be joined.
token="$(lxc cluster add node2 --quiet)"
op=$(curl --unix-socket "${LXD_TWO_DIR}/unix.socket" -X PUT "lxd/1.0/cluster" -d "{\"server_name\":\"node2\",\"enabled\":true,\"member_config\":[{\"entity\": \"storage-pool\",\"name\":\"data\",\"key\":\"source\",\"value\":\"\"}],\"server_address\":\"10.1.1.102:8443\",\"cluster_address\":\"10.1.1.101:8443\",\"cluster_certificate\":\"${cert}\",\"cluster_token\":\"${token}\"}" | jq -r .operation)
curl --unix-socket "${LXD_TWO_DIR}/unix.socket" "lxd${op}/wait"

LXD_DIR="${LXD_ONE_DIR}" lxc cluster show node2 | grep -q "message: Fully operational"

setup_clustering_netns 3
LXD_THREE_DIR=$(mktemp -d -p "${TEST_DIR}" XXX)
chmod +x "${LXD_THREE_DIR}"
ns3="${prefix}3"
LXD_NETNS="${ns3}" spawn_lxd "${LXD_THREE_DIR}" false

# Check the server cannot be joined using password by changing it's name to 'none'.
[ "$(curl --unix-socket "${LXD_THREE_DIR}/unix.socket" -X PUT "lxd/1.0/cluster" -d "{\"server_name\":\"none\",\"enabled\":true,\"member_config\":[{\"entity\": \"storage-pool\",\"name\":\"data\",\"key\":\"source\",\"value\":\"\"}],\"server_address\":\"10.1.1.103:8443\",\"cluster_address\":\"10.1.1.101:8443\",\"cluster_certificate\":\"${cert}\",\"cluster_password\":\"sekret\"}" | jq -r '.error_code')" = "400" ]

# Check the server can be joined using password.
op=$(curl --unix-socket "${LXD_THREE_DIR}/unix.socket" -X PUT "lxd/1.0/cluster" -d "{\"server_name\":\"node3\",\"enabled\":true,\"member_config\":[{\"entity\": \"storage-pool\",\"name\":\"data\",\"key\":\"source\",\"value\":\"\"}],\"server_address\":\"10.1.1.103:8443\",\"cluster_address\":\"10.1.1.101:8443\",\"cluster_certificate\":\"${cert}\",\"cluster_password\":\"sekret\"}" | jq -r .operation)
curl --unix-socket "${LXD_THREE_DIR}/unix.socket" "lxd${op}/wait"

LXD_DIR="${LXD_ONE_DIR}" lxc cluster show node3 | grep -q "message: Fully operational"

LXD_DIR="${LXD_THREE_DIR}" lxd shutdown
LXD_DIR="${LXD_TWO_DIR}" lxd shutdown
LXD_DIR="${LXD_ONE_DIR}" lxd shutdown
sleep 0.5
rm -f "${LXD_THREE_DIR}/unix.socket"
rm -f "${LXD_TWO_DIR}/unix.socket"
rm -f "${LXD_ONE_DIR}/unix.socket"

teardown_clustering_netns
teardown_clustering_bridge

kill_lxd "${LXD_THREE_DIR}"
kill_lxd "${LXD_TWO_DIR}"
kill_lxd "${LXD_ONE_DIR}"
}
Expand Down

0 comments on commit b0cf2ec

Please sign in to comment.