@@ -456,6 +456,50 @@ static PHP_FUNCTION(datadog_appsec_testing_request_exec)
456
456
RETURN_TRUE ;
457
457
}
458
458
459
+ static PHP_FUNCTION (datadog_appsec_push_address )
460
+ {
461
+ UNUSED (return_value );
462
+ if (!DDAPPSEC_G (active )) {
463
+ mlog (dd_log_debug , "Trying to access to push_address "
464
+ "function while appsec is disabled" );
465
+ return ;
466
+ }
467
+
468
+ zend_string * key = NULL ;
469
+ zval * value = NULL ;
470
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "Sz" , & key , & value ) == FAILURE ) {
471
+ RETURN_FALSE ;
472
+ }
473
+
474
+ zval parameters_zv ;
475
+ zend_array * parameters_arr = zend_new_array (1 );
476
+ ZVAL_ARR (& parameters_zv , parameters_arr );
477
+ zend_hash_add (Z_ARRVAL (parameters_zv ), key , value );
478
+ Z_TRY_ADDREF_P (value );
479
+
480
+ dd_conn * conn = dd_helper_mgr_cur_conn ();
481
+ if (conn == NULL ) {
482
+ zval_ptr_dtor (& parameters_zv );
483
+ mlog_g (dd_log_debug , "No connection; skipping push_address" );
484
+ return ;
485
+ }
486
+
487
+ dd_result res = dd_request_exec (conn , & parameters_zv );
488
+ zval_ptr_dtor (& parameters_zv );
489
+
490
+ if (dd_req_is_user_req ()) {
491
+ if (res == dd_should_block || res == dd_should_redirect ) {
492
+ dd_req_call_blocking_function (res );
493
+ }
494
+ } else {
495
+ if (res == dd_should_block ) {
496
+ dd_request_abort_static_page ();
497
+ } else if (res == dd_should_redirect ) {
498
+ dd_request_abort_redirect ();
499
+ }
500
+ }
501
+ }
502
+
459
503
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX (
460
504
void_ret_bool_arginfo , 0 , 0 , _IS_BOOL , 0 )
461
505
ZEND_END_ARG_INFO ()
@@ -464,9 +508,15 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(request_exec_arginfo, 0, 1, _IS_BOOL, 0)
464
508
ZEND_ARG_INFO (0 , "data" )
465
509
ZEND_END_ARG_INFO ()
466
510
511
+ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX (push_address_arginfo , 0 , 0 , IS_VOID , 1 )
512
+ ZEND_ARG_INFO (0 , key )
513
+ ZEND_ARG_INFO (0 , value )
514
+ ZEND_END_ARG_INFO ()
515
+
467
516
// clang-format off
468
517
static const zend_function_entry functions [] = {
469
518
ZEND_RAW_FENTRY (DD_APPSEC_NS "is_enabled" , PHP_FN (datadog_appsec_is_enabled ), void_ret_bool_arginfo , 0 )
519
+ ZEND_RAW_FENTRY (DD_APPSEC_NS "push_address" , PHP_FN (datadog_appsec_push_address ), push_address_arginfo , 0 )
470
520
PHP_FE_END
471
521
};
472
522
static const zend_function_entry testing_functions [] = {
0 commit comments