diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index a8661e93..26f83429 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -45,11 +45,11 @@ include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.am.cmake) set(EXAMPLES ${noinst_PROGRAMS}) foreach(example ${EXAMPLES}) - add_executable(example-${example} ${example}.c) - list(APPEND EXAMPLE_TARGETS example-${example}) + add_executable(${example} ${example}.c) + list(APPEND EXAMPLE_TARGETS ${example}) # to find generated header - target_include_directories(example-${example} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../src ../src) - target_link_libraries(example-${example} ${LIB_STATIC} ${LIBRARIES}) + target_include_directories(${example} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../src ../src) + target_link_libraries(${example} ${LIB_STATIC} ${LIBRARIES}) endforeach() add_target_to_copy_dependencies( diff --git a/src/libssh2_setup.h b/src/libssh2_setup.h index 638e6c4a..a110d619 100644 --- a/src/libssh2_setup.h +++ b/src/libssh2_setup.h @@ -73,7 +73,8 @@ # ifndef _CRT_SECURE_NO_WARNINGS # define _CRT_SECURE_NO_WARNINGS /* for fopen(), getenv() */ # endif -# ifndef LIBSSH2_LIBRARY /* apply to examples and tests only */ +# if !defined(LIBSSH2_LIBRARY) || defined(LIBSSH2_TESTS) + /* apply to examples and tests only */ # ifndef _CRT_NONSTDC_NO_DEPRECATE # define _CRT_NONSTDC_NO_DEPRECATE /* for strdup(), write() */ # endif diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ed436cb0..61dc2e99 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -39,60 +39,6 @@ list(APPEND LIBRARIES ${SOCKET_LIBRARIES}) add_definitions(-DHAVE_CONFIG_H) -set(TESTS - simple - ssh2 - test_warmup # keep this the first test - test_hostkey - test_hostkey_hash - test_password_auth_succeeds_with_correct_credentials - test_password_auth_fails_with_wrong_password - test_password_auth_fails_with_wrong_username - test_public_key_auth_fails_with_wrong_key - test_public_key_auth_succeeds_with_correct_rsa_key - test_public_key_auth_succeeds_with_correct_encrypted_rsa_key - test_keyboard_interactive_auth_fails_with_wrong_response - test_keyboard_interactive_auth_succeeds_with_correct_response - test_keyboard_interactive_auth_info_request - test_agent_forward_succeeds - test_read -) - -if(CRYPTO_BACKEND STREQUAL "OpenSSL" OR CRYPTO_BACKEND STREQUAL "wolfSSL") - list(APPEND TESTS - test_public_key_auth_succeeds_with_correct_rsa_openssh_key - ) - if(OPENSSL_VERSION VERSION_GREATER "1.1.0" OR CRYPTO_BACKEND STREQUAL "wolfSSL") - list(APPEND TESTS - test_public_key_auth_succeeds_with_correct_ed25519_key - test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key - test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem - test_public_key_auth_succeeds_with_correct_ecdsa_key - test_public_key_auth_succeeds_with_correct_signed_ecdsa_key - test_public_key_auth_succeeds_with_correct_signed_rsa_key - ) - endif() -endif() - -if(NOT CRYPTO_BACKEND STREQUAL "mbedTLS") - list(APPEND TESTS - test_public_key_auth_succeeds_with_correct_dsa_key - ) -endif() - -add_library(runner STATIC runner.h runner.c openssh_fixture.h openssh_fixture.c session_fixture.h session_fixture.c) -target_include_directories(runner PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../src" ../src ../include) -target_compile_definitions(runner PRIVATE FIXTURE_WORKDIR="${CMAKE_CURRENT_SOURCE_DIR}") - -# test building against shared libssh2 lib -if(BUILD_SHARED_LIBS) - foreach(test ssh2) - add_executable(${test}_shared ${test}.c) - target_include_directories(${test}_shared PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../src" ../src) - target_link_libraries(${test}_shared ${LIB_SHARED} ${LIBRARIES}) - endforeach() -endif() - if(CMAKE_COMPILER_IS_GNUCC) find_program(GCOV_PATH gcov) if(GCOV_PATH) @@ -103,20 +49,61 @@ if(CMAKE_COMPILER_IS_GNUCC) endif() endif() +set(TESTS + test_aa_warmup # keep this first + test_agent_forward_ok + test_auth_keyboard_fail + test_auth_keyboard_info_request + test_auth_keyboard_ok + test_auth_password_fail_password + test_auth_password_fail_username + test_auth_password_ok + test_auth_pubkey_fail + test_auth_pubkey_ok_dsa + test_auth_pubkey_ok_ecdsa + test_auth_pubkey_ok_ecdsa_signed + test_auth_pubkey_ok_ed25519 + test_auth_pubkey_ok_ed25519_encrypted + test_auth_pubkey_ok_ed25519_mem + test_auth_pubkey_ok_rsa + test_auth_pubkey_ok_rsa_encrypted + test_auth_pubkey_ok_rsa_openssh + test_auth_pubkey_ok_rsa_signed + test_hostkey + test_hostkey_hash + test_read + test_simple + test_ssh2 +) + +add_library(runner STATIC runner.h runner.c openssh_fixture.h openssh_fixture.c session_fixture.h session_fixture.c) +target_compile_definitions(runner PRIVATE "${CRYPTO_BACKEND_DEFINE}") +target_include_directories(runner PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../src" ../src ../include "${CRYPTO_BACKEND_INCLUDE_DIR}") +target_compile_definitions(runner PRIVATE FIXTURE_WORKDIR="${CMAKE_CURRENT_SOURCE_DIR}") + +# test building against shared libssh2 lib +if(BUILD_SHARED_LIBS) + foreach(test test_ssh2) + add_executable(${test}_shared ${test}.c) + target_include_directories(${test}_shared PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../src" ../src) + target_link_libraries(${test}_shared ${LIB_SHARED} ${LIBRARIES}) + endforeach() +endif() + foreach(test ${TESTS}) add_executable(${test} ${test}.c) target_compile_definitions(${test} PRIVATE "${CRYPTO_BACKEND_DEFINE}") target_include_directories(${test} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../src" ../src "${CRYPTO_BACKEND_INCLUDE_DIR}") # build a single test with gcov - if(GCOV_PATH AND test STREQUAL test_keyboard_interactive_auth_info_request) + if(GCOV_PATH AND test STREQUAL test_auth_keyboard_info_request) target_compile_options(${test} BEFORE PRIVATE ${GCOV_OPTIONS}) target_link_libraries(${test} runner ${LIB_STATIC} ${LIBRARIES} gcov) else() target_link_libraries(${test} runner ${LIB_STATIC} ${LIBRARIES}) endif() - if(test MATCHES "^test_") + if(NOT test STREQUAL "test_ssh2") # skip test that needs ssh2.sh to run list(APPEND TEST_TARGETS ${test}) add_test( NAME ${test} COMMAND $ @@ -138,24 +125,16 @@ foreach(test endforeach() # CRYPT tests -set(TESTS +foreach(test + 3des-cbc + aes128-cbc aes128-ctr + aes192-cbc aes192-ctr + aes256-cbc aes256-ctr + rijndael-cbc@lysator.liu.se ) -# Due to a bug with mbedTLS support, these crypt methods fail. Until that bug -# is fixed, don't run them there to avoid this known issue causing red tests. -# See https://github.com/libssh2/libssh2/issues/793 -if(NOT CRYPTO_BACKEND STREQUAL "mbedTLS") - list(APPEND TESTS - 3des-cbc - aes128-cbc - aes192-cbc - aes256-cbc - rijndael-cbc@lysator.liu.se - ) -endif() -foreach(test ${TESTS}) add_test(NAME test_${test} COMMAND "$") set_tests_properties(test_${test} PROPERTIES ENVIRONMENT "FIXTURE_TEST_CRYPT=${test}") endforeach() diff --git a/tests/Makefile.am b/tests/Makefile.am index d9f73165..8b3f7f9d 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -2,37 +2,37 @@ SUBDIRS = ossfuzz AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src -I$(top_srcdir)/include -ctests = simple$(EXEEXT) +ctests = test_simple$(EXEEXT) TESTS = $(ctests) mansyntax.sh check_PROGRAMS = $(ctests) if SSHD TESTS += ssh2.sh -check_PROGRAMS += ssh2 +check_PROGRAMS += test_ssh2 endif INTEGRATION_TESTS = \ - test_warmup \ - test_agent_forward_succeeds \ + test_aa_warmup \ + test_agent_forward_ok \ + test_auth_keyboard_fail \ + test_auth_keyboard_info_request \ + test_auth_keyboard_ok \ + test_auth_password_fail_password \ + test_auth_password_fail_username \ + test_auth_password_ok \ + test_auth_pubkey_fail \ + test_auth_pubkey_ok_dsa \ + test_auth_pubkey_ok_ecdsa \ + test_auth_pubkey_ok_ecdsa_signed \ + test_auth_pubkey_ok_ed25519 \ + test_auth_pubkey_ok_ed25519_encrypted \ + test_auth_pubkey_ok_ed25519_mem \ + test_auth_pubkey_ok_rsa \ + test_auth_pubkey_ok_rsa_encrypted \ + test_auth_pubkey_ok_rsa_openssh \ + test_auth_pubkey_ok_rsa_signed \ test_hostkey \ test_hostkey_hash \ - test_keyboard_interactive_auth_fails_with_wrong_response \ - test_keyboard_interactive_auth_info_request \ - test_keyboard_interactive_auth_succeeds_with_correct_response \ - test_password_auth_fails_with_wrong_password \ - test_password_auth_fails_with_wrong_username \ - test_password_auth_succeeds_with_correct_credentials \ - test_public_key_auth_fails_with_wrong_key \ - test_public_key_auth_succeeds_with_correct_dsa_key \ - test_public_key_auth_succeeds_with_correct_ecdsa_key \ - test_public_key_auth_succeeds_with_correct_ed25519_key \ - test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem \ - test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key \ - test_public_key_auth_succeeds_with_correct_encrypted_rsa_key \ - test_public_key_auth_succeeds_with_correct_rsa_key \ - test_public_key_auth_succeeds_with_correct_rsa_openssh_key \ - test_public_key_auth_succeeds_with_correct_signed_ecdsa_key \ - test_public_key_auth_succeeds_with_correct_signed_rsa_key \ test_read # Integration tests using Docker @@ -48,7 +48,7 @@ check_LTLIBRARIES = librunner.la # This program uses an internal libssh2 function so it needs to be statically # linked against libssh2 -test_keyboard_interactive_auth_info_request_LDFLAGS = -static +test_auth_keyboard_info_request_LDFLAGS = -static # This must be last in the list so it resolves symbols in previous libraries LDADD += ../src/libssh2.la @@ -69,12 +69,9 @@ EXTRA_DIST = \ key_dsa_wrong.pub \ key_ecdsa \ key_ecdsa.pub \ - signed_key_ecdsa \ - signed_key_ecdsa.pub \ - signed_key_ecdsa-cert.pub \ - signed_key_rsa \ - signed_key_rsa-cert.pub \ - signed_key_rsa.pub \ + key_ecdsa_signed \ + key_ecdsa_signed-cert.pub \ + key_ecdsa_signed.pub \ key_ed25519 \ key_ed25519.pub \ key_ed25519_encrypted \ @@ -85,6 +82,9 @@ EXTRA_DIST = \ key_rsa_encrypted.pub \ key_rsa_openssh \ key_rsa_openssh.pub \ + key_rsa_signed \ + key_rsa_signed-cert.pub \ + key_rsa_signed.pub \ mansyntax.sh \ openssh_server/Dockerfile \ openssh_server/authorized_keys \ @@ -95,9 +95,9 @@ EXTRA_DIST = \ openssh_server/ssh_host_ecdsa_key \ openssh_server/ssh_host_ed25519_key \ openssh_server/ssh_host_rsa_key \ - simple.c \ + test_simple.c \ sshdwrap \ - ssh2.c \ + test_ssh2.c \ ssh2.sh \ sshd_fixture.sh.in \ test_read_3des-cbc \ diff --git a/tests/gen_keys.sh b/tests/gen_keys.sh new file mode 100755 index 00000000..63e2149d --- /dev/null +++ b/tests/gen_keys.sh @@ -0,0 +1,74 @@ +#!/bin/sh -e + +# Generate test keys + +# tests/openssh_server + +rm ./openssh_server/*_key || true + +ssh-keygen -t rsa -b 2048 -N '' -m PEM -C '' -f 'openssh_server/ssh_host_rsa_key' +ssh-keygen -t ecdsa -b 256 -N '' -m PEM -C '' -f 'openssh_server/ssh_host_ecdsa_key' +ssh-keygen -t ed25519 -N '' -C '' -f 'openssh_server/ssh_host_ed25519_key' + +rm ./openssh_server/ca_* || true + +ssh-keygen -t ecdsa -b 521 -N '' -C 'ca_ecdsa' -f 'openssh_server/ca_ecdsa' +ssh-keygen -t rsa -b 3072 -N '' -C 'ca_rsa' -f 'openssh_server/ca_rsa' + +# tests + +rm './key_'* || true + +pw='libssh2' +id='identity' +pr='libssh2' + +ssh-keygen -t dsa -N '' -m PEM -C 'key_dsa' -f 'key_dsa' +ssh-keygen -t dsa -N '' -m PEM -C 'key_dsa_wrong' -f 'key_dsa_wrong' # FIXME? + +ssh-keygen -t rsa -b 2048 -N '' -m PEM -C 'key_rsa' -f 'key_rsa' +ssh-keygen -t rsa -b 2048 -N "${pw}" -m PEM -C 'key_rsa_encrypted' -f 'key_rsa_encrypted' +ssh-keygen -t rsa -b 2048 -N '' -C 'key_rsa_openssh' -f 'key_rsa_openssh' +ssh-keygen -t rsa -b 4096 -N '' -C 'key_rsa_signed' -f 'key_rsa_signed' + ssh-keygen -I "${id}" -n "${pr}" -s 'openssh_server/ca_rsa' 'key_rsa_signed.pub' + +ssh-keygen -t ecdsa -b 384 -N '' -C 'key_ecdsa' -f 'key_ecdsa' +ssh-keygen -t ecdsa -b 384 -N '' -C 'key_ecdsa_signed' -f 'key_ecdsa_signed' + ssh-keygen -I "${id}" -n "${pr}" -s 'openssh_server/ca_ecdsa' 'key_ecdsa_signed.pub' + +ssh-keygen -t ed25519 -N '' -C 'key_ed25519' -f 'key_ed25519' +ssh-keygen -t ed25519 -N "${pw}" -C 'key_ed25519_encrypted' -f 'key_ed25519_encrypted' + +cat \ + 'key_dsa.pub' \ + 'key_rsa.pub' \ + 'key_rsa_encrypted.pub' \ + 'key_rsa_openssh.pub' \ + 'key_ecdsa.pub' \ + 'key_ed25519.pub' \ + 'key_ed25519_encrypted.pub' \ + > openssh_server/authorized_keys + +# tests/etc + +rm etc/host* etc/user* || true + +ssh-keygen -t rsa -b 2048 -N '' -m PEM -C 'etc_host_rsa' -f 'etc/host' +ssh-keygen -t rsa -b 2048 -N '' -m PEM -C 'etc_user_rsa' -f 'etc/user' + +# tests/test_*.c + +echo 'Add these public keys and hashes to:' +echo ' - test_hostkey.c' +echo ' - test_hostkey_hash.c' + +for fn in ./openssh_server/*_key.pub; do + pub="$(grep -a -o -E ' [A-Za-z0-9+/=]+' < "${fn}" | head -1 | cut -c 2-)" + printf '====== %s\n' "${fn}" + printf 'BASE64 %s\n' "${pub}" + { + printf 'MD5 %s\n' "$(printf '%s' "${pub}" | openssl base64 -d -A | openssl dgst -hex -md5)" + printf 'SHA1 %s\n' "$(printf '%s' "${pub}" | openssl base64 -d -A | openssl dgst -hex -sha1)" + printf 'SHA256 %s\n' "$(printf '%s' "${pub}" | openssl base64 -d -A | openssl dgst -hex -sha256)" + } | tr '[:lower:]' '[:upper:]' +done diff --git a/tests/key_ecdsa.pub b/tests/key_ecdsa.pub index 597f63fc..7f50e19f 100644 --- a/tests/key_ecdsa.pub +++ b/tests/key_ecdsa.pub @@ -1 +1 @@ -ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBOiyJJwf+hFJrOkik9IQVxjhhVnI1vKl4BGLj03erLvw4TXXwoZzlPx6J936fU9JvvPw+d8PA4viMEfFbmdbHREKhwi3u1vZrfj0mB8SXw96AcZwX8PAL556wgom+/Qx+Q== +ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBOiyJJwf+hFJrOkik9IQVxjhhVnI1vKl4BGLj03erLvw4TXXwoZzlPx6J936fU9JvvPw+d8PA4viMEfFbmdbHREKhwi3u1vZrfj0mB8SXw96AcZwX8PAL556wgom+/Qx+Q== diff --git a/tests/signed_key_ecdsa b/tests/key_ecdsa_signed similarity index 100% rename from tests/signed_key_ecdsa rename to tests/key_ecdsa_signed diff --git a/tests/signed_key_ecdsa-cert.pub b/tests/key_ecdsa_signed-cert.pub similarity index 97% rename from tests/signed_key_ecdsa-cert.pub rename to tests/key_ecdsa_signed-cert.pub index ee32719b..3f1db684 100644 --- a/tests/signed_key_ecdsa-cert.pub +++ b/tests/key_ecdsa_signed-cert.pub @@ -1 +1 @@ -ecdsa-sha2-nistp384-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzdHAzODQtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgQCXc1JaqZ4XzkudbzP/pgEUbkioo7pl9aB09h6sg7KYAAAAIbmlzdHAzODQAAABhBG/X9+c3VK4iSDbbaNifJKognzwnkzdsHokZ6WgqEi+dl085JUW4UGO4Xs0+sauybztCy1AVsOIuEiVwM0cirRWFLmK0c0yO0LpiZFHHuaVBJc9tFEXkxyXG8MkIzIAhqAAAAAAAAAABAAAAAQAAAAhpZGVudGl0eQAAAAsAAAAHbGlic3NoMgAAAAAAAAAA//////////8AAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAArAAAABNlY2RzYS1zaGEyLW5pc3RwNTIxAAAACG5pc3RwNTIxAAAAhQQAfv15s+G2xg56J+audKAM4G9qOTFrbZRo0CTwvkb/oHrf9/2RSWqYsx/0m5mYCZVlecnZqwRHAOolXbc/Yb4cGjsALUj3UDirsnYR7Ve+SwnunkpvW/H3a98sA3sS+HCpd5RbpfWClSBOI9JEAlPtS1CrEQ7EmO7hmlFOH2cL0qfHCyYAAACnAAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAACMAAAAQgGxnhh8z8LNk5pMw0D9InyEtVRm8OJi23XEhqj/ieT/BsLZXbu65UAcMjrUn6DPdERxF9Dwe9pdIAWOLLjLHYEFBQAAAEIAlxz+XjUKa9Q2vpH0y8IgJMm0H1hTBUM1DQEoL8No1BVtgtIO20mac2fE3I35JxNDmmXoW+FuzmJnyrY9rxY+YXM= ./signed_key_ecdsa.pub +ecdsa-sha2-nistp384-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzdHAzODQtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgQCXc1JaqZ4XzkudbzP/pgEUbkioo7pl9aB09h6sg7KYAAAAIbmlzdHAzODQAAABhBG/X9+c3VK4iSDbbaNifJKognzwnkzdsHokZ6WgqEi+dl085JUW4UGO4Xs0+sauybztCy1AVsOIuEiVwM0cirRWFLmK0c0yO0LpiZFHHuaVBJc9tFEXkxyXG8MkIzIAhqAAAAAAAAAABAAAAAQAAAAhpZGVudGl0eQAAAAsAAAAHbGlic3NoMgAAAAAAAAAA//////////8AAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAArAAAABNlY2RzYS1zaGEyLW5pc3RwNTIxAAAACG5pc3RwNTIxAAAAhQQAfv15s+G2xg56J+audKAM4G9qOTFrbZRo0CTwvkb/oHrf9/2RSWqYsx/0m5mYCZVlecnZqwRHAOolXbc/Yb4cGjsALUj3UDirsnYR7Ve+SwnunkpvW/H3a98sA3sS+HCpd5RbpfWClSBOI9JEAlPtS1CrEQ7EmO7hmlFOH2cL0qfHCyYAAACnAAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAACMAAAAQgGxnhh8z8LNk5pMw0D9InyEtVRm8OJi23XEhqj/ieT/BsLZXbu65UAcMjrUn6DPdERxF9Dwe9pdIAWOLLjLHYEFBQAAAEIAlxz+XjUKa9Q2vpH0y8IgJMm0H1hTBUM1DQEoL8No1BVtgtIO20mac2fE3I35JxNDmmXoW+FuzmJnyrY9rxY+YXM= key_ecdsa_signed.pub diff --git a/tests/signed_key_ecdsa.pub b/tests/key_ecdsa_signed.pub similarity index 86% rename from tests/signed_key_ecdsa.pub rename to tests/key_ecdsa_signed.pub index 3b208f8a..88866545 100644 --- a/tests/signed_key_ecdsa.pub +++ b/tests/key_ecdsa_signed.pub @@ -1 +1 @@ -ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBG/X9+c3VK4iSDbbaNifJKognzwnkzdsHokZ6WgqEi+dl085JUW4UGO4Xs0+sauybztCy1AVsOIuEiVwM0cirRWFLmK0c0yO0LpiZFHHuaVBJc9tFEXkxyXG8MkIzIAhqA== +ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBG/X9+c3VK4iSDbbaNifJKognzwnkzdsHokZ6WgqEi+dl085JUW4UGO4Xs0+sauybztCy1AVsOIuEiVwM0cirRWFLmK0c0yO0LpiZFHHuaVBJc9tFEXkxyXG8MkIzIAhqA== key_ecdsa_signed diff --git a/tests/key_rsa_openssh.pub b/tests/key_rsa_openssh.pub index 9fc4ac27..ecd00790 100644 --- a/tests/key_rsa_openssh.pub +++ b/tests/key_rsa_openssh.pub @@ -1 +1 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTe1lN2L/yet0Ma1JzXkQf3t1f+pauALec2FsGZy87KRJW1AOxcTTiePjlFwP1yfSK1lWXQ+uf0b61gkKqqR52FDky24HJWuYlfXlEQMn2d/PNDNVDDbO4TXKyNxxUHFJ6qYMNd4kWjOH+6rmYoWKsWV+3mDRbHagbVPEYL8wep8OTqKOqruVLVPzZyYZkBtn4XOFi6UE8WKiSVdK1Am1O5UxvlD95t32eYch6wQ9azgMqja6spe/L5UJgP83QZFknVC3wPZWkjqomVFql0FpaQclENwyY/OZMxr0cT/f7bCL6s4A/1XpbsGmC0xak4/THHbOn+0LdIej2nGV8JFoR will@iCube.local +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTe1lN2L/yet0Ma1JzXkQf3t1f+pauALec2FsGZy87KRJW1AOxcTTiePjlFwP1yfSK1lWXQ+uf0b61gkKqqR52FDky24HJWuYlfXlEQMn2d/PNDNVDDbO4TXKyNxxUHFJ6qYMNd4kWjOH+6rmYoWKsWV+3mDRbHagbVPEYL8wep8OTqKOqruVLVPzZyYZkBtn4XOFi6UE8WKiSVdK1Am1O5UxvlD95t32eYch6wQ9azgMqja6spe/L5UJgP83QZFknVC3wPZWkjqomVFql0FpaQclENwyY/OZMxr0cT/f7bCL6s4A/1XpbsGmC0xak4/THHbOn+0LdIej2nGV8JFoR diff --git a/tests/signed_key_rsa b/tests/key_rsa_signed similarity index 100% rename from tests/signed_key_rsa rename to tests/key_rsa_signed diff --git a/tests/signed_key_rsa-cert.pub b/tests/key_rsa_signed-cert.pub similarity index 96% rename from tests/signed_key_rsa-cert.pub rename to tests/key_rsa_signed-cert.pub index 34dd79d1..de7a8301 100644 --- a/tests/signed_key_rsa-cert.pub +++ b/tests/key_rsa_signed-cert.pub @@ -1 +1 @@ -ssh-rsa-cert-v01@openssh.com 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 signed_key_rsa +ssh-rsa-cert-v01@openssh.com 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 key_rsa_signed diff --git a/tests/signed_key_rsa.pub b/tests/key_rsa_signed.pub similarity index 95% rename from tests/signed_key_rsa.pub rename to tests/key_rsa_signed.pub index 34376b1d..d8ae239f 100644 --- a/tests/signed_key_rsa.pub +++ b/tests/key_rsa_signed.pub @@ -1 +1 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCwMtW6rz83hgCKqV1Xf2KPgtWA5pkVA3jY4CosgWsV8rjwSpq+AMmB1wzVdTT/zrEEyy2iLoIwiAXQ7wlpo1QQWklnChIdlbaxg+F0UullsYIYoExrL+9YMwRGwmd00yIe/POHlBCa10qeBWfdMmjt5ZDlakPVYwFjvK5lZ0UW1FM1ucqX5HoIPhVONfReZonCP+jwvin44IMaqtdaSy4k71Qq7RuRbMYeTzpNaxv2CbxubvY5E7wlDrT47e25Dn/XeoV2VEX9T87ZAMnwmeyDbKW2Dv48l4Zze3Y8veUojfH3NlA/F9+1PwdTlqKsf45E/VVLyTTtn1KJy2hLyuav8Qt6Wgew41G2F9alDJab11urcogRiHyI/oPo0c6Km1vieF7IfW72yE5TFTZtbzSNS+W0GCo1xh4TUx8bBNXHO4+mDFt2gNCgX+Hf64FlPqM0kaZSUtBVKrWSupgTbMSXfHbRV5NJvSdGpPUWeFD1ifxYcPhxwJlznTXVQumEglDueIMsnE8yKEYjREtuao8/r9+ORtqf9OPZsT9j+bwROevLFnKZkzfD9xYQyU2aMrRDuo8R6SD7SiI6tXRwlohdflXA6ng9RTNyqVROQDOJ94bGPD5b4Bbnm31s2GhhWjoByQGlkNW4BRDEJmgG9sE8ztAxl7d8CV2V93BOisaPkw== signed_key_rsa +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCwMtW6rz83hgCKqV1Xf2KPgtWA5pkVA3jY4CosgWsV8rjwSpq+AMmB1wzVdTT/zrEEyy2iLoIwiAXQ7wlpo1QQWklnChIdlbaxg+F0UullsYIYoExrL+9YMwRGwmd00yIe/POHlBCa10qeBWfdMmjt5ZDlakPVYwFjvK5lZ0UW1FM1ucqX5HoIPhVONfReZonCP+jwvin44IMaqtdaSy4k71Qq7RuRbMYeTzpNaxv2CbxubvY5E7wlDrT47e25Dn/XeoV2VEX9T87ZAMnwmeyDbKW2Dv48l4Zze3Y8veUojfH3NlA/F9+1PwdTlqKsf45E/VVLyTTtn1KJy2hLyuav8Qt6Wgew41G2F9alDJab11urcogRiHyI/oPo0c6Km1vieF7IfW72yE5TFTZtbzSNS+W0GCo1xh4TUx8bBNXHO4+mDFt2gNCgX+Hf64FlPqM0kaZSUtBVKrWSupgTbMSXfHbRV5NJvSdGpPUWeFD1ifxYcPhxwJlznTXVQumEglDueIMsnE8yKEYjREtuao8/r9+ORtqf9OPZsT9j+bwROevLFnKZkzfD9xYQyU2aMrRDuo8R6SD7SiI6tXRwlohdflXA6ng9RTNyqVROQDOJ94bGPD5b4Bbnm31s2GhhWjoByQGlkNW4BRDEJmgG9sE8ztAxl7d8CV2V93BOisaPkw== key_rsa_signed diff --git a/tests/runner.c b/tests/runner.c index c2585073..f768cd70 100644 --- a/tests/runner.c +++ b/tests/runner.c @@ -40,10 +40,15 @@ int main(void) { int exit_code = 1; - LIBSSH2_SESSION *session = start_session_fixture(); + int skipped; + LIBSSH2_SESSION *session = start_session_fixture(&skipped); if(session) { exit_code = (test(session) == 0) ? 0 : 1; } + else if(skipped) { + fprintf(stderr, "Test skipped.\n"); + exit_code = 0; + } stop_session_fixture(); return exit_code; } diff --git a/tests/session_fixture.c b/tests/session_fixture.c index ebaa20db..4997d4ab 100644 --- a/tests/session_fixture.c +++ b/tests/session_fixture.c @@ -99,10 +99,34 @@ static void setup_fixture_workdir(void) chdir(wd); } -LIBSSH2_SESSION *start_session_fixture(void) +LIBSSH2_SESSION *start_session_fixture(int *skipped) { int rc; - const char *env; + + const char *crypt = getenv("FIXTURE_TEST_CRYPT"); + const char *mac = getenv("FIXTURE_TEST_MAC"); + + *skipped = 0; + + if(crypt) { +#ifdef LIBSSH2_MBEDTLS + /* Due to a bug with mbedTLS support, these crypt methods fail. + Until that bug is fixed, don't run them there to avoid this + known issue causing red tests. + See: https://github.com/libssh2/libssh2/issues/793 + */ + if(strcmp(crypt, "3des-cbc") == 0 || + strcmp(crypt, "aes128-cbc") == 0 || + strcmp(crypt, "aes192-cbc") == 0 || + strcmp(crypt, "aes256-cbc") == 0 || + strcmp(crypt, "rijndael-cbc@lysator.liu.se") == 0) { + fprintf(stderr, "crypt algorithm (%s) skipped " + "for this crypto backend.\n", crypt); + *skipped = 1; + return NULL; + } +#endif + } setup_fixture_workdir(); @@ -126,26 +150,25 @@ LIBSSH2_SESSION *start_session_fixture(void) } /* Override crypt algorithm for the test */ - env = getenv("FIXTURE_TEST_CRYPT"); - if(env) { + if(crypt) { if(libssh2_session_method_pref(connected_session, - LIBSSH2_METHOD_CRYPT_CS, env) || + LIBSSH2_METHOD_CRYPT_CS, crypt) || libssh2_session_method_pref(connected_session, - LIBSSH2_METHOD_CRYPT_SC, env)) { + LIBSSH2_METHOD_CRYPT_SC, crypt)) { fprintf(stderr, "libssh2_session_method_pref CRYPT failed " - "(probably disabled in the build): '%s'\n", env); + "(probably disabled in the build): '%s'\n", crypt); return NULL; } } + /* Override mac algorithm for the test */ - env = getenv("FIXTURE_TEST_MAC"); - if(env) { + if(mac) { if(libssh2_session_method_pref(connected_session, - LIBSSH2_METHOD_MAC_CS, env) || + LIBSSH2_METHOD_MAC_CS, mac) || libssh2_session_method_pref(connected_session, - LIBSSH2_METHOD_MAC_SC, env)) { + LIBSSH2_METHOD_MAC_SC, mac)) { fprintf(stderr, "libssh2_session_method_pref MAC failed " - "(probably disabled in the build): '%s'\n", env); + "(probably disabled in the build): '%s'\n", mac); return NULL; } } @@ -169,7 +192,7 @@ void print_last_session_error(const char *function) fprintf(stderr, "%s failed (%d): %s\n", function, rc, message); } else { - fprintf(stderr, "No session"); + fprintf(stderr, "No session\n"); } } @@ -182,7 +205,7 @@ void stop_session_fixture(void) connected_session = NULL; } else { - fprintf(stderr, "Cannot stop session - none started"); + fprintf(stderr, "Cannot stop session - none started\n"); } stop_openssh_fixture(); @@ -206,16 +229,244 @@ const char *srcdir_path(const char *file) assert(curpath < NUMPATHS); if(p) { /* Ensure the final string is nul-terminated on Windows */ - filepath[curpath][sizeof(filepath[0])-1] = 0; - snprintf(filepath[curpath], sizeof(filepath[0])-1, "%s/%s", - p, file); + filepath[curpath][sizeof(filepath[0]) - 1] = 0; + snprintf(filepath[curpath], sizeof(filepath[0]) - 1, "%s/%s", + p, file); } else { /* Ensure the final string is nul-terminated on Windows */ - filepath[curpath][sizeof(filepath[0])-1] = 0; - snprintf(filepath[curpath], sizeof(filepath[0])-1, "%s", - file); + filepath[curpath][sizeof(filepath[0]) - 1] = 0; + snprintf(filepath[curpath], sizeof(filepath[0]) - 1, "%s", + file); } return filepath[curpath++]; } + +static const char *kbd_password; + +static void kbd_callback(const char *name, int name_len, + const char *instruct, int instruct_len, + int num_prompts, + const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, + LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, + void **abstract) +{ + int i; + (void)abstract; + + fprintf(stdout, "Kb-int name: %.*s\n", name_len, name); + fprintf(stdout, "Kb-int instruction: %.*s\n", instruct_len, instruct); + for(i = 0; i < num_prompts; ++i) { + fprintf(stdout, "Kb-int prompt %d: %.*s\n", i, + (int)prompts[i].length, prompts[i].text); + } + + if(num_prompts == 1) { + responses[0].text = strdup(kbd_password); + responses[0].length = (unsigned int)strlen(kbd_password); + } +} + +int test_auth_keyboard(LIBSSH2_SESSION *session, int flags, + const char *username, + const char *password) +{ + int rc; + + const char *userauth_list = + libssh2_userauth_list(session, username, + (unsigned int)strlen(username)); + if(!userauth_list) { + print_last_session_error("libssh2_userauth_list"); + return 1; + } + + if(!strstr(userauth_list, "keyboard-interactive")) { + fprintf(stderr, + "'keyboard-interactive' was expected in userauth list: %s\n", + userauth_list); + return 1; + } + + kbd_password = password; + + rc = libssh2_userauth_keyboard_interactive_ex(session, username, + (unsigned int)strlen(username), + kbd_callback); + + if((flags & TEST_AUTH_SHOULDFAIL) != 0) { + if(rc == 0) { + fprintf(stderr, "Keyboard-interactive auth succeeded " + "with wrong response\n"); + return 1; + } + } + else { + if(rc) { + print_last_session_error( + "libssh2_userauth_keyboard_interactive_ex"); + return 1; + } + } + + return 0; +} + +int test_auth_password(LIBSSH2_SESSION *session, int flags, + const char *username, + const char *password) +{ + int rc; + + const char *userauth_list = + libssh2_userauth_list(session, username, + (unsigned int)strlen(username)); + if(!userauth_list) { + print_last_session_error("libssh2_userauth_list"); + return 1; + } + + if(!strstr(userauth_list, "password")) { + fprintf(stderr, "'password' was expected in userauth list: %s\n", + userauth_list); + return 1; + } + + rc = libssh2_userauth_password_ex(session, username, + (unsigned int)strlen(username), + password, + (unsigned int)strlen(password), + NULL); + + if((flags & TEST_AUTH_SHOULDFAIL) != 0) { + if(rc == 0) { + fprintf(stderr, "Password auth succeeded with wrong password\n"); + return 1; + } + } + else { + if(rc) { + print_last_session_error("libssh2_userauth_password_ex"); + return 1; + } + + if(libssh2_userauth_authenticated(session) == 0) { + fprintf(stderr, "Password auth appeared to succeed but " + "libssh2_userauth_authenticated returned 0\n"); + return 1; + } + } + + return 0; +} + +static int read_file(const char *path, char **out_buffer, size_t *out_len) +{ + FILE *fp = NULL; + char *buffer = NULL; + size_t len = 0; + + if(!out_buffer || !out_len || !path) { + fprintf(stderr, "invalid params.\n"); + return 1; + } + + *out_buffer = NULL; + *out_len = 0; + + fp = fopen(path, "r"); + + if(!fp) { + fprintf(stderr, "File could not be read: %s\n", path); + return 1; + } + + fseek(fp, 0L, SEEK_END); + len = ftell(fp); + rewind(fp); + + buffer = calloc(1, len + 1); + if(!buffer) { + fclose(fp); + fprintf(stderr, "Could not alloc memory.\n"); + return 1; + } + + if(1 != fread(buffer, len, 1, fp)) { + fclose(fp); + free(buffer); + fprintf(stderr, "Could not read file into memory.\n"); + return 1; + } + + fclose(fp); + + *out_buffer = buffer; + *out_len = len; + + return 0; +} + +int test_auth_pubkey(LIBSSH2_SESSION *session, int flags, + const char *username, + const char *password, + const char *fn_pub, + const char *fn_priv) +{ + int rc; + + const char *userauth_list = + libssh2_userauth_list(session, username, + (unsigned int)strlen(username)); + if(!userauth_list) { + print_last_session_error("libssh2_userauth_list"); + return 1; + } + + if(!strstr(userauth_list, "publickey")) { + fprintf(stderr, "'publickey' was expected in userauth list: %s\n", + userauth_list); + return 1; + } + + if((flags & TEST_AUTH_FROMMEM) != 0) { + char *buffer = NULL; + size_t len = 0; + + if(read_file(srcdir_path(fn_priv), &buffer, &len)) { + fprintf(stderr, "Reading key file failed.\n"); + return 1; + } + + rc = libssh2_userauth_publickey_frommemory(session, + username, strlen(username), + NULL, 0, + buffer, len, + NULL); + + free(buffer); + } + else { + rc = libssh2_userauth_publickey_fromfile_ex(session, username, + (unsigned int)strlen(username), + srcdir_path(fn_pub), + srcdir_path(fn_priv), + password); + } + + if((flags & TEST_AUTH_SHOULDFAIL) != 0) { + if(rc == 0) { + fprintf(stderr, "Public-key auth succeeded with wrong key\n"); + return 1; + } + } + else { + if(rc) { + print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); + return 1; + } + } + + return 0; +} diff --git a/tests/session_fixture.h b/tests/session_fixture.h index 5314fa57..91db09a9 100644 --- a/tests/session_fixture.h +++ b/tests/session_fixture.h @@ -38,16 +38,31 @@ #ifndef LIBSSH2_TESTS_SESSION_FIXTURE_H #define LIBSSH2_TESTS_SESSION_FIXTURE_H -#include "libssh2_setup.h" +#define LIBSSH2_TESTS + +#include "libssh2_priv.h" #include -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define snprintf _snprintf -#endif - -LIBSSH2_SESSION *start_session_fixture(void); +LIBSSH2_SESSION *start_session_fixture(int *skipped); void stop_session_fixture(void); void print_last_session_error(const char *function); const char *srcdir_path(const char *file); +#define TEST_AUTH_SHOULDFAIL 1 +#define TEST_AUTH_FROMMEM 2 + +int test_auth_keyboard(LIBSSH2_SESSION *session, int flags, + const char *username, + const char *password); + +int test_auth_password(LIBSSH2_SESSION *session, int flags, + const char *username, + const char *password); + +int test_auth_pubkey(LIBSSH2_SESSION *session, int flags, + const char *username, + const char *password, + const char *fn_pub, + const char *fn_priv); + #endif diff --git a/tests/ssh2.sh b/tests/ssh2.sh index 4e475e6e..fa604cb2 100755 --- a/tests/ssh2.sh +++ b/tests/ssh2.sh @@ -8,7 +8,7 @@ srcdir="${srcdir:-$PWD}" SSHD="${SSHD:-/usr/sbin/sshd}" -cmd="./ssh2${EXEEXT}" +cmd="./test_ssh2${EXEEXT}" srcdir="$(cd "$srcdir" || exit; pwd)" export PRIVKEY="$srcdir/etc/user" diff --git a/tests/test_warmup.c b/tests/test_aa_warmup.c similarity index 100% rename from tests/test_warmup.c rename to tests/test_aa_warmup.c diff --git a/tests/test_agent_forward_succeeds.c b/tests/test_agent_forward_ok.c similarity index 77% rename from tests/test_agent_forward_succeeds.c rename to tests/test_agent_forward_ok.c index cb70baee..7c9cfe3c 100644 --- a/tests/test_agent_forward_succeeds.c +++ b/tests/test_agent_forward_ok.c @@ -23,10 +23,11 @@ int test(LIBSSH2_SESSION *session) return 1; } - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - NULL); + rc = libssh2_userauth_publickey_fromfile_ex(session, USERNAME, + (unsigned int)strlen(USERNAME), + srcdir_path(KEY_FILE_PUBLIC), + srcdir_path(KEY_FILE_PRIVATE), + NULL); if(rc) { print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); return 1; diff --git a/tests/test_auth_keyboard_fail.c b/tests/test_auth_keyboard_fail.c new file mode 100644 index 00000000..e8e5942b --- /dev/null +++ b/tests/test_auth_keyboard_fail.c @@ -0,0 +1,8 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ + return test_auth_keyboard(session, TEST_AUTH_SHOULDFAIL, + "libssh2", /* set in Dockerfile */ + "I'm the wrong password"); +} diff --git a/tests/test_keyboard_interactive_auth_info_request.c b/tests/test_auth_keyboard_info_request.c similarity index 99% rename from tests/test_keyboard_interactive_auth_info_request.c rename to tests/test_auth_keyboard_info_request.c index 860da944..405a2662 100644 --- a/tests/test_keyboard_interactive_auth_info_request.c +++ b/tests/test_auth_keyboard_info_request.c @@ -249,8 +249,10 @@ int test_case(int num, char *message; int error_code; LIBSSH2_SESSION *session = NULL; + alloc_count = 0; free_count = 0; + session = libssh2_session_init_ex(test_alloc, test_free, NULL, abstract); if(!session) { fprintf(stderr, "libssh2_session_init_ex failed\n"); diff --git a/tests/test_auth_keyboard_ok.c b/tests/test_auth_keyboard_ok.c new file mode 100644 index 00000000..1871f74f --- /dev/null +++ b/tests/test_auth_keyboard_ok.c @@ -0,0 +1,8 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ + return test_auth_keyboard(session, 0, + "libssh2", /* set in Dockerfile */ + "my test password"); /* set in Dockerfile */ +} diff --git a/tests/test_auth_password_fail_password.c b/tests/test_auth_password_fail_password.c new file mode 100644 index 00000000..c1383213 --- /dev/null +++ b/tests/test_auth_password_fail_password.c @@ -0,0 +1,8 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ + return test_auth_password(session, TEST_AUTH_SHOULDFAIL, + "libssh2", /* set in Dockerfile */ + "I'm the wrong password"); +} diff --git a/tests/test_auth_password_fail_username.c b/tests/test_auth_password_fail_username.c new file mode 100644 index 00000000..6478d0f4 --- /dev/null +++ b/tests/test_auth_password_fail_username.c @@ -0,0 +1,8 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ + return test_auth_password(session, TEST_AUTH_SHOULDFAIL, + "I'm the wrong username", + "my test password"); /* set in Dockerfile */ +} diff --git a/tests/test_auth_password_ok.c b/tests/test_auth_password_ok.c new file mode 100644 index 00000000..9e2ca45f --- /dev/null +++ b/tests/test_auth_password_ok.c @@ -0,0 +1,8 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ + return test_auth_password(session, 0, + "libssh2", /* set in Dockerfile */ + "my test password"); /* set in Dockerfile */ +} diff --git a/tests/test_auth_pubkey_fail.c b/tests/test_auth_pubkey_fail.c new file mode 100644 index 00000000..a47671bd --- /dev/null +++ b/tests/test_auth_pubkey_fail.c @@ -0,0 +1,10 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ + return test_auth_pubkey(session, TEST_AUTH_SHOULDFAIL, + "libssh2", /* set in Dockerfile */ + NULL, + "key_dsa_wrong.pub", + "key_dsa_wrong"); +} diff --git a/tests/test_auth_pubkey_ok_dsa.c b/tests/test_auth_pubkey_ok_dsa.c new file mode 100644 index 00000000..7405676b --- /dev/null +++ b/tests/test_auth_pubkey_ok_dsa.c @@ -0,0 +1,16 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ +#if LIBSSH2_DSA + /* set in Dockerfile */ + return test_auth_pubkey(session, 0, + "libssh2", + NULL, + "key_dsa.pub", + "key_dsa"); +#else + (void)session; + return 0; +#endif +} diff --git a/tests/test_auth_pubkey_ok_ecdsa.c b/tests/test_auth_pubkey_ok_ecdsa.c new file mode 100644 index 00000000..ef5e5bc2 --- /dev/null +++ b/tests/test_auth_pubkey_ok_ecdsa.c @@ -0,0 +1,16 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ +#if LIBSSH2_ECDSA + /* set in Dockerfile */ + return test_auth_pubkey(session, 0, + "libssh2", + NULL, + "key_ecdsa.pub", + "key_ecdsa"); +#else + (void)session; + return 0; +#endif +} diff --git a/tests/test_auth_pubkey_ok_ecdsa_signed.c b/tests/test_auth_pubkey_ok_ecdsa_signed.c new file mode 100644 index 00000000..d4fa5926 --- /dev/null +++ b/tests/test_auth_pubkey_ok_ecdsa_signed.c @@ -0,0 +1,17 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ +#if LIBSSH2_ECDSA && \ + (defined(LIBSSH2_OPENSSL) || defined(LIBSSH2_WOLFSSL)) + /* set in Dockerfile */ + return test_auth_pubkey(session, 0, + "libssh2", + NULL, + "key_ecdsa_signed-cert.pub", + "key_ecdsa_signed"); +#else + (void)session; + return 0; +#endif +} diff --git a/tests/test_auth_pubkey_ok_ed25519.c b/tests/test_auth_pubkey_ok_ed25519.c new file mode 100644 index 00000000..e3fea09f --- /dev/null +++ b/tests/test_auth_pubkey_ok_ed25519.c @@ -0,0 +1,16 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ +#if LIBSSH2_ED25519 + /* set in Dockerfile */ + return test_auth_pubkey(session, 0, + "libssh2", + NULL, + "key_ed25519.pub", + "key_ed25519"); +#else + (void)session; + return 0; +#endif +} diff --git a/tests/test_auth_pubkey_ok_ed25519_encrypted.c b/tests/test_auth_pubkey_ok_ed25519_encrypted.c new file mode 100644 index 00000000..1ad77400 --- /dev/null +++ b/tests/test_auth_pubkey_ok_ed25519_encrypted.c @@ -0,0 +1,16 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ +#if LIBSSH2_ED25519 + /* set in Dockerfile */ + return test_auth_pubkey(session, 0, + "libssh2", + "libssh2", + "key_ed25519_encrypted.pub", + "key_ed25519_encrypted"); +#else + (void)session; + return 0; +#endif +} diff --git a/tests/test_auth_pubkey_ok_ed25519_mem.c b/tests/test_auth_pubkey_ok_ed25519_mem.c new file mode 100644 index 00000000..3c7ee48c --- /dev/null +++ b/tests/test_auth_pubkey_ok_ed25519_mem.c @@ -0,0 +1,16 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ +#if LIBSSH2_ED25519 + /* set in Dockerfile */ + return test_auth_pubkey(session, TEST_AUTH_FROMMEM, + "libssh2", + NULL, + NULL, + "key_ed25519"); +#else + (void)session; + return 0; +#endif +} diff --git a/tests/test_auth_pubkey_ok_rsa.c b/tests/test_auth_pubkey_ok_rsa.c new file mode 100644 index 00000000..842e7a2d --- /dev/null +++ b/tests/test_auth_pubkey_ok_rsa.c @@ -0,0 +1,11 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ + /* set in Dockerfile */ + return test_auth_pubkey(session, 0, + "libssh2", + NULL, + "key_rsa.pub", + "key_rsa"); +} diff --git a/tests/test_auth_pubkey_ok_rsa_encrypted.c b/tests/test_auth_pubkey_ok_rsa_encrypted.c new file mode 100644 index 00000000..975fffad --- /dev/null +++ b/tests/test_auth_pubkey_ok_rsa_encrypted.c @@ -0,0 +1,11 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ + /* set in Dockerfile */ + return test_auth_pubkey(session, 0, + "libssh2", + "libssh2", + "key_rsa_encrypted.pub", + "key_rsa_encrypted"); +} diff --git a/tests/test_auth_pubkey_ok_rsa_openssh.c b/tests/test_auth_pubkey_ok_rsa_openssh.c new file mode 100644 index 00000000..95de8a18 --- /dev/null +++ b/tests/test_auth_pubkey_ok_rsa_openssh.c @@ -0,0 +1,16 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ +#if defined(LIBSSH2_OPENSSL) || defined(LIBSSH2_WOLFSSL) + /* set in Dockerfile */ + return test_auth_pubkey(session, 0, + "libssh2", + NULL, + "key_rsa_openssh.pub", + "key_rsa_openssh"); +#else + (void)session; + return 0; +#endif +} diff --git a/tests/test_auth_pubkey_ok_rsa_signed.c b/tests/test_auth_pubkey_ok_rsa_signed.c new file mode 100644 index 00000000..905753af --- /dev/null +++ b/tests/test_auth_pubkey_ok_rsa_signed.c @@ -0,0 +1,16 @@ +#include "runner.h" + +int test(LIBSSH2_SESSION *session) +{ +#if defined(LIBSSH2_OPENSSL) || defined(LIBSSH2_WOLFSSL) + /* set in Dockerfile */ + return test_auth_pubkey(session, 0, + "libssh2", + NULL, + "key_rsa_signed-cert.pub", + "key_rsa_signed"); +#else + (void)session; + return 0; +#endif +} diff --git a/tests/test_hostkey.c b/tests/test_hostkey.c index 1a618494..54ba5a77 100644 --- a/tests/test_hostkey.c +++ b/tests/test_hostkey.c @@ -12,6 +12,9 @@ static const char *EXPECTED_ECDSA_HOSTKEY = "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC+/syyeKJD9dC2ZH" "9Q7iJGReR4YM3rUCMsSynkyXojdfSClGCMY7JvWlt30ESjYvxoTfSRGx6WvaqYK/vPoYQ4="; +static const char *EXPECTED_ED25519_HOSTKEY = + "AAAAC3NzaC1lZDI1NTE5AAAAIIxtdyg2ZRXE70UwyPVUH3UyfDBV8GX5cPF636P6hjom"; + int test(LIBSSH2_SESSION *session) { int rc; @@ -26,7 +29,12 @@ int test(LIBSSH2_SESSION *session) return 1; } - if(type == LIBSSH2_HOSTKEY_TYPE_ECDSA_256) { + if(type == LIBSSH2_HOSTKEY_TYPE_ED25519) { + rc = libssh2_base64_decode(session, &expected_hostkey, &expected_len, + EXPECTED_ED25519_HOSTKEY, + (unsigned int)strlen(EXPECTED_ED25519_HOSTKEY)); + } + else if(type == LIBSSH2_HOSTKEY_TYPE_ECDSA_256) { rc = libssh2_base64_decode(session, &expected_hostkey, &expected_len, EXPECTED_ECDSA_HOSTKEY, (unsigned int)strlen(EXPECTED_ECDSA_HOSTKEY)); diff --git a/tests/test_hostkey_hash.c b/tests/test_hostkey_hash.c index 9090ca68..a2218c22 100644 --- a/tests/test_hostkey_hash.c +++ b/tests/test_hostkey_hash.c @@ -12,6 +12,9 @@ static const char *EXPECTED_ECDSA_HOSTKEY = "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC+/syyeKJD9dC2ZH" "9Q7iJGReR4YM3rUCMsSynkyXojdfSClGCMY7JvWlt30ESjYvxoTfSRGx6WvaqYK/vPoYQ4="; +static const char *EXPECTED_ED25519_HOSTKEY = + "AAAAC3NzaC1lZDI1NTE5AAAAIIxtdyg2ZRXE70UwyPVUH3UyfDBV8GX5cPF636P6hjom"; + static const char *EXPECTED_RSA_MD5_HASH_DIGEST = "0C0ED1A5BB10275F76924CE187CE5C5E"; @@ -30,6 +33,9 @@ static const char *EXPECTED_ECDSA_SHA1_HASH_DIGEST = static const char *EXPECTED_ECDSA_SHA256_HASH_DIGEST = "56FCD975B166C3F0342D0036E44C311A86C0EAE40713B53FC776369BAE7F5264"; +static const char *EXPECTED_ED25519_SHA256_HASH_DIGEST = + "2638B020F6121FA750A7F4754B718419F621814C6E779D68ADF26AA68814ADDF"; + static const int MD5_HASH_SIZE = 16; static const int SHA1_HASH_SIZE = 20; static const int SHA256_HASH_SIZE = 32; @@ -60,6 +66,7 @@ int test(LIBSSH2_SESSION *session) /* these are the host keys under test, they are currently unused */ (void)EXPECTED_RSA_HOSTKEY; (void)EXPECTED_ECDSA_HOSTKEY; + (void)EXPECTED_ED25519_HOSTKEY; hostkey = libssh2_session_hostkey(session, &len, &type); if(!hostkey) { @@ -67,7 +74,26 @@ int test(LIBSSH2_SESSION *session) return 1; } - if(type == LIBSSH2_HOSTKEY_TYPE_ECDSA_256) { + if(type == LIBSSH2_HOSTKEY_TYPE_ED25519) { + + sha256_hash = libssh2_hostkey_hash(session, + LIBSSH2_HOSTKEY_HASH_SHA256); + if(!sha256_hash) { + print_last_session_error( + "libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_SHA256)"); + return 1; + } + + calculate_digest(sha256_hash, SHA256_HASH_SIZE, buf, BUFSIZ); + + if(strcmp(buf, EXPECTED_ED25519_SHA256_HASH_DIGEST) != 0) { + fprintf(stderr, + "ED25519 SHA256 hash not as expected - digest %s != %s\n", + buf, EXPECTED_ED25519_SHA256_HASH_DIGEST); + return 1; + } + } + else if(type == LIBSSH2_HOSTKEY_TYPE_ECDSA_256) { md5_hash = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5); if(!md5_hash) { @@ -117,7 +143,6 @@ int test(LIBSSH2_SESSION *session) buf, EXPECTED_ECDSA_SHA256_HASH_DIGEST); return 1; } - } else if(type == LIBSSH2_HOSTKEY_TYPE_RSA) { diff --git a/tests/test_keyboard_interactive_auth_fails_with_wrong_response.c b/tests/test_keyboard_interactive_auth_fails_with_wrong_response.c deleted file mode 100644 index 708ac097..00000000 --- a/tests/test_keyboard_interactive_auth_fails_with_wrong_response.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "runner.h" - -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ -static const char *WRONG_PASSWORD = "i'm not the password"; - -static void kbd_callback(const char *name, int name_len, - const char *instruct, int instruct_len, - int num_prompts, - const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, - LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, - void **abstract) -{ - int i; - (void)abstract; - fprintf(stdout, "Kb-int name: %.*s\n", name_len, name); - fprintf(stdout, "Kb-int instruction: %.*s\n", instruct_len, instruct); - for(i = 0; i < num_prompts; ++i) { - fprintf(stdout, "Kb-int prompt %d: %.*s\n", i, - (int)prompts[i].length, prompts[i].text); - } - - if(num_prompts == 1) { - responses[0].text = strdup(WRONG_PASSWORD); - responses[0].length = (unsigned int)strlen(WRONG_PASSWORD); - } -} - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "keyboard-interactive")) { - fprintf(stderr, - "'keyboard-interactive' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_keyboard_interactive_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), kbd_callback); - if(rc == 0) { - fprintf(stderr, - "Keyboard-interactive auth succeeded with wrong response\n"); - return 1; - } - - return 0; -} diff --git a/tests/test_keyboard_interactive_auth_succeeds_with_correct_response.c b/tests/test_keyboard_interactive_auth_succeeds_with_correct_response.c deleted file mode 100644 index 40fa3320..00000000 --- a/tests/test_keyboard_interactive_auth_succeeds_with_correct_response.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *PASSWORD = "my test password"; - -static void kbd_callback(const char *name, int name_len, - const char *instruct, int instruct_len, - int num_prompts, - const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, - LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, - void **abstract) -{ - int i; - (void)abstract; - - fprintf(stdout, "Kb-int name: %.*s\n", name_len, name); - fprintf(stdout, "Kb-int instruction: %.*s\n", instruct_len, instruct); - for(i = 0; i < num_prompts; ++i) { - fprintf(stdout, "Kb-int prompt %d: %.*s\n", i, - (int)prompts[i].length, prompts[i].text); - } - - if(num_prompts == 1) { - responses[0].text = strdup(PASSWORD); - responses[0].length = (unsigned int)strlen(PASSWORD); - } -} - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "keyboard-interactive")) { - fprintf(stderr, - "'keyboard-interactive' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_keyboard_interactive_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), kbd_callback); - if(rc) { - print_last_session_error("libssh2_userauth_keyboard_interactive_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_password_auth_fails_with_wrong_password.c b/tests/test_password_auth_fails_with_wrong_password.c deleted file mode 100644 index 88948fba..00000000 --- a/tests/test_password_auth_fails_with_wrong_password.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "runner.h" - -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ -static const char *WRONG_PASSWORD = "i'm not the password"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "password")) { - fprintf(stderr, "'password' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_password_ex(session, USERNAME, - (unsigned int)strlen(USERNAME), - WRONG_PASSWORD, - (unsigned int)strlen(WRONG_PASSWORD), - NULL); - if(rc == 0) { - fprintf(stderr, "Password auth succeeded with wrong password\n"); - return 1; - } - - return 0; -} diff --git a/tests/test_password_auth_fails_with_wrong_username.c b/tests/test_password_auth_fails_with_wrong_username.c deleted file mode 100644 index e56428d6..00000000 --- a/tests/test_password_auth_fails_with_wrong_username.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *PASSWORD = "my test password"; -static const char *WRONG_USERNAME = "i dont exist"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, WRONG_USERNAME, - (unsigned int)strlen(WRONG_USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "password")) { - fprintf(stderr, "'password' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_password_ex(session, WRONG_USERNAME, - (unsigned int)strlen(WRONG_USERNAME), - PASSWORD, - (unsigned int)strlen(PASSWORD), NULL); - if(rc == 0) { - fprintf(stderr, "Password auth succeeded with wrong username\n"); - return 1; - } - - return 0; -} diff --git a/tests/test_password_auth_succeeds_with_correct_credentials.c b/tests/test_password_auth_succeeds_with_correct_credentials.c deleted file mode 100644 index 6df9c0eb..00000000 --- a/tests/test_password_auth_succeeds_with_correct_credentials.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *PASSWORD = "my test password"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "password")) { - fprintf(stderr, "'password' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_password_ex(session, USERNAME, - (unsigned int)strlen(USERNAME), - PASSWORD, - (unsigned int)strlen(PASSWORD), NULL); - if(rc) { - print_last_session_error("libssh2_userauth_password_ex"); - return 1; - } - - if(libssh2_userauth_authenticated(session) == 0) { - fprintf(stderr, "Password auth appeared to succeed but " - "libssh2_userauth_authenticated returned 0\n"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_fails_with_wrong_key.c b/tests/test_public_key_auth_fails_with_wrong_key.c deleted file mode 100644 index 0a10e888..00000000 --- a/tests/test_public_key_auth_fails_with_wrong_key.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "runner.h" - -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ -static const char *KEY_FILE_PRIVATE = "key_dsa_wrong"; -static const char *KEY_FILE_PUBLIC = "key_dsa_wrong.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - NULL); - if(rc == 0) { - fprintf(stderr, "Public-key auth succeeded with wrong key\n"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_dsa_key.c b/tests/test_public_key_auth_succeeds_with_correct_dsa_key.c deleted file mode 100644 index eace1e33..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_dsa_key.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *KEY_FILE_PRIVATE = "key_dsa"; -static const char *KEY_FILE_PUBLIC = "key_dsa.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), NULL); - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_ecdsa_key.c b/tests/test_public_key_auth_succeeds_with_correct_ecdsa_key.c deleted file mode 100644 index 31e77050..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_ecdsa_key.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *KEY_FILE_PRIVATE = "key_ecdsa"; -static const char *KEY_FILE_PUBLIC = "key_ecdsa.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - const char *userauth_list = NULL; - - userauth_list = libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - NULL); - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_ed25519_key.c b/tests/test_public_key_auth_succeeds_with_correct_ed25519_key.c deleted file mode 100644 index 1eab9f71..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_ed25519_key.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *KEY_FILE_PRIVATE = "key_ed25519"; -static const char *KEY_FILE_PUBLIC = "key_ed25519.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - const char *userauth_list = NULL; - - userauth_list = libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - NULL); - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem.c b/tests/test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem.c deleted file mode 100644 index f594d9f7..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem.c +++ /dev/null @@ -1,96 +0,0 @@ -#include "runner.h" - -#include - -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ -static const char *KEY_FILE_ED25519_PRIVATE = "key_ed25519"; - -static int read_file(const char *path, char **buf, size_t *len); - -int test(LIBSSH2_SESSION *session) -{ - int rc; - char *buffer = NULL; - size_t len = 0; - const char *userauth_list = NULL; - - userauth_list = libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - if(read_file(srcdir_path(KEY_FILE_ED25519_PRIVATE), &buffer, &len)) { - fprintf(stderr, "Reading key file failed."); - return 1; - } - - rc = libssh2_userauth_publickey_frommemory(session, - USERNAME, strlen(USERNAME), - NULL, 0, - buffer, len, - NULL); - - free(buffer); - - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} - -static int read_file(const char *path, char **out_buffer, size_t *out_len) -{ - FILE *fp = NULL; - char *buffer = NULL; - size_t len = 0; - - if(!out_buffer || !out_len || !path) { - fprintf(stderr, "invalid params."); - return 1; - } - - *out_buffer = NULL; - *out_len = 0; - - fp = fopen(path, "r"); - - if(!fp) { - fprintf(stderr, "File could not be read."); - return 1; - } - - fseek(fp, 0L, SEEK_END); - len = ftell(fp); - rewind(fp); - - buffer = calloc(1, len + 1); - if(!buffer) { - fclose(fp); - fprintf(stderr, "Could not alloc memory."); - return 1; - } - - if(1 != fread(buffer, len, 1, fp)) { - fclose(fp); - free(buffer); - fprintf(stderr, "Could not read file into memory."); - return 1; - } - - fclose(fp); - - *out_buffer = buffer; - *out_len = len; - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key.c b/tests/test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key.c deleted file mode 100644 index 1d5debf7..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *PASSWORD = "libssh2"; -static const char *KEY_FILE_PRIVATE = "key_ed25519_encrypted"; -static const char *KEY_FILE_PUBLIC = "key_ed25519_encrypted.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - const char *userauth_list = NULL; - - userauth_list = libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - PASSWORD); - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_encrypted_rsa_key.c b/tests/test_public_key_auth_succeeds_with_correct_encrypted_rsa_key.c deleted file mode 100644 index e254844b..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_encrypted_rsa_key.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *PASSWORD = "libssh2"; -static const char *KEY_FILE_PRIVATE = "key_rsa_encrypted"; -static const char *KEY_FILE_PUBLIC = "key_rsa_encrypted.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - PASSWORD); - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_rsa_key.c b/tests/test_public_key_auth_succeeds_with_correct_rsa_key.c deleted file mode 100644 index ff31ae8c..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_rsa_key.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *KEY_FILE_PRIVATE = "key_rsa"; -static const char *KEY_FILE_PUBLIC = "key_rsa.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - NULL); - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_rsa_openssh_key.c b/tests/test_public_key_auth_succeeds_with_correct_rsa_openssh_key.c deleted file mode 100644 index 3d4b8d68..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_rsa_openssh_key.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *KEY_FILE_PRIVATE = "key_rsa_openssh"; -static const char *KEY_FILE_PUBLIC = "key_rsa_openssh.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - NULL); - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_signed_ecdsa_key.c b/tests/test_public_key_auth_succeeds_with_correct_signed_ecdsa_key.c deleted file mode 100644 index 4a0cec33..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_signed_ecdsa_key.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *KEY_FILE_PRIVATE = "signed_key_ecdsa"; -static const char *KEY_FILE_PUBLIC = "signed_key_ecdsa-cert.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - const char *userauth_list = NULL; - - userauth_list = libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - NULL); - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_public_key_auth_succeeds_with_correct_signed_rsa_key.c b/tests/test_public_key_auth_succeeds_with_correct_signed_rsa_key.c deleted file mode 100644 index 05ecbe2b..00000000 --- a/tests/test_public_key_auth_succeeds_with_correct_signed_rsa_key.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "runner.h" - -/* configured in Dockerfile */ -static const char *USERNAME = "libssh2"; -static const char *KEY_FILE_PRIVATE = "signed_key_rsa"; -static const char *KEY_FILE_PUBLIC = "signed_key_rsa-cert.pub"; - -int test(LIBSSH2_SESSION *session) -{ - int rc; - - const char *userauth_list = - libssh2_userauth_list(session, USERNAME, - (unsigned int)strlen(USERNAME)); - if(!userauth_list) { - print_last_session_error("libssh2_userauth_list"); - return 1; - } - - if(!strstr(userauth_list, "publickey")) { - fprintf(stderr, "'publickey' was expected in userauth list: %s\n", - userauth_list); - return 1; - } - - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), - NULL); - if(rc) { - print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); - return 1; - } - - return 0; -} diff --git a/tests/test_read.c b/tests/test_read.c index c9ee3b7b..2058e63d 100644 --- a/tests/test_read.c +++ b/tests/test_read.c @@ -2,7 +2,7 @@ #include "runner.h" -/* configured in Dockerfile */ +/* set in Dockerfile */ static const char *USERNAME = "libssh2"; static const char *KEY_FILE_PRIVATE = "key_rsa"; static const char *KEY_FILE_PUBLIC = "key_rsa.pub"; @@ -43,9 +43,11 @@ int test(LIBSSH2_SESSION *session) return 1; } - rc = libssh2_userauth_publickey_fromfile_ex( - session, USERNAME, (unsigned int)strlen(USERNAME), - srcdir_path(KEY_FILE_PUBLIC), srcdir_path(KEY_FILE_PRIVATE), NULL); + rc = libssh2_userauth_publickey_fromfile_ex(session, USERNAME, + (unsigned int)strlen(USERNAME), + srcdir_path(KEY_FILE_PUBLIC), + srcdir_path(KEY_FILE_PRIVATE), + NULL); if(rc) { print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); return 1; diff --git a/tests/simple.c b/tests/test_simple.c similarity index 100% rename from tests/simple.c rename to tests/test_simple.c diff --git a/tests/ssh2.c b/tests/test_ssh2.c similarity index 100% rename from tests/ssh2.c rename to tests/test_ssh2.c