.travis.yml
@@ -205,10 +205,12 @@ - libboost-system-dev - libboost-thread-dev - libboost-date-time-dev - python3-pip - doxygen - graphviz script: - make docs - pip3 install sphinx sphinx_rtd_theme breathe sphinx-markdown-tables recommonmark sphinx-rtd-theme - make documentation deploy: provider: pages skip_cleanup: true @@ -216,7 +218,7 @@ keep_history: false verbose: true target_branch: "gh-pages" local_dir: "build/html" local_dir: "build/docs/sphinx" on: branch: develop env: CMakeLists.txt
@@ -20,7 +20,7 @@ project (licensecc VERSION 2.0.0 DESCRIPTION "Copy protection and licensing library" LANGUAGES C CXX) LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -46,7 +46,6 @@ if(UNIX) #this is true for all the linux systems but not for cross compiling "linux->windows" IF(${STATIC_RUNTIME}) set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") #SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") ENDIF(${STATIC_RUNTIME}) IF(NOT OPENSSL_FOUND) MESSAGE(SEND_ERROR "Openssl required in Linux, please install it or specify -DOPENSSL_ROOT") @@ -97,6 +96,10 @@ if(MINGW) list(APPEND EXTERNAL_LIBS "-lcrypt32 -lbcrypt -lws2_32 -liphlpapi") SET(CMAKE_EXE_LINKER_FLAGS "-static") #super ugly bug when cross compiling in cmake 3.16 #IF(CMAKE_CROSSCOMPILING) # link_directories(BEFORE /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32) #ENDIF() endif(MINGW) endif(MSVC) set(main_lib_dest "${PROJECT_NAME}") @@ -129,8 +132,6 @@ message( STATUS "Install prefix : " ${CMAKE_INSTALL_PREFIX}) message( STATUS "Project name : " ${LCC_PROJECT_NAME} ) message( STATUS "Project base dir : " ${LCC_PROJECTS_BASE_DIR}/${LCC_PROJECT_NAME} ) get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES) message( STATUS "Include dirs : " "${inc_dirs}" ) add_subdirectory(src) @@ -160,8 +161,13 @@ message(WARNING "Boost not found, disabling tests") ENDIF(Boost_FOUND) ################################# # Documentation ################################# find_package(Doxygen COMPONENTS dot) IF(Doxygen_FOUND) find_package(Sphinx) IF(Doxygen_FOUND AND Sphinx_FOUND) message(STATUS "Doxygen found, generating docs.") SET(DOXYGEN_EXCLUDE_PATTERNS "*/library/ini/*;*/doc/resources/*") SET(DOXYGEN_DISABLE_INDEX YES) @@ -169,10 +175,25 @@ SET(DOXYGEN_GENERATE_XML YES) SET(DOXYGEN_LAYOUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/doc/DoxygenLayout.xml") doxygen_add_docs(docs doc src include/licensecc COMMENT "doxygen docs") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/doc/resources/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/html") ELSE(Doxygen_FOUND) message(STATUS "Doxygen not found, not generating docs.") ENDIF(Doxygen_FOUND) #file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/doc/resources/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/html") #file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/doc/sphinx/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/doc) set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/docs/sphinx) add_custom_target(documentation COMMAND ${SPHINX_EXECUTABLE} -b html ${SPHINX_SOURCE} ${SPHINX_BUILD} -Dbreathe_projects.licensecc=${CMAKE_CURRENT_BINARY_DIR}/xml WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating documentation with Sphinx") add_dependencies(documentation docs) ELSE(Doxygen_FOUND AND Sphinx_FOUND) message(STATUS "Doxygen or Sphynx not found, not generating docs.") ENDIF(Doxygen_FOUND AND Sphinx_FOUND) install(DIRECTORY ${LCC_INCLUDE_DIR} DESTINATION include/${PROJECT_NAME}) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include) cmake/toolchain-ubuntu-mingw64.cmake
@@ -13,11 +13,15 @@ set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) set(CMAKE_CXX_LINK_EXECUTABLE ${TOOLCHAIN_PREFIX}-g++) # target environment on the build host system # set 1st to dir with the cross compiler's C/C++ headers/libs set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) #if(CMAKE_CROSSCOMPILING) #cross compiling for linux... a crazy bug on my system # link_directories(BEFORE /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32) #endif(CMAKE_CROSSCOMPILING) # modify default behavior of FIND_XXX() commands to # search for headers/libs in the target environment and # search for programs in the build host environment src/CMakeLists.txt
@@ -1,5 +1,3 @@ #for no reason overwrite it (maybe it's manually customized) IF (NOT LCC_PROJECT_MAGIC_NUM) set(LCC_PROJECT_MAGIC_NUM 0) ENDIF (NOT LCC_PROJECT_MAGIC_NUM) src/inspector/CMakeLists.txt
@@ -1,7 +1,8 @@ ADD_EXECUTABLE(inspector inspector.cpp ) target_link_libraries(inspector licensecc_static target_link_libraries(inspector licensecc_static Boost::unit_test_framework Boost::filesystem Boost::system) src/library/CMakeLists.txt
@@ -7,7 +7,7 @@ licensecc.cpp LicenseReader.cpp limits/license_verifier.cpp ini/ConvertUTF.c ini/ConvertUTF.cpp $<TARGET_OBJECTS:hw_identifier> $<TARGET_OBJECTS:locate> $<TARGET_OBJECTS:os> src/library/base/CMakeLists.txt
@@ -3,7 +3,7 @@ StringUtils.cpp file_utils.cpp base64.cpp logger.c logger.cpp ) if(CODE_COVERAGE AND UNIX) src/library/base/logger.cpp
File was renamed from src/library/base/logger.c @@ -5,6 +5,8 @@ #include <stdarg.h> #include <time.h> #ifndef LOG_DISABLED #ifdef __unix__ #include <unistd.h> #define MAX_PATH 255 @@ -69,3 +71,4 @@ logFile = NULL; } } #endif src/library/base/logger.h
@@ -1,12 +1,13 @@ #ifndef logger_INCLUDED #define logger_INCLUDED #ifdef __cplusplus extern "C" { #endif #define LOG_DISABLED 1 #ifndef LOG_DISABLED #include <errno.h> #include <string.h> #ifdef __cplusplus extern "C" { #endif #define clean_errno() (errno == 0 ? "None" : strerror(errno)) src/library/ini/ConvertUTF.cpp
src/library/os/CMakeLists.txt
@@ -7,7 +7,9 @@ cpu_info_common.cpp linux/cpu_info.cpp linux/network.cpp linux/os-linux.c) linux/os-linux.cpp) target_link_libraries(os PUBLIC OpenSSL::Crypto) ELSE(UNIX) add_library(os OBJECT cpu_info_common.cpp windows/cpu_info.cpp @@ -15,8 +17,10 @@ execution_environment_common.cpp windows/execution_environment.cpp windows/isvm/Native.cpp windows/isvm/BIOSReader.cpp windows/os-win.c windows/os-win.cpp windows/network.cpp) target_link_libraries(os PUBLIC OpenSSL::Crypto) ENDIF(UNIX) ELSE(UNIX OR OPENSSL_FOUND) #windows no openssl @@ -27,7 +31,7 @@ execution_environment_common.cpp windows/execution_environment.cpp windows/isvm/Native.cpp windows/isvm/BIOSReader.cpp windows/os-win.c windows/os-win.cpp windows/network.cpp) ENDIF(UNIX OR OPENSSL_FOUND) @@ -35,6 +39,5 @@ add_dependencies( os project_initialize ) if(CODE_COVERAGE AND UNIX) MESSAGE(STATUS "Enabling code coverage") target_compile_options(os PUBLIC -O0 -g --coverage) endif(CODE_COVERAGE AND UNIX) src/library/os/linux/network.cpp
@@ -25,6 +25,8 @@ #include <netpacket/packet.h> #include <stdio.h> #include <unordered_map> #include <string.h> #include <memory.h> #include "../../base/StringUtils.h" #include "../../base/logger.h" src/library/os/linux/os-linux.cpp
src/library/os/openssl/signature_verifier.cpp
@@ -10,9 +10,9 @@ #include <stdlib.h> #include <errno.h> #ifdef _WIN32 #include <windows.h> #endif //#ifdef _WIN32 //#include <windows.h> //#endif #include <public_key.h> src/library/os/windows/isvm/BIOSReader.cpp
@@ -34,7 +34,7 @@ // // Windows // #include <Windows.h> #include <windows.h> #include <tchar.h> int8_t *parse_smbiod_content(int8_t *addr, int8_t **indexes, int32_t *count) { src/library/os/windows/isvm/Native.h
@@ -1,7 +1,7 @@ #pragma once #include <stdint.h> #include <Windows.h> #include <windows.h> struct RawSMBIOSData { src/library/os/windows/network.cpp
@@ -15,7 +15,7 @@ #include <iphlpapi.h> #include <unordered_map> #include <stdio.h> #pragma comment(lib, "IPHLPAPI.lib") //#pragma comment(lib, "IPHLPAPI.lib") #include "../../base/StringUtils.h" #include "../../base/logger.h" @@ -52,7 +52,7 @@ DWORD dwStatus; int adapter_info_size; PIP_ADAPTER_INFO pAdapterInfo; DWORD dwBufLen = sizeof(IP_ADAPTER_INFO); DWORD dwBufLen = sizeof(IP_ADAPTER_INFO); unsigned int i = 3; do { @@ -82,7 +82,7 @@ while (pAdapter) { OsAdapterInfo ai = {}; strncpy(ai.description, pAdapter->Description, min(sizeof(ai.description), MAX_ADAPTER_DESCRIPTION_LENGTH)); min((int)sizeof(ai.description), MAX_ADAPTER_DESCRIPTION_LENGTH)); memcpy(ai.mac_address, pAdapter->Address, 8); translate(pAdapter->IpAddressList.IpAddress.String, ai.ipv4_address); ai.type = IFACE_TYPE_ETHERNET; src/library/os/windows/os-win.cpp
File was renamed from src/library/os/windows/os-win.c @@ -7,7 +7,7 @@ #include <licensecc/datatypes.h> #include <iphlpapi.h> #include <stdio.h> #pragma comment(lib, "IPHLPAPI.lib") //#pragma comment(lib, "IPHLPAPI.lib") unsigned char* unbase64(const char* ascii, int len, int *flen); @@ -64,8 +64,9 @@ if (diskInfos != NULL) { if (ndrives < (int)*disk_info_size) { diskInfos[ndrives].id = ndrives; strncpy(diskInfos[ndrives].device, volName, min(MAX_PATH,sizeof(volName))-1); strncpy(diskInfos[ndrives].label, fileSysName,min(sizeof(diskInfos[ndrives].label), sizeof(fileSysName)) - 1); strncpy(diskInfos[ndrives].device, volName, cmin(MAX_PATH, sizeof(volName)) - 1); strncpy(diskInfos[ndrives].label, fileSysName, cmin(sizeof(diskInfos[ndrives].label), sizeof(fileSysName)) - 1); memcpy(diskInfos[ndrives].disk_sn, &volSerial, sizeof(DWORD)); diskInfos[ndrives].preferred = (szSingleDrive[0] == 'C'); } else { @@ -91,7 +92,7 @@ } *disk_info_size = ndrives; } else { *disk_info_size = min(ndrives, *disk_info_size); *disk_info_size = cmin(ndrives, *disk_info_size); } return return_value; } @@ -105,5 +106,4 @@ } return result; } src/library/os/windows/signature_verifier.cpp
@@ -15,7 +15,7 @@ #include <wincrypt.h> #include <iphlpapi.h> #include <windows.h> #pragma comment(lib, "bcrypt.lib") //#pragma comment(lib, "bcrypt.lib") #include <public_key.h> #include "../../base/logger.h" @@ -140,8 +140,8 @@ vector<uint8_t> signatureBlob = unbase64(signatureBuffer); DWORD dwSigLen = (DWORD) signatureBlob.size(); BYTE* sigBlob = &signatureBlob[0]; BYTE* sigBlob = &signatureBlob[0]; if (NT_SUCCESS(status = BCryptOpenAlgorithmProvider(&hSignAlg, BCRYPT_RSA_ALGORITHM, NULL, 0))) { if ((result = readPublicKey(hSignAlg, &phKey)) == FUNC_RET_OK) { BCRYPT_PKCS1_PADDING_INFO paddingInfo; test/CMakeLists.txt
@@ -1,8 +1,5 @@ #if we're here boost has been found add_definitions(-DBOOST_ALL_NO_LIB) #Disable Boost Microsoft magic, all dependencies are handled by cmake add_definitions(-DBOOST_LIB_DIAGNOSTIC) #Check it is really disabled include_directories(${Boost_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) link_directories ( ${Boost_LIBRARY_DIR} ) configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/../src/templates/licensecc_properties_test.h.in" @@ -11,7 +8,6 @@ file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/include/$<CONFIG>/licensecc_properties_test.h" INPUT "${CMAKE_BINARY_DIR}/licensecc_properties_test.h.tmp") include_directories ( ${CMAKE_BINARY_DIR}/include/$<CONFIG> ) add_subdirectory(library) add_subdirectory(functional) test/library/CMakeLists.txt
@@ -50,9 +50,8 @@ target_link_libraries( test_event_registry licensecc_static base Boost::unit_test_framework Boost::filesystem Boost::system )