From bfeecddfcb702d33815f0962fbcb8d0d28d8bb2e Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Sun, 21 Jan 2024 14:12:31 +0000 Subject: [PATCH 01/21] Add example rust-based matcher --- CMakeLists.txt | 2 +- src/matcher/is_passwd.hpp | 42 +++++++++++++++++++ src/parser/parser_v2.cpp | 3 ++ third_party/CMakeLists.txt | 2 + third_party/string_checker/.gitignore | 14 +++++++ third_party/string_checker/CMakeLists.txt | 15 +++++++ third_party/string_checker/Cargo.toml | 15 +++++++ .../string_checker/include/string_checker.h | 17 ++++++++ third_party/string_checker/src/lib.rs | 12 ++++++ 9 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 src/matcher/is_passwd.hpp create mode 100644 third_party/string_checker/.gitignore create mode 100644 third_party/string_checker/CMakeLists.txt create mode 100644 third_party/string_checker/Cargo.toml create mode 100644 third_party/string_checker/include/string_checker.h create mode 100644 third_party/string_checker/src/lib.rs diff --git a/CMakeLists.txt b/CMakeLists.txt index d6e873371..b5defa6c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,7 +74,7 @@ elseif(WIN32) list(APPEND LIBDDWAF_INTERFACE_LIBRARIES ws2_32) endif() -set(LIBDDWAF_PRIVATE_LIBRARIES "") +set(LIBDDWAF_PRIVATE_LIBRARIES "libstring_checker") if(NOT MSVC AND LIBDDWAF_TESTING AND LIBDDWAF_TEST_COVERAGE) list(APPEND LIBDDWAF_PRIVATE_LIBRARIES gcov) endif() diff --git a/src/matcher/is_passwd.hpp b/src/matcher/is_passwd.hpp new file mode 100644 index 000000000..adfa75895 --- /dev/null +++ b/src/matcher/is_passwd.hpp @@ -0,0 +1,42 @@ +// Unless explicitly stated otherwise all files in this repository are +// dual-licensed under the Apache-2.0 License or BSD-3-Clause License. +// +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2021 Datadog, Inc. + +#pragma once + +#include +#include + +#include "matcher/base.hpp" + +namespace ddwaf::matcher { + +class is_passwd : public base_impl { +public: + is_passwd() = default; + ~is_passwd() override = default; + is_passwd(const is_passwd &) = default; + is_passwd(is_passwd &&) noexcept = default; + is_passwd &operator=(const is_passwd &) = default; + is_passwd &operator=(is_passwd &&) noexcept = default; + +protected: + static constexpr std::string_view to_string_impl() { return ""; } + static constexpr std::string_view name_impl() { return "is_passwd"; } + + static constexpr DDWAF_OBJ_TYPE supported_type_impl() + { + return DDWAF_OBJ_STRING; + } + + [[nodiscard]] std::pair match_impl(std::string_view obtained) const + { + return {check_string(obtained.data()), std::string{obtained}} ; + } + + friend class base_impl; +}; + +} // namespace ddwaf::matcher diff --git a/src/parser/parser_v2.cpp b/src/parser/parser_v2.cpp index d8752e1cc..aae68c45d 100644 --- a/src/parser/parser_v2.cpp +++ b/src/parser/parser_v2.cpp @@ -18,6 +18,7 @@ #include "matcher/equals.hpp" #include "matcher/exact_match.hpp" #include "matcher/ip_match.hpp" +#include "matcher/is_passwd.hpp" #include "matcher/is_sqli.hpp" #include "matcher/is_xss.hpp" #include "matcher/phrase_match.hpp" @@ -82,6 +83,8 @@ std::pair> parse_matcher( matcher = std::make_unique(); } else if (name == "is_sqli") { matcher = std::make_unique(); + } else if (name == "is_passwd") { + matcher = std::make_unique(); } else if (name == "ip_match") { auto it = params.find("list"); if (it == params.end()) { diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 084f61dca..88d290ac3 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -133,3 +133,5 @@ ExternalProject_Add(proj_event_rules set_target_properties(proj_event_rules PROPERTIES EXCLUDE_FROM_ALL TRUE) # vim: et + +add_subdirectory(string_checker) diff --git a/third_party/string_checker/.gitignore b/third_party/string_checker/.gitignore new file mode 100644 index 000000000..6985cf1bd --- /dev/null +++ b/third_party/string_checker/.gitignore @@ -0,0 +1,14 @@ +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt new file mode 100644 index 000000000..ae0c11f9e --- /dev/null +++ b/third_party/string_checker/CMakeLists.txt @@ -0,0 +1,15 @@ +# Files to clean +set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES target) + +add_custom_target( + libstring_checker_build + COMMAND cargo build --release + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Compiling Rust library" +) +set_target_properties(libstring_checker_build PROPERTIES EXCLUDE_FROM_ALL TRUE) + +add_library(libstring_checker STATIC IMPORTED GLOBAL) +set_target_properties(libstring_checker PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/target/release/libstring_checker.a) +target_include_directories(libstring_checker INTERFACE include) +add_dependencies(libstring_checker libstring_checker_build) diff --git a/third_party/string_checker/Cargo.toml b/third_party/string_checker/Cargo.toml new file mode 100644 index 000000000..b4d658fa8 --- /dev/null +++ b/third_party/string_checker/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "string_checker" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[lib] +crate-type = ["staticlib"] + +[profile.release] +opt-level = 'z' # Optimize for size +lto = true +codegen-units = 1 + +[dependencies] diff --git a/third_party/string_checker/include/string_checker.h b/third_party/string_checker/include/string_checker.h new file mode 100644 index 000000000..8e4c8d48c --- /dev/null +++ b/third_party/string_checker/include/string_checker.h @@ -0,0 +1,17 @@ +#ifndef RUST_C_LIB_H +#define RUST_C_LIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +bool check_string(const char *c_string); + +#ifdef __cplusplus +} +#endif + +#endif // RUST_C_LIB_H + diff --git a/third_party/string_checker/src/lib.rs b/third_party/string_checker/src/lib.rs new file mode 100644 index 000000000..c1fc63108 --- /dev/null +++ b/third_party/string_checker/src/lib.rs @@ -0,0 +1,12 @@ +use std::ffi::CStr; +use std::os::raw::c_char; + +#[no_mangle] +pub extern "C" fn check_string(c_string: *const c_char) -> bool { + let c_str = unsafe { + assert!(!c_string.is_null()); + CStr::from_ptr(c_string) + }; + + c_str.to_str().unwrap() == "/etc/passwd" +} From 39e8869c92061e0cbd9aa2c6265ef5e7cb192d80 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Sun, 21 Jan 2024 14:18:30 +0000 Subject: [PATCH 02/21] Add cargo to build amd64 linux --- docker/libddwaf/build/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/libddwaf/build/Dockerfile b/docker/libddwaf/build/Dockerfile index 310adfbae..adbaf3030 100644 --- a/docker/libddwaf/build/Dockerfile +++ b/docker/libddwaf/build/Dockerfile @@ -3,6 +3,7 @@ FROM datadog/libddwaf:toolchain AS libddwaf_build ARG ARCH COPY . /libddwaf +RUN apt-get update ; apt-get install -y cargo RUN mkdir -p build RUN cd build && cmake \ From b9b07329d965f21a7fa050fd3dbc57fc334c426c Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:23:38 +0000 Subject: [PATCH 03/21] Add cargo --- docker/libddwaf/build/Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docker/libddwaf/build/Dockerfile b/docker/libddwaf/build/Dockerfile index adbaf3030..24ca17d1b 100644 --- a/docker/libddwaf/build/Dockerfile +++ b/docker/libddwaf/build/Dockerfile @@ -3,7 +3,9 @@ FROM datadog/libddwaf:toolchain AS libddwaf_build ARG ARCH COPY . /libddwaf -RUN apt-get update ; apt-get install -y cargo + +RUN wget https://sh.rustup.rs -O rustup.sh && chmod u+x rustup.sh && ./rustup.sh -y +RUN ls /root/.cargo/bin | xargs bash -c 'ln -s /root/.cargo/bin/$0 /usr/bin/$0' RUN mkdir -p build RUN cd build && cmake \ From 9c3a7aeb4d9dc0d73c27d95da40e5a97bfedcfe4 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:32:41 +0000 Subject: [PATCH 04/21] Specify cargo build byproducts --- third_party/string_checker/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index ae0c11f9e..efa17ebea 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -6,8 +6,8 @@ add_custom_target( COMMAND cargo build --release WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Compiling Rust library" + BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR}/target/release/libstring_checker.a ) -set_target_properties(libstring_checker_build PROPERTIES EXCLUDE_FROM_ALL TRUE) add_library(libstring_checker STATIC IMPORTED GLOBAL) set_target_properties(libstring_checker PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/target/release/libstring_checker.a) From 9320051a67f695e733420e4080405f504c7f6fa5 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:42:59 +0000 Subject: [PATCH 05/21] Remove cargo lto build and merge static objects --- cmake/static.cmake | 1 + third_party/string_checker/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/static.cmake b/cmake/static.cmake index 5fe4c6147..0ecc4754f 100644 --- a/cmake/static.cmake +++ b/cmake/static.cmake @@ -17,6 +17,7 @@ if(LINUX) add_custom_command(TARGET libddwaf_static POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ar_comb COMMAND ${CMAKE_COMMAND} -E chdir ar_comb ${CMAKE_AR} -x $ + COMMAND ${CMAKE_COMMAND} -E chdir ar_comb ${CMAKE_AR} -x $ COMMAND ${CMAKE_COMMAND} -E copy $ ar_comb COMMAND ${CMAKE_AR} -qcs ar_comb/combined${CMAKE_STATIC_LIBRARY_SUFFIX} ar_comb/*.o* diff --git a/third_party/string_checker/Cargo.toml b/third_party/string_checker/Cargo.toml index b4d658fa8..6ae39639a 100644 --- a/third_party/string_checker/Cargo.toml +++ b/third_party/string_checker/Cargo.toml @@ -9,7 +9,7 @@ crate-type = ["staticlib"] [profile.release] opt-level = 'z' # Optimize for size -lto = true +lto = false codegen-units = 1 [dependencies] From b09d4a838777c16cb97e4d98d5613a9436a6f035 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:57:08 +0000 Subject: [PATCH 06/21] Compile for musl --- docker/libddwaf/build/Dockerfile | 1 + third_party/string_checker/CMakeLists.txt | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docker/libddwaf/build/Dockerfile b/docker/libddwaf/build/Dockerfile index 24ca17d1b..9e9dec504 100644 --- a/docker/libddwaf/build/Dockerfile +++ b/docker/libddwaf/build/Dockerfile @@ -6,6 +6,7 @@ COPY . /libddwaf RUN wget https://sh.rustup.rs -O rustup.sh && chmod u+x rustup.sh && ./rustup.sh -y RUN ls /root/.cargo/bin | xargs bash -c 'ln -s /root/.cargo/bin/$0 /usr/bin/$0' +RUN rustup target add x86_64-unknown-linux-musl RUN mkdir -p build RUN cd build && cmake \ diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index efa17ebea..844430eab 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -1,15 +1,17 @@ # Files to clean set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES target) +set(TARGET x86_64-unknown-linux-musl) + add_custom_target( libstring_checker_build - COMMAND cargo build --release + COMMAND cargo build --release --target ${TARGET} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Compiling Rust library" - BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR}/target/release/libstring_checker.a + BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR}/target/${TARGET}/release/libstring_checker.a ) add_library(libstring_checker STATIC IMPORTED GLOBAL) -set_target_properties(libstring_checker PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/target/release/libstring_checker.a) +set_target_properties(libstring_checker PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/target/${TARGET}/release/libstring_checker.a) target_include_directories(libstring_checker INTERFACE include) add_dependencies(libstring_checker libstring_checker_build) From afc8bea5d3daeba20f260ae371f318a99f0d926d Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Sun, 21 Jan 2024 16:05:21 +0000 Subject: [PATCH 07/21] Add musl target --- docker/libddwaf/build/Dockerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docker/libddwaf/build/Dockerfile b/docker/libddwaf/build/Dockerfile index 9e9dec504..1bf0fea16 100644 --- a/docker/libddwaf/build/Dockerfile +++ b/docker/libddwaf/build/Dockerfile @@ -4,9 +4,8 @@ ARG ARCH COPY . /libddwaf -RUN wget https://sh.rustup.rs -O rustup.sh && chmod u+x rustup.sh && ./rustup.sh -y -RUN ls /root/.cargo/bin | xargs bash -c 'ln -s /root/.cargo/bin/$0 /usr/bin/$0' -RUN rustup target add x86_64-unknown-linux-musl +RUN wget https://sh.rustup.rs -O rustup.sh && chmod u+x rustup.sh && ./rustup.sh -y -t x86_64-unknown-linux-musl +RUN ls /root/.cargo/bin | xargs bash -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' RUN mkdir -p build RUN cd build && cmake \ From 1f401a8b493bd7b909984a67d3d1b399a376ebf5 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Sun, 21 Jan 2024 21:39:20 +0000 Subject: [PATCH 08/21] Support other targets --- docker/libddwaf/build/Dockerfile | 2 +- third_party/string_checker/CMakeLists.txt | 35 ++++++++++++++++++++--- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/docker/libddwaf/build/Dockerfile b/docker/libddwaf/build/Dockerfile index 1bf0fea16..104295cef 100644 --- a/docker/libddwaf/build/Dockerfile +++ b/docker/libddwaf/build/Dockerfile @@ -4,7 +4,7 @@ ARG ARCH COPY . /libddwaf -RUN wget https://sh.rustup.rs -O rustup.sh && chmod u+x rustup.sh && ./rustup.sh -y -t x86_64-unknown-linux-musl +RUN wget https://sh.rustup.rs -O rustup.sh && chmod u+x rustup.sh && ./rustup.sh -y -t x86_64-unknown-linux-musl aarch64-unknown-linux-musl armv7-unknown-linux-musleabihf i386-unknown-linux-musl RUN ls /root/.cargo/bin | xargs bash -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' RUN mkdir -p build diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index 844430eab..60ba8cbaf 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -1,17 +1,44 @@ # Files to clean set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES target) -set(TARGET x86_64-unknown-linux-musl) +set(CARGO_BUILD cargo build) + +if (LINUX) + set(TARGET "") + if (${arch} MATCHES "aarch64") + set(TARGET "aarch64-unknown-linux-musl") + elseif(${arch} MATCHES "armv7") + set(TARGET "armv7-unknown-linux-musleabihf") + elseif(${arch} MATCHES "x86_64") + set(TARGET "x86_64-unknown-linux-musl") + elseif(${arch} MATCHES "i386") + set(TARGET "i386-unknown-linux-musl") + endif() + + set(BUILD_BYPRODUCT "${CMAKE_CURRENT_SOURCE_DIR}/target/") + if (${TARGET}) + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/${TARGET}/") + set(CARGO_BUILD ${CARGO_BUILD} --target ${TARGET}) + endif() +endif() + +if (CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo) + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/release/") + set(CARGO_BUILD ${CARGO_BUILD} --release) +else() + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/debug/") +endif() +set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/libstring_checker${CMAKE_STATIC_LIBRARY_SUFFIX}") add_custom_target( libstring_checker_build - COMMAND cargo build --release --target ${TARGET} + COMMAND ${CARGO_BUILD} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Compiling Rust library" - BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR}/target/${TARGET}/release/libstring_checker.a + BYPRODUCTS ${BUILD_BYPRODUCT} ) add_library(libstring_checker STATIC IMPORTED GLOBAL) -set_target_properties(libstring_checker PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/target/${TARGET}/release/libstring_checker.a) +set_target_properties(libstring_checker PROPERTIES IMPORTED_LOCATION ${BUILD_BYPRODUCT}) target_include_directories(libstring_checker INTERFACE include) add_dependencies(libstring_checker libstring_checker_build) From 398cfb883d1b1d0986b802c0aedd65bad36b1e94 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 09:58:12 +0000 Subject: [PATCH 09/21] Fixes --- third_party/string_checker/CMakeLists.txt | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index 60ba8cbaf..202da31c1 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -2,23 +2,16 @@ set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES target) set(CARGO_BUILD cargo build) +set(BUILD_BYPRODUCT "${CMAKE_CURRENT_SOURCE_DIR}/target/") if (LINUX) - set(TARGET "") - if (${arch} MATCHES "aarch64") - set(TARGET "aarch64-unknown-linux-musl") - elseif(${arch} MATCHES "armv7") - set(TARGET "armv7-unknown-linux-musleabihf") - elseif(${arch} MATCHES "x86_64") - set(TARGET "x86_64-unknown-linux-musl") - elseif(${arch} MATCHES "i386") - set(TARGET "i386-unknown-linux-musl") + if (NOT "${CMAKE_C_COMPILER_TARGET}" STREQUAL "") + string(REPLACE "none" "unknown" BUILD_TARGET ${CMAKE_C_COMPILER_TARGET}) endif() - set(BUILD_BYPRODUCT "${CMAKE_CURRENT_SOURCE_DIR}/target/") - if (${TARGET}) - set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/${TARGET}/") - set(CARGO_BUILD ${CARGO_BUILD} --target ${TARGET}) + if (NOT "${BUILD_TARGET}" STREQUAL "") + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/${BUILD_TARGET}/") + set(CARGO_BUILD ${CARGO_BUILD} --target ${BUILD_TARGET}) endif() endif() From 7b6a1a45eac6d71af03aeb5a6d601160142c4a69 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:22:38 +0000 Subject: [PATCH 10/21] Fix i386 target --- docker/libddwaf/build/Dockerfile | 2 +- third_party/string_checker/CMakeLists.txt | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docker/libddwaf/build/Dockerfile b/docker/libddwaf/build/Dockerfile index 104295cef..0dc9cdff0 100644 --- a/docker/libddwaf/build/Dockerfile +++ b/docker/libddwaf/build/Dockerfile @@ -4,7 +4,7 @@ ARG ARCH COPY . /libddwaf -RUN wget https://sh.rustup.rs -O rustup.sh && chmod u+x rustup.sh && ./rustup.sh -y -t x86_64-unknown-linux-musl aarch64-unknown-linux-musl armv7-unknown-linux-musleabihf i386-unknown-linux-musl +RUN wget https://sh.rustup.rs -O rustup.sh && chmod u+x rustup.sh && ./rustup.sh -y -t x86_64-unknown-linux-musl aarch64-unknown-linux-musl armv7-unknown-linux-musleabihf i686-unknown-linux-musl RUN ls /root/.cargo/bin | xargs bash -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' RUN mkdir -p build diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index 202da31c1..562b3c6c5 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -6,7 +6,11 @@ set(BUILD_BYPRODUCT "${CMAKE_CURRENT_SOURCE_DIR}/target/") if (LINUX) if (NOT "${CMAKE_C_COMPILER_TARGET}" STREQUAL "") - string(REPLACE "none" "unknown" BUILD_TARGET ${CMAKE_C_COMPILER_TARGET}) + if ("{CMAKE_C_COMPILER_TARGET}" STREQUAL "i386-none-linux-musl") + set(BUILD_TARGET "i686-unknown-linux-musl") + else() + string(REPLACE "none" "unknown" BUILD_TARGET ${CMAKE_C_COMPILER_TARGET}) + endif() endif() if (NOT "${BUILD_TARGET}" STREQUAL "") From 70cba791bb0c1227163748265a76a38af0a72efa Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:26:09 +0000 Subject: [PATCH 11/21] Typo --- third_party/string_checker/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index 562b3c6c5..5c22f849b 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -6,7 +6,7 @@ set(BUILD_BYPRODUCT "${CMAKE_CURRENT_SOURCE_DIR}/target/") if (LINUX) if (NOT "${CMAKE_C_COMPILER_TARGET}" STREQUAL "") - if ("{CMAKE_C_COMPILER_TARGET}" STREQUAL "i386-none-linux-musl") + if ("${CMAKE_C_COMPILER_TARGET}" STREQUAL "i386-none-linux-musl") set(BUILD_TARGET "i686-unknown-linux-musl") else() string(REPLACE "none" "unknown" BUILD_TARGET ${CMAKE_C_COMPILER_TARGET}) From 0e5c9062a0177f292e7838f01ce16dca58c0454b Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:59:16 +0000 Subject: [PATCH 12/21] Attempt to fix macos cross-build --- .github/workflows/build.yml | 2 ++ third_party/string_checker/CMakeLists.txt | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a18c950a9..60b2f4c16 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -94,6 +94,8 @@ jobs: submodules: recursive - name: Create Build Directory run: cmake -E make_directory ${{ github.workspace }}/build ${{ github.workspace }}/packages + - name: Download cargo arm64 target + run: rustup target add aarch64-apple-darwin - name: Generating Build Scripts run: cmake -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DMACOSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_INSTALL_PREFIX=${{ github.workspace }} -DCPACK_PACKAGE_DIRECTORY=${{ github.workspace }}/packages ${{ github.workspace }} working-directory: ${{ github.workspace }}/build diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index 5c22f849b..c50c8721b 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -12,11 +12,15 @@ if (LINUX) string(REPLACE "none" "unknown" BUILD_TARGET ${CMAKE_C_COMPILER_TARGET}) endif() endif() +endif() - if (NOT "${BUILD_TARGET}" STREQUAL "") - set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/${BUILD_TARGET}/") - set(CARGO_BUILD ${CARGO_BUILD} --target ${BUILD_TARGET}) - endif() +if (APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") + set(BUILD_TARGET "aarch64-apple-darwin") +endif() + +if (NOT "${BUILD_TARGET}" STREQUAL "") + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/${BUILD_TARGET}/") + set(CARGO_BUILD ${CARGO_BUILD} --target ${BUILD_TARGET}) endif() if (CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo) From 3e6011919ff832a9d9ab59668c31bf13d986b70e Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:18:02 +0000 Subject: [PATCH 13/21] Attempt mingw64 build --- docker/libddwaf/gcc/mingw64/Dockerfile | 3 ++- third_party/string_checker/CMakeLists.txt | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docker/libddwaf/gcc/mingw64/Dockerfile b/docker/libddwaf/gcc/mingw64/Dockerfile index bb857da7e..fe3783333 100644 --- a/docker/libddwaf/gcc/mingw64/Dockerfile +++ b/docker/libddwaf/gcc/mingw64/Dockerfile @@ -2,7 +2,8 @@ # win64) FROM alpine:3.14 AS build -RUN apk --update-cache add cmake make mingw-w64-gcc mingw-w64-winpthreads git +RUN apk --update-cache add cmake make mingw-w64-gcc mingw-w64-winpthreads git rustup +RUN rustup-init -y --target x86_64-pc-windows-gnu ARG BUILD_TYPE=Release COPY . /usr/local/src/libddwaf diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index c50c8721b..7c1dc29ac 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -18,6 +18,10 @@ if (APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") set(BUILD_TARGET "aarch64-apple-darwin") endif() +if (MINGW) + set(BUILD_TARGET "x86_64-windows-pc-gnu") +endif() + if (NOT "${BUILD_TARGET}" STREQUAL "") set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/${BUILD_TARGET}/") set(CARGO_BUILD ${CARGO_BUILD} --target ${BUILD_TARGET}) From 3eedc77012a5da3022b9860f500a0fe28ccf909b Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:22:07 +0000 Subject: [PATCH 14/21] Second attempt to build on mingw64 --- docker/libddwaf/gcc/mingw64/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/libddwaf/gcc/mingw64/Dockerfile b/docker/libddwaf/gcc/mingw64/Dockerfile index fe3783333..a657647e2 100644 --- a/docker/libddwaf/gcc/mingw64/Dockerfile +++ b/docker/libddwaf/gcc/mingw64/Dockerfile @@ -5,6 +5,8 @@ FROM alpine:3.14 AS build RUN apk --update-cache add cmake make mingw-w64-gcc mingw-w64-winpthreads git rustup RUN rustup-init -y --target x86_64-pc-windows-gnu +RUN ls /root/.cargo/bin | xargs bash -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' + ARG BUILD_TYPE=Release COPY . /usr/local/src/libddwaf From febcea69c394c8c48c751b7180a016e645285e2b Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:25:37 +0000 Subject: [PATCH 15/21] Third attempt... --- docker/libddwaf/gcc/mingw64/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/libddwaf/gcc/mingw64/Dockerfile b/docker/libddwaf/gcc/mingw64/Dockerfile index a657647e2..5f3fec367 100644 --- a/docker/libddwaf/gcc/mingw64/Dockerfile +++ b/docker/libddwaf/gcc/mingw64/Dockerfile @@ -5,7 +5,7 @@ FROM alpine:3.14 AS build RUN apk --update-cache add cmake make mingw-w64-gcc mingw-w64-winpthreads git rustup RUN rustup-init -y --target x86_64-pc-windows-gnu -RUN ls /root/.cargo/bin | xargs bash -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' +RUN ls /root/.cargo/bin | xargs sh -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' ARG BUILD_TYPE=Release COPY . /usr/local/src/libddwaf From b4b96ac58a91c796d45b679e3079087e6150a20a Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:28:59 +0000 Subject: [PATCH 16/21] Typo --- third_party/string_checker/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index 7c1dc29ac..d4413461c 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -19,7 +19,7 @@ if (APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") endif() if (MINGW) - set(BUILD_TARGET "x86_64-windows-pc-gnu") + set(BUILD_TARGET "x86_64-pc-windows-gnu") endif() if (NOT "${BUILD_TARGET}" STREQUAL "") From 7bc6ffb5a195454014b3c90a72946e9dd380c251 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 13:50:06 +0000 Subject: [PATCH 17/21] Fixes and other --- CMakeLists.txt | 2 +- docker/libddwaf/build/Dockerfile | 2 +- docker/libddwaf/gcc/mingw64/Dockerfile | 2 +- src/matcher/is_passwd.hpp | 9 +++------ 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b5defa6c2..081d7cc1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,7 +70,7 @@ if(LINUX) $<$:rt> $<$:dl> $<$:m>) -elseif(WIN32) +elseif(WIN32 OR MINGW) list(APPEND LIBDDWAF_INTERFACE_LIBRARIES ws2_32) endif() diff --git a/docker/libddwaf/build/Dockerfile b/docker/libddwaf/build/Dockerfile index 0dc9cdff0..a9fbe89dc 100644 --- a/docker/libddwaf/build/Dockerfile +++ b/docker/libddwaf/build/Dockerfile @@ -5,7 +5,7 @@ ARG ARCH COPY . /libddwaf RUN wget https://sh.rustup.rs -O rustup.sh && chmod u+x rustup.sh && ./rustup.sh -y -t x86_64-unknown-linux-musl aarch64-unknown-linux-musl armv7-unknown-linux-musleabihf i686-unknown-linux-musl -RUN ls /root/.cargo/bin | xargs bash -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' +RUN ls /root/.cargo/bin | xargs -n1 bash -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' RUN mkdir -p build RUN cd build && cmake \ diff --git a/docker/libddwaf/gcc/mingw64/Dockerfile b/docker/libddwaf/gcc/mingw64/Dockerfile index 5f3fec367..166f985b0 100644 --- a/docker/libddwaf/gcc/mingw64/Dockerfile +++ b/docker/libddwaf/gcc/mingw64/Dockerfile @@ -5,7 +5,7 @@ FROM alpine:3.14 AS build RUN apk --update-cache add cmake make mingw-w64-gcc mingw-w64-winpthreads git rustup RUN rustup-init -y --target x86_64-pc-windows-gnu -RUN ls /root/.cargo/bin | xargs sh -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' +RUN ls /root/.cargo/bin | xargs -n1 sh -c 'echo "Linking $0" ; ln -s /root/.cargo/bin/$0 /usr/bin/$0' ARG BUILD_TYPE=Release COPY . /usr/local/src/libddwaf diff --git a/src/matcher/is_passwd.hpp b/src/matcher/is_passwd.hpp index adfa75895..775af181c 100644 --- a/src/matcher/is_passwd.hpp +++ b/src/matcher/is_passwd.hpp @@ -6,8 +6,8 @@ #pragma once -#include #include +#include #include "matcher/base.hpp" @@ -26,14 +26,11 @@ class is_passwd : public base_impl { static constexpr std::string_view to_string_impl() { return ""; } static constexpr std::string_view name_impl() { return "is_passwd"; } - static constexpr DDWAF_OBJ_TYPE supported_type_impl() - { - return DDWAF_OBJ_STRING; - } + static constexpr DDWAF_OBJ_TYPE supported_type_impl() { return DDWAF_OBJ_STRING; } [[nodiscard]] std::pair match_impl(std::string_view obtained) const { - return {check_string(obtained.data()), std::string{obtained}} ; + return {check_string(obtained.data()), std::string{obtained}}; } friend class base_impl; From bdc51bd559c845230f79213a33f075e2ec238dd6 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 14:02:11 +0000 Subject: [PATCH 18/21] Attempt windows build fix --- third_party/string_checker/CMakeLists.txt | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/third_party/string_checker/CMakeLists.txt b/third_party/string_checker/CMakeLists.txt index d4413461c..843744250 100644 --- a/third_party/string_checker/CMakeLists.txt +++ b/third_party/string_checker/CMakeLists.txt @@ -2,7 +2,7 @@ set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES target) set(CARGO_BUILD cargo build) -set(BUILD_BYPRODUCT "${CMAKE_CURRENT_SOURCE_DIR}/target/") +set(BUILD_BYPRODUCT "${CMAKE_CURRENT_SOURCE_DIR}/target") if (LINUX) if (NOT "${CMAKE_C_COMPILER_TARGET}" STREQUAL "") @@ -23,18 +23,22 @@ if (MINGW) endif() if (NOT "${BUILD_TARGET}" STREQUAL "") - set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/${BUILD_TARGET}/") + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/${BUILD_TARGET}") set(CARGO_BUILD ${CARGO_BUILD} --target ${BUILD_TARGET}) endif() if (CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo) - set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/release/") + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/release") set(CARGO_BUILD ${CARGO_BUILD} --release) else() - set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/debug/") + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/debug") endif() -set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/libstring_checker${CMAKE_STATIC_LIBRARY_SUFFIX}") +if (MSVC) + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/string_checker${CMAKE_STATIC_LIBRARY_SUFFIX}") +else() + set(BUILD_BYPRODUCT "${BUILD_BYPRODUCT}/libstring_checker${CMAKE_STATIC_LIBRARY_SUFFIX}") +endif() add_custom_target( libstring_checker_build COMMAND ${CARGO_BUILD} From c818efb42ef789e30de9c9727a109753da082a76 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 14:58:29 +0000 Subject: [PATCH 19/21] attempt windows build fix? --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 081d7cc1f..83a65161e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,8 @@ if(LINUX) $<$:m>) elseif(WIN32 OR MINGW) list(APPEND LIBDDWAF_INTERFACE_LIBRARIES ws2_32) +elseif(MSVC) + list(APPEND LIBDDWAF_INTERFACE_LIBRARIES userenv.lib ntdll.lib bcrypt.lib) endif() set(LIBDDWAF_PRIVATE_LIBRARIES "libstring_checker") From f4344487423cb3bca907d94eb97520eb96f71964 Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 15:09:28 +0000 Subject: [PATCH 20/21] Add more windows dependencies --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 83a65161e..fb80813d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,7 +73,7 @@ if(LINUX) elseif(WIN32 OR MINGW) list(APPEND LIBDDWAF_INTERFACE_LIBRARIES ws2_32) elseif(MSVC) - list(APPEND LIBDDWAF_INTERFACE_LIBRARIES userenv.lib ntdll.lib bcrypt.lib) + list(APPEND LIBDDWAF_INTERFACE_LIBRARIES NtDll UserEnv Bcrypt crypt32 wsock32 ws2_32) endif() set(LIBDDWAF_PRIVATE_LIBRARIES "libstring_checker") From 3d37309844efc873bbf028dfe2e1e1614c89578c Mon Sep 17 00:00:00 2001 From: Anil Mahtani <929854+Anilm3@users.noreply.github.com> Date: Mon, 22 Jan 2024 15:40:57 +0000 Subject: [PATCH 21/21] Further attempt to build on windows --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fb80813d2..55d9e37cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,13 +70,11 @@ if(LINUX) $<$:rt> $<$:dl> $<$:m>) -elseif(WIN32 OR MINGW) - list(APPEND LIBDDWAF_INTERFACE_LIBRARIES ws2_32) elseif(MSVC) list(APPEND LIBDDWAF_INTERFACE_LIBRARIES NtDll UserEnv Bcrypt crypt32 wsock32 ws2_32) endif() -set(LIBDDWAF_PRIVATE_LIBRARIES "libstring_checker") +set(LIBDDWAF_PRIVATE_LIBRARIES libstring_checker) if(NOT MSVC AND LIBDDWAF_TESTING AND LIBDDWAF_TEST_COVERAGE) list(APPEND LIBDDWAF_PRIVATE_LIBRARIES gcov) endif()