Skip to content

Commit b8f3260

Browse files
committed
Merge branch 'master' into florian/remove-mutex
2 parents f831259 + 369c3fb commit b8f3260

File tree

163 files changed

+3257
-2429
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

163 files changed

+3257
-2429
lines changed

.circleci/continue_config.yml

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ commands:
376376
default: /bin/bash -eo pipefail
377377
steps:
378378
- run:
379-
name: Append build id to version number
379+
name: Append build id to version number and bump it
380380
shell: << parameters.shell >>
381381
command: |
382382
githash="${CIRCLE_SHA1?}"
@@ -387,8 +387,20 @@ commands:
387387
if [[ "$CIRCLE_BRANCH" =~ "ddtrace-" ]] ; then
388388
echo "Release branch detected; not adding git sha1 to version number."
389389
else
390-
echo -n "+$githash" >>VERSION
391-
echo "Appended +$githash to version number."
390+
version=$(cat VERSION)
391+
# if we have e.g. a beta suffix, just strip it
392+
if [[ $version == *-* ]]; then
393+
version=${version%-*}
394+
else
395+
# otherwise increment minor version
396+
parts=($(echo -n "$version" | tr '.' '\n'))
397+
parts[1]=$((parts[1]+1))
398+
parts[2]=0
399+
version=$(export IFS=.; (echo "${parts[*]}"))
400+
fi
401+
version="$version+$githash"
402+
echo -n "$version" > VERSION
403+
echo "Set version number to $version."
392404
fi
393405
394406
@@ -3708,23 +3720,19 @@ jobs:
37083720
- git_checkout
37093721
- append_build_id
37103722
- setup_docker:
3711-
docker_image: "datadog/libddwaf:toolchain"
3723+
docker_image: "public.ecr.aws/b1o7r7e0/nginx_musl_toolchain"
37123724
- run: mkdir -p appsec_$(uname -m)
3713-
- run:
3714-
name: Create clang symlinks
3715-
command: |
3716-
ln -s /usr/bin/clang++-16 /usr/bin/clang++
3717-
ln -s /usr/bin/clang-16 /usr/bin/clang
3718-
ln -s /usr/bin/clang-cpp-16 /usr/bin/clang-cpp
37193725
- run:
37203726
name: Build
37213727
command: |
37223728
git config --global --add safe.directory $(pwd)/appsec/third_party/libddwaf
37233729
mkdir -p appsec/build ; cd appsec/build
3724-
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDD_APPSEC_BUILD_EXTENSION=OFF -DCMAKE_TOOLCHAIN_FILE=$(pwd)/../cmake/Toolchain.$(uname -m).cmake
3730+
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDD_APPSEC_BUILD_EXTENSION=OFF \
3731+
-DDD_APPSEC_ENABLE_PATCHELF_LIBC=ON \
3732+
-DCMAKE_TOOLCHAIN_FILE=/sysroot/$(arch)-none-linux-musl/Toolchain.cmake
37253733
make -j $(nproc)
3726-
objcopy --compress-debug-sections ddappsec-helper
3727-
cp -v ddappsec-helper ../../appsec_$(uname -m)/ddappsec-helper
3734+
objcopy --compress-debug-sections libddappsec-helper.so
3735+
cp -v libddappsec-helper.so ../../appsec_$(uname -m)/libddappsec-helper.so
37283736
- run:
37293737
name: Test
37303738
command: |

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ M4_FILES = $(shell find m4 -name '*.m4*' | awk '{ printf "$(BUILD_DIR)/%s\n", $$
4646
XDEBUG_SO_FILE = $(shell find $(shell php-config --extension-dir) -type f -name "xdebug*.so" -exec basename {} \; | tail -n 1)
4747

4848
# Make 'sed -i' portable
49-
ifeq ($(shell uname),Darwin)
50-
SED_I = sed -i ''
51-
else
49+
ifeq ($(shell { sed --version 2>&1 || echo ''; } | grep GNU > /dev/null && echo GNU || true),GNU)
5250
SED_I = sed -i
51+
else
52+
SED_I = sed -i ''
5353
endif
5454

5555
all: $(BUILD_DIR)/configure $(SO_FILE)

appsec/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,15 @@ cd build
7474
cmake ..
7575
make -j
7676
```
77-
This will produce the extension, `ddappsec.so` and the helper process `ddappsec-helper`.
77+
This will produce the extension, `ddappsec.so` and the helper library `libddappsec-helper.so`.
7878
7979
Alternatively, to build the extension but not the helper, you can disable the helper build on the cmake step:
8080
```
81-
cmake .. -DDD_APPSEC_BUILD_HELPER=OFF
81+
cmake .. -DDD_APPSEC_BUILD_HELPER=OFF
8282
```
8383
Similarly, to build the helper but not the extension:
8484
```
85-
cmake .. DDD_APPSEC_BUILD_EXTENSION=OFF
85+
cmake .. DDD_APPSEC_BUILD_EXTENSION=OFF
8686
```
8787
8888
#### Testing the extension

appsec/cmake/Toolchain.aarch64.cmake

Lines changed: 0 additions & 25 deletions
This file was deleted.

appsec/cmake/Toolchain.x86_64.cmake

Lines changed: 0 additions & 25 deletions
This file was deleted.

appsec/cmake/ddtrace.cmake

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,39 @@ add_custom_target(libdatadog_stamp
1818
BYPRODUCT ${LIBDATADOG_STAMP_FILE}
1919
)
2020

21-
set(EXPORTS_FILE "${CMAKE_BINARY_DIR}/exports.version")
21+
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
22+
set(EXPORTS_FILE "${CMAKE_BINARY_DIR}/ddtrace_exports.version")
2223
add_custom_target(ddtrace_exports
2324
COMMAND bash -c "{ echo -e '{\\nglobal:'; sed 's/$/;/' '${CMAKE_SOURCE_DIR}'/../ddtrace.sym; echo -e 'local:\\n*;\\n};'; } > '${EXPORTS_FILE}'"
2425
BYPRODUCT ${EXPORTS_FILE}
2526
DEPENDS ${CMAKE_SOURCE_DIR}/../ddtrace.sym
2627
VERBATIM
2728
)
29+
elseif(APPLE)
30+
set(EXPORTS_FILE "${CMAKE_BINARY_DIR}/ddtrace_exports.sym")
31+
add_custom_target(ddtrace_exports
32+
COMMAND bash -c "sed 's/^/_/' '${CMAKE_SOURCE_DIR}'/../ddtrace.sym > '${EXPORTS_FILE}'"
33+
BYPRODUCT ${EXPORTS_FILE}
34+
DEPENDS ${CMAKE_SOURCE_DIR}/../ddtrace.sym
35+
VERBATIM
36+
)
37+
endif()
38+
39+
file(READ "${CMAKE_SOURCE_DIR}/../VERSION" VERSION_CONTENTS)
40+
string(STRIP "${VERSION_CONTENTS}" PHP_DDTRACE_VERSION)
41+
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/gen_ddtrace/ext")
42+
set(VERSION_H_PATH "${CMAKE_BINARY_DIR}/gen_ddtrace/ext/version.h")
43+
44+
add_custom_command(
45+
OUTPUT "${VERSION_H_PATH}"
46+
COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --switch= --green "Updating version.h"
47+
COMMAND ${CMAKE_COMMAND} -E remove -f "${VERSION_H_PATH}"
48+
COMMAND ${CMAKE_COMMAND} -E touch "${VERSION_H_PATH}"
49+
COMMAND printf "\\#ifndef PHP_DDTRACE_VERSION\\\\n\\#define PHP_DDTRACE_VERSION \"%s\"\\\\n\\#endif" "'\"${PHP_DDTRACE_VERSION}\"'" >> "${VERSION_H_PATH}"
50+
DEPENDS "${CMAKE_SOURCE_DIR}/../VERSION"
51+
COMMENT "Generating version.h"
52+
)
53+
add_custom_target(update_version_h ALL DEPENDS "${VERSION_H_PATH}")
2854

2955
ExternalProject_Add(components_rs_proj
3056
PREFIX ${CMAKE_BINARY_DIR}/components_rs
@@ -99,8 +125,15 @@ set_target_properties(ddtrace PROPERTIES
99125
OUTPUT_NAME ddtrace
100126
DEBUG_POSTFIX ""
101127
PREFIX "")
102-
target_compile_options(ddtrace PRIVATE -fms-extensions)
103-
target_link_options(ddtrace PRIVATE "-Wl,--version-script=${EXPORTS_FILE}")
128+
target_compile_options(ddtrace PRIVATE -fms-extensions -Wno-microsoft-anon-tag)
129+
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
130+
target_compile_definitions(ddtrace PRIVATE _GNU_SOURCE)
131+
target_link_options(ddtrace PRIVATE "-Wl,--version-script=${EXPORTS_FILE}")
132+
elseif(APPLE)
133+
target_link_options(ddtrace PRIVATE "-exported_symbols_list" "${EXPORTS_FILE}")
134+
else()
135+
message(FATAL_ERROR "Only Linux and Apple supported")
136+
endif()
104137
target_link_libraries(ddtrace PRIVATE PhpConfig components_rs ${CURL_LIBRARIES})
105138
if(CURL_DEFINITIONS)
106139
target_compile_definitions(ddtrace PRIVATE ${CURL_DEFINITIONS})
@@ -114,7 +147,8 @@ target_include_directories(ddtrace PRIVATE
114147
${CMAKE_SOURCE_DIR}/../ext
115148
${CMAKE_SOURCE_DIR}/../ext/vendor
116149
${CMAKE_SOURCE_DIR}/../ext/vendor/mt19937
150+
${CMAKE_BINARY_DIR}/gen_ddtrace
117151
)
118-
add_dependencies(ddtrace ddtrace_exports)
152+
add_dependencies(ddtrace ddtrace_exports update_version_h)
119153

120154
patch_away_libc(ddtrace)

appsec/cmake/extension.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ set_target_properties(extension PROPERTIES
2424
target_compile_definitions(extension PRIVATE TESTING=1 ZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -D_GNU_SOURCE)
2525

2626
target_link_libraries(extension PRIVATE mpack PhpConfig zai)
27+
target_include_directories(extension PRIVATE ..)
2728

2829
macro(target_linker_flag_conditional target) # flags as argv
2930
try_compile(LINKER_HAS_FLAG "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/check.c"

appsec/cmake/helper.cmake

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,56 @@ configure_file(src/helper/version.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/src/helper/
1010
set(HELPER_SOURCE_DIR src/helper)
1111
set(HELPER_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/helper)
1212

13-
file(GLOB_RECURSE HELPER_SOURCE ${HELPER_SOURCE_DIR}/*.cpp)
13+
file(GLOB_RECURSE HELPER_SOURCE CONFIGURE_DEPENDS
14+
${HELPER_SOURCE_DIR}/*.cpp ${HELPER_SOURCE_DIR}/*.c)
1415
list(FILTER HELPER_SOURCE EXCLUDE REGEX "^.*main\.cpp$")
1516

1617
add_library(helper_objects OBJECT ${HELPER_SOURCE})
1718
set_target_properties(helper_objects PROPERTIES
19+
CXX_VISIBILITY_PRESET hidden
20+
CXX_STANDARD 20
21+
CXX_STANDARD_REQUIRED YES
1822
POSITION_INDEPENDENT_CODE 1)
1923
target_include_directories(helper_objects PUBLIC ${HELPER_INCLUDE_DIR})
2024
target_compile_definitions(helper_objects PUBLIC SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE)
25+
target_compile_options(helper_objects PRIVATE -ftls-model=global-dynamic)
2126
target_link_libraries(helper_objects PUBLIC libddwaf_objects pthread spdlog cpp-base64 msgpack_c RapidJSON::rapidjson Boost::system zlibstatic)
2227

23-
add_executable(ddappsec-helper src/helper/main.cpp
24-
$<TARGET_OBJECTS:helper_objects>
25-
$<TARGET_OBJECTS:libddwaf_objects>)
28+
add_library(ddappsec-helper SHARED
29+
src/helper/main.cpp
30+
$<TARGET_OBJECTS:helper_objects>
31+
$<TARGET_OBJECTS:libddwaf_objects>)
2632
target_link_libraries(ddappsec-helper helper_objects) # for its PUBLIC deps
33+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
34+
target_compile_options(ddappsec-helper PRIVATE -ftls-model=global-dynamic)
35+
# Bind symbols lookup of symbols defined in the library to the library itself
36+
# also avoids relocation problems with libc++.a on linux/aarch64
37+
target_link_options(ddappsec-helper PRIVATE -Wl,-Bsymbolic)
38+
endif()
39+
set_target_properties(ddappsec-helper PROPERTIES
40+
CXX_VISIBILITY_PRESET hidden
41+
CXX_STANDARD 20
42+
CXX_STANDARD_REQUIRED YES
43+
POSITION_INDEPENDENT_CODE 1
44+
DEBUG_POSTFIX ""
45+
SUFFIX .so
46+
)
47+
48+
patch_away_libc(ddappsec-helper)
2749

2850
try_compile(STDLIBXX_FS_NO_LIB_NEEDED ${CMAKE_CURRENT_BINARY_DIR}
2951
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_fslib.cpp
30-
CXX_STANDARD 17
52+
CXX_STANDARD 20
3153
CXX_STANDARD_REQUIRED TRUE)
3254
try_compile(STDLIBXX_FS_NEEDS_STDCXXFS ${CMAKE_CURRENT_BINARY_DIR}
55+
3356
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_fslib.cpp
34-
CXX_STANDARD 17
57+
CXX_STANDARD 20
3558
CXX_STANDARD_REQUIRED TRUE
3659
LINK_LIBRARIES stdc++fs)
3760
try_compile(STDLIBXX_FS_NEEDS_CXXFS ${CMAKE_CURRENT_BINARY_DIR}
3861
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_fslib.cpp
39-
CXX_STANDARD 17
62+
CXX_STANDARD 20
4063
CXX_STANDARD_REQUIRED TRUE
4164
LINK_LIBRARIES c++fs)
4265
if(NOT STDLIBXX_FS_NO_LIB_NEEDED)

appsec/cmake/patchelf.cmake

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
function(patch_away_libc target)
2-
if (NOT ${DD_APPSEC_ENABLE_PATCHELF_LIBC})
2+
if(NOT ${DD_APPSEC_ENABLE_PATCHELF_LIBC})
33
return()
44
endif()
55

@@ -8,10 +8,15 @@ function(patch_away_libc target)
88
endif()
99

1010
find_program(PATCHELF patchelf)
11-
if (PATCHELF STREQUAL "PATCHELF-NOTFOUND")
11+
find_program(READELF readelf)
12+
if(PATCHELF STREQUAL "PATCHELF-NOTFOUND")
1213
message(WARNING "Patchelf not found. Can't build glibc + musl binaries")
1314
else()
14-
add_custom_command(TARGET ${target} POST_BUILD
15-
COMMAND patchelf --remove-needed libc.so $<TARGET_FILE:${target}> ${SYMBOL_FILE})
15+
if(READELF STREQUAL "READELF-NOTFOUND")
16+
message(WARNING "readelf not found. Can't build glibc + musl binaries")
17+
else()
18+
add_custom_command(TARGET ${target} POST_BUILD
19+
COMMAND ${CMAKE_SOURCE_DIR}/cmake/strip_libc.sh "${PATCHELF}" "${READELF}" $<TARGET_FILE:${target}>)
20+
endif()
1621
endif()
1722
endfunction()

appsec/cmake/strip_libc.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
main() {
6+
local patchelf=$1
7+
local readelf=$2
8+
local target=$3
9+
10+
"$patchelf" $(
11+
"$readelf" -d "$target" 2>/dev/null | grep libc\\. | grep NEEDED | \
12+
awk -F'[][]' '{print "--remove-needed " $2;}' | xargs
13+
) \
14+
"$target"
15+
}
16+
17+
main "$@"

appsec/src/extension/commands_helpers.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ static dd_result _dd_command_exec(dd_conn *nonnull conn, bool check_cred,
175175
return dd_error;
176176
}
177177
if (res != dd_success && res != dd_should_block &&
178-
res != dd_should_redirect) {
178+
res != dd_should_redirect && res != dd_should_record) {
179179
mlog(dd_log_warning, "Processing for command %.*s failed: %s",
180180
NAME_L, dd_result_to_string(res));
181181
return res;

appsec/src/extension/configuration.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include "ip_extraction.h"
1313
#include "logging.h"
1414
#include "php_objects.h"
15-
#include "tags.h"
15+
#include "user_tracking.h"
1616
#include "zai_string/string.h"
1717

1818
#define DD_TO_DATADOG_INC 5 /* "DD" expanded to "datadog" */

appsec/src/extension/configuration.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ extern bool runtime_config_first_init;
4545
CONFIG(CUSTOM(INT), DD_APPSEC_LOG_LEVEL, "warn", .parser = dd_parse_log_level) \
4646
SYSCFG(STRING, DD_APPSEC_LOG_FILE, "php_error_reporting") \
4747
SYSCFG(BOOL, DD_APPSEC_HELPER_LAUNCH, "true") \
48-
CONFIG(STRING, DD_APPSEC_HELPER_PATH, DD_BASE("bin/ddappsec-helper")) \
48+
CONFIG(STRING, DD_APPSEC_HELPER_PATH, DD_BASE("bin/libddappsec-helper.so")) \
4949
CONFIG(STRING, DD_APPSEC_HELPER_RUNTIME_PATH, "/tmp", .ini_change = dd_on_runtime_path_update) \
5050
SYSCFG(STRING, DD_APPSEC_HELPER_LOG_FILE, "/dev/null") \
51+
SYSCFG(STRING, DD_APPSEC_HELPER_LOG_LEVEL, "info") \
5152
CONFIG(CUSTOM(SET), DD_EXTRA_SERVICES, "", .parser = _parse_list) \
52-
CONFIG(STRING, DD_APPSEC_HELPER_EXTRA_ARGS, "") \
5353
CONFIG(STRING, DD_SERVICE, "") \
5454
CONFIG(STRING, DD_ENV, "") \
5555
CONFIG(STRING, DD_VERSION, "") \
@@ -60,7 +60,9 @@ extern bool runtime_config_first_init;
6060
CONFIG(INT, DD_APPSEC_MAX_BODY_BUFF_SIZE, "524288") \
6161
CONFIG(STRING, DD_TRACE_AGENT_URL, "") \
6262
CONFIG(BOOL, DD_TRACE_ENABLED, "true") \
63-
CONFIG(CUSTOM(STRING), DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING, "safe", .parser = dd_parse_automated_user_events_tracking) \
63+
CALIAS(CUSTOM(STRING), DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE, "ident", \
64+
CALIASES("DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING"), .parser = dd_parse_user_collection_mode) \
65+
CONFIG(BOOL, DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING_ENABLED, "true") \
6466
CONFIG(STRING, DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML, "") \
6567
CONFIG(STRING, DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON, "") \
6668
CONFIG(DOUBLE, DD_API_SECURITY_REQUEST_SAMPLE_RATE, "0.1", .ini_change = zai_config_system_ini_change) \

0 commit comments

Comments
 (0)