96 lines
2.5 KiB
Bash
Executable file
96 lines
2.5 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
. ./test.common
|
|
|
|
test_start "NTP authentication"
|
|
|
|
server_conf="keyfile tmp/server.keys"
|
|
client_conf="keyfile tmp/client.keys"
|
|
|
|
cat > tmp/server.keys <<-EOF
|
|
1 MD5 HEX:6B5D3C6A2E4A74775E4F6F3B7A35453E6E5C5F302D783D2979505C663C295A5E
|
|
2 MD5 HEX:6B5D3C6A2E4A74775E4F6F3B7A35453E6E5C5F302D783D2979505C663C295A5E
|
|
3 MD5 HEX:6B5D3C6A2E4A74775E4F6F3B7A35453E6E5C5F302D783D2979505C663C295A5E
|
|
4 MD5 HEX:6B5D3C6A2E4A74775E4F6F3B7A35453E6E5C5F302D783D2979505C663C295A5E
|
|
EOF
|
|
|
|
cat > tmp/client.keys <<-EOF
|
|
1 k]<j.Jtw^Oo;z5E>n\_0-x=)yP\f<)Z^
|
|
2 ASCII:k]<j.Jtw^Oo;z5E>n\_0-x=)yP\f<)Z^
|
|
3 MD5 ASCII:k]<j.Jtw^Oo;z5E>n\_0-x=)yP\f<)Z^
|
|
4 MD5 HEX:6B5D3C6A2E4A74775E4F6F3B7A35453E6E5C5F302D783D2979505C663C295A5E
|
|
EOF
|
|
|
|
keys=4
|
|
|
|
types="MD5"
|
|
check_config_h 'FEAT_SECHASH 1' && types="$types SHA1 SHA256 SHA384 SHA512"
|
|
check_config_h 'HAVE_CMAC 1' && types="$types AES128 AES256"
|
|
|
|
for type in $types; do
|
|
keys=$[$keys + 1]
|
|
case $type in
|
|
AES128) length=16;;
|
|
AES256) length=32;;
|
|
*) length=$[$RANDOM % 32 + 1];;
|
|
esac
|
|
|
|
key=$(echo $keys $type HEX:$(tr -c -d '0-9A-F' < /dev/urandom 2> /dev/null | \
|
|
head -c $[$length * 2]))
|
|
echo "$key" >> tmp/server.keys
|
|
echo "$key" >> tmp/client.keys
|
|
done
|
|
|
|
for version in 3 4; do
|
|
for key in $(seq $keys); do
|
|
client_server_options="version $version key $key"
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_packet_interval || test_fail
|
|
check_sync || test_fail
|
|
done
|
|
done
|
|
|
|
server_conf=""
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
# This check must fail as the server doesn't know the key
|
|
check_sync && test_fail
|
|
check_packet_interval || test_fail
|
|
|
|
server_conf="keyfile tmp/server.keys"
|
|
client_conf=""
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
# This check must fail as the client doesn't know the key
|
|
check_sync && test_fail
|
|
check_packet_interval || test_fail
|
|
|
|
client_conf="keyfile tmp/client.keys"
|
|
clients=2
|
|
peers=2
|
|
max_sync_time=500
|
|
base_delay="$default_base_delay (* -1 (equal 0.1 from 3) (equal 0.1 to 1))"
|
|
|
|
for versions in "3 3" "3 4" "4 3" "4 4"; do
|
|
for key in 1 $keys; do
|
|
client_lpeer_options="version ${versions% *} key $key"
|
|
client_rpeer_options="version ${versions#* } key $key"
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_sync || test_fail
|
|
done
|
|
done
|
|
|
|
client_lpeer_options="key 1"
|
|
client_rpeer_options="key 2"
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
# This check must fail as the peers are using different keys"
|
|
check_sync && test_fail
|
|
|
|
test_pass
|