Module: Datadog::AppSec::WAF::LibDDWAF
- Extended by:
- FFI::Library
- Defined in:
- lib/datadog/appsec/waf/lib_ddwaf.rb
Overview
FFI-binding for C-libddwaf See github.com/DataDog/libddwaf
Defined Under Namespace
Classes: HandleBuilderConfig, Object, ObjectValueUnion, Result, SizeTPtr, UInt32Ptr, UInt64Ptr
Constant Summary collapse
- DEFAULT_MAX_CONTAINER_SIZE =
256
- DEFAULT_MAX_CONTAINER_DEPTH =
20
- DEFAULT_MAX_STRING_LENGTH =
in bytes, UTF-8 worst case being 4x size in terms of code point
16_384
- DDWAF_MAX_CONTAINER_SIZE =
256
- DDWAF_MAX_CONTAINER_DEPTH =
20
- DDWAF_MAX_STRING_LENGTH =
4096
- DDWAF_RUN_TIMEOUT =
5000
- DDWAF_OBJ_TYPE =
ddwaf::object data structure
enum :ddwaf_obj_invalid, 0, :ddwaf_obj_signed, 1 << 0, :ddwaf_obj_unsigned, 1 << 1, :ddwaf_obj_string, 1 << 2, :ddwaf_obj_array, 1 << 3, :ddwaf_obj_map, 1 << 4, :ddwaf_obj_bool, 1 << 5, :ddwaf_obj_float, 1 << 6, :ddwaf_obj_null, 1 << 7
- ObjectFree =
freeers
attach_function :ddwaf_object_free, [:ddwaf_object], :void
- ObjectNoFree =
::FFI::Pointer::NULL
- DDWAF_RET_CODE =
updating
enum :ddwaf_err_internal, -3, :ddwaf_err_invalid_object, -2, :ddwaf_err_invalid_argument, -1, :ddwaf_ok, 0, :ddwaf_match, 1
- DDWAF_LOG_LEVEL =
logging
enum :ddwaf_log_trace, :ddwaf_log_debug, :ddwaf_log_info, :ddwaf_log_warn, :ddwaf_log_error, :ddwaf_log_off
Class Method Summary collapse
- .local_cpu ⇒ Object
- .local_os ⇒ Object
- .shared_lib_extname ⇒ Object
- .shared_lib_path ⇒ Object
- .source_dir ⇒ Object
Instance Method Summary collapse
-
#ddwaf_object_invalid ⇒ Object
setters.
-
#ddwaf_object_type ⇒ Object
getters.
Class Method Details
.local_cpu ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/datadog/appsec/waf/lib_ddwaf.rb', line 40 def self.local_cpu if RUBY_ENGINE == "jruby" os_arch = java.lang.System.get_property("os.arch") cpu = case os_arch when "amd64" then "x86_64" when "aarch64" then (local_os == "darwin") ? "arm64" : "aarch64" else raise Error, "unsupported JRuby os.arch: #{os_arch.inspect}" end return cpu end Gem::Platform.local.cpu end |
.local_os ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/datadog/appsec/waf/lib_ddwaf.rb', line 24 def self.local_os if RUBY_ENGINE == "jruby" os_name = java.lang.System.get_property("os.name") os = case os_name when /linux/i then "linux" when /mac/i then "darwin" else raise Error, "unsupported JRuby os.name: #{os_name.inspect}" end return os end Gem::Platform.local.os end |
.shared_lib_extname ⇒ Object
60 61 62 63 64 65 66 67 68 |
# File 'lib/datadog/appsec/waf/lib_ddwaf.rb', line 60 def self.shared_lib_extname if Gem::Platform.local.os == "darwin" ".dylib" elsif Gem::Platform.local.os == "java" && java.lang.System.get_property("os.name").match(/mac/i) ".dylib" else ".so" end end |
.shared_lib_path ⇒ Object
70 71 72 73 74 75 |
# File 'lib/datadog/appsec/waf/lib_ddwaf.rb', line 70 def self.shared_lib_path variant = "#{Datadog::AppSec::WAF::VERSION::BASE_STRING}-#{local_os}-#{local_cpu}" libddwaf_dir = File.join(source_dir, "../../../../vendor/libddwaf/libddwaf-#{variant}") File.join(libddwaf_dir, "lib", "libddwaf#{shared_lib_extname}") end |
.source_dir ⇒ Object
56 57 58 |
# File 'lib/datadog/appsec/waf/lib_ddwaf.rb', line 56 def self.source_dir __dir__ || raise("__dir__ is nil: eval?") end |
Instance Method Details
#ddwaf_object_invalid ⇒ Object
setters
153 |
# File 'lib/datadog/appsec/waf/lib_ddwaf.rb', line 153 attach_function :ddwaf_object_invalid, [:ddwaf_object], :ddwaf_object |
#ddwaf_object_type ⇒ Object
getters
175 |
# File 'lib/datadog/appsec/waf/lib_ddwaf.rb', line 175 attach_function :ddwaf_object_type, [:ddwaf_object], DDWAF_OBJ_TYPE |