Blame tests/CMakeLists.txt

Packit Service 31306d
project(libssh-tests C)
Packit Service 31306d
Packit Service 31306d
if (BSD OR SOLARIS OR OSX)
Packit Service 31306d
    find_package(Argp)
Packit Service 31306d
endif (BSD OR SOLARIS OR OSX)
Packit Service 31306d
Packit Service 31306d
set(TORTURE_LIBRARY torture)
Packit Service 31306d
Packit Service 31306d
include_directories(${OPENSSL_INCLUDE_DIR}
Packit Service 31306d
                    ${CMOCKA_INCLUDE_DIR}
Packit Service 31306d
                    ${ZLIB_INCLUDE_DIR}
Packit Service 31306d
                    ${libssh_BINARY_DIR}
Packit Service 31306d
                    ${libssh_SOURCE_DIR}/src
Packit Service 31306d
                    ${CMAKE_CURRENT_SOURCE_DIR})
Packit Service 31306d
Packit Service 31306d
set(TORTURE_LINK_LIBRARIES
Packit Service 31306d
    ${CMOCKA_LIBRARY}
Packit Service 31306d
    ssh::static)
Packit Service 31306d
Packit Service 31306d
# create test library
Packit Service 31306d
add_library(${TORTURE_LIBRARY}
Packit Service 31306d
            STATIC
Packit Service 31306d
                cmdline.c
Packit Service 31306d
                torture.c
Packit Service 31306d
                torture_key.c
Packit Service 31306d
                torture_pki.c
Packit Service 31306d
                torture_cmocka.c)
Packit Service 31306d
target_link_libraries(${TORTURE_LIBRARY} ${TORTURE_LINK_LIBRARIES})
Packit Service 31306d
target_compile_options(${TORTURE_LIBRARY} PRIVATE
Packit Service 31306d
                       -DSSH_PING_EXECUTABLE="${CMAKE_CURRENT_BINARY_DIR}/ssh_ping"
Packit Service 31306d
)
Packit Service 31306d
Packit Service 31306d
if (ARGP_LIBRARY)
Packit Service 31306d
    target_link_libraries(${TORTURE_LIBRARY}
Packit Service 31306d
        ${ARGP_LIBRARY}
Packit Service 31306d
    )
Packit Service 31306d
endif()
Packit Service 31306d
Packit Service 31306d
set(TEST_TARGET_LIBRARIES
Packit Service 31306d
    ${TORTURE_LIBRARY}
Packit Service 31306d
    ${TORTURE_LINK_LIBRARIES}
Packit Service 31306d
)
Packit Service 31306d
Packit Service 31306d
add_subdirectory(unittests)
Packit Service 31306d
Packit Service 31306d
if (CLIENT_TESTING OR SERVER_TESTING)
Packit Service 31306d
    find_package(socket_wrapper 1.1.5 REQUIRED)
Packit Service 31306d
    find_package(nss_wrapper 1.1.2 REQUIRED)
Packit Service 31306d
    find_package(uid_wrapper 1.2.0 REQUIRED)
Packit Service 31306d
    find_package(pam_wrapper 1.0.1 REQUIRED)
Packit Service 31306d
Packit Service 31306d
    find_program(SSHD_EXECUTABLE
Packit Service 31306d
                 NAME
Packit Service 31306d
                    sshd
Packit Service 31306d
                 PATHS
Packit Service 31306d
                    /sbin
Packit Service 31306d
                    /usr/sbin
Packit Service 31306d
                    /usr/local/sbin)
Packit Service 31306d
    if (NOT SSHD_EXECUTABLE)
Packit Service 31306d
        message(SEND_ERROR "Could not find sshd which is required for client testing")
Packit Service 31306d
    endif()
Packit Service 31306d
Packit Service 31306d
    find_program(SSH_EXECUTABLE NAMES ssh)
Packit Service 31306d
    if (SSH_EXECUTABLE)
Packit Service 31306d
        execute_process(COMMAND ${SSH_EXECUTABLE} -V ERROR_VARIABLE OPENSSH_VERSION_STR)
Packit Service 31306d
        string(REGEX REPLACE "^.*OpenSSH_([0-9]).[0-9].*$" "\\1" OPENSSH_VERSION_MAJOR "${OPENSSH_VERSION_STR}")
Packit Service 31306d
        string(REGEX REPLACE "^.*OpenSSH_[0-9].([0-9]).*$" "\\1" OPENSSH_VERSION_MINOR "${OPENSSH_VERSION_STR}")
Packit Service 31306d
        add_definitions(-DOPENSSH_VERSION_MAJOR=${OPENSSH_VERSION_MAJOR} -DOPENSSH_VERSION_MINOR=${OPENSSH_VERSION_MINOR})
Packit Service 31306d
    endif()
Packit Service 31306d
Packit Service 31306d
    set(LOCAL_USER "nobody")
Packit Service 31306d
    set(LOCAL_UID "65533")
Packit Service 31306d
    find_program(ID_EXECUTABLE NAMES id)
Packit Service 31306d
    find_program(WHO_EXECUTABLE NAMES whoami)
Packit Service 31306d
    if (ID_EXECUTABLE AND WHO_EXECUTABLE)
Packit Service 31306d
        execute_process(COMMAND ${WHO_EXECUTABLE} OUTPUT_VARIABLE LOCAL_USER OUTPUT_STRIP_TRAILING_WHITESPACE)
Packit Service 31306d
        execute_process(COMMAND ${ID_EXECUTABLE} -u OUTPUT_VARIABLE LOCAL_UID OUTPUT_STRIP_TRAILING_WHITESPACE)
Packit Service 31306d
    endif()
Packit Service 31306d
Packit Service 31306d
    # chroot_wrapper
Packit Service 31306d
    add_library(chroot_wrapper SHARED chroot_wrapper.c)
Packit Service 31306d
    set(CHROOT_WRAPPER_LIBRARY ${libssh_BINARY_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}chroot_wrapper${CMAKE_SHARED_LIBRARY_SUFFIX})
Packit Service 31306d
    set(TEST_TARGET_LIBRARIES
Packit Service 31306d
        ${TEST_TARGET_LIBRARIES}
Packit Service 31306d
        chroot_wrapper
Packit Service 31306d
    )
Packit Service 31306d
Packit Service 31306d
    # ssh_ping
Packit Service 31306d
    add_executable(ssh_ping ssh_ping.c)
Packit Service 31306d
    target_compile_options(ssh_ping PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
Packit Service 31306d
    target_link_libraries(ssh_ping ssh::ssh)
Packit Service 31306d
Packit Service 31306d
    # homedir will be used in passwd
Packit Service 31306d
    set(HOMEDIR ${CMAKE_CURRENT_BINARY_DIR}/home)
Packit Service 31306d
Packit Service 31306d
    ### Setup nss_wrapper
Packit Service 31306d
    configure_file(etc/passwd.in ${CMAKE_CURRENT_BINARY_DIR}/etc/passwd @ONLY)
Packit Service 31306d
    configure_file(etc/shadow.in ${CMAKE_CURRENT_BINARY_DIR}/etc/shadow @ONLY)
Packit Service 31306d
    configure_file(etc/group.in ${CMAKE_CURRENT_BINARY_DIR}/etc/group @ONLY)
Packit Service 31306d
    configure_file(etc/hosts.in ${CMAKE_CURRENT_BINARY_DIR}/etc/hosts @ONLY)
Packit Service 31306d
Packit Service 31306d
    ### Setup pam_wrapper
Packit Service 31306d
    configure_file(etc/pam_matrix_passdb.in ${CMAKE_CURRENT_BINARY_DIR}/etc/pam_matrix_passdb @ONLY)
Packit Service 31306d
    configure_file(etc/pam.d/sshd.in ${CMAKE_CURRENT_BINARY_DIR}/etc/pam.d/sshd @ONLY)
Packit Service 31306d
Packit Service 31306d
Packit Service 31306d
    set(TORTURE_ENVIRONMENT "LD_PRELOAD=${SOCKET_WRAPPER_LIBRARY}:${NSS_WRAPPER_LIBRARY}:${UID_WRAPPER_LIBRARY}:${PAM_WRAPPER_LIBRARY}:${CHROOT_WRAPPER_LIBRARY}")
Packit Service 31306d
    list(APPEND TORTURE_ENVIRONMENT UID_WRAPPER=1 UID_WRAPPER_ROOT=1)
Packit Service 31306d
    list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_PASSWD=${CMAKE_CURRENT_BINARY_DIR}/etc/passwd)
Packit Service 31306d
    list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_SHADOW=${CMAKE_CURRENT_BINARY_DIR}/etc/shadow)
Packit Service 31306d
    list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_GROUP=${CMAKE_CURRENT_BINARY_DIR}/etc/group)
Packit Service 31306d
    list(APPEND TORTURE_ENVIRONMENT PAM_WRAPPER_SERVICE_DIR=${CMAKE_CURRENT_BINARY_DIR}/etc/pam.d)
Packit Service 31306d
Packit Service 31306d
    # Give bob some keys
Packit Service 31306d
    file(COPY keys/id_rsa DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/home/bob/.ssh/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Packit Service 31306d
    file(COPY keys/id_rsa.pub DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/home/bob/.ssh/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Packit Service 31306d
    file(COPY keys/id_ecdsa DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/home/bob/.ssh/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Packit Service 31306d
    file(COPY keys/id_ecdsa.pub DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/home/bob/.ssh/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Packit Service 31306d
    file(COPY keys/id_ed25519 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/home/bob/.ssh/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Packit Service 31306d
    file(COPY keys/id_ed25519.pub DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/home/bob/.ssh/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Packit Service 31306d
Packit Service 31306d
    # Allow to auth with bob's public keys on alice account
Packit Service 31306d
    configure_file(keys/id_rsa.pub ${CMAKE_CURRENT_BINARY_DIR}/home/alice/.ssh/authorized_keys @ONLY)
Packit Service 31306d
    # append ECDSA public key
Packit Service 31306d
    file(READ keys/id_ecdsa.pub CONTENTS)
Packit Service 31306d
    file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/home/alice/.ssh/authorized_keys "${CONTENTS}")
Packit Service 31306d
Packit Service 31306d
    # append ed25519 public key
Packit Service 31306d
    file(READ keys/id_ed25519.pub CONTENTS)
Packit Service 31306d
    file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/home/alice/.ssh/authorized_keys "${CONTENTS}")
Packit Service 31306d
Packit Service 31306d
    # Copy the signed key to an alternative directory in bob's homedir.
Packit Service 31306d
    file(COPY keys/certauth/id_rsa DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/home/bob/.ssh_cert/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Packit Service 31306d
    file(COPY keys/certauth/id_rsa.pub DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/home/bob/.ssh_cert/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Packit Service 31306d
    file(COPY keys/certauth/id_rsa-cert.pub DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/home/bob/.ssh_cert/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Packit Service 31306d
Packit Service 31306d
    message(STATUS "TORTURE_ENVIRONMENT=${TORTURE_ENVIRONMENT}")
Packit Service 31306d
endif ()
Packit Service 31306d
Packit Service 31306d
if (WITH_BENCHMARKS)
Packit Service 31306d
    add_subdirectory(benchmarks)
Packit Service 31306d
endif ()
Packit Service 31306d
Packit Service 31306d
if (CLIENT_TESTING)
Packit Service 31306d
    add_subdirectory(client)
Packit Service 31306d
endif ()
Packit Service 31306d
Packit Service 31306d
if (WITH_SERVER AND SERVER_TESTING)
Packit Service 31306d
    add_subdirectory(pkd)
Packit Service 31306d
    add_subdirectory(server)
Packit Service 31306d
endif ()
Packit Service 31306d
Packit Service 31306d
if (FUZZ_TESTING)
Packit Service 31306d
    add_subdirectory(fuzz)
Packit Service 31306d
endif()