From dfff8635c0c3cdd2b42c4b747f2976508980c596 Mon Sep 17 00:00:00 2001 From: anmol-ap Date: Wed, 12 Jun 2024 17:05:16 +0530 Subject: [PATCH 1/5] add support for csec php agent --- agent/csec_metadata.h | 24 +++++++++++++----------- agent/php_api_internal.h | 2 ++ agent/php_newrelic.c | 2 ++ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/agent/csec_metadata.h b/agent/csec_metadata.h index a98b79339..80ebd75dc 100644 --- a/agent/csec_metadata.h +++ b/agent/csec_metadata.h @@ -7,15 +7,15 @@ #define CSEC_METADATA_H typedef enum { - NR_PHP_CSEC_METADATA_HIGH_SECURITY = 1, - NR_PHP_CSEC_METADATA_ENTITY_NAME, - NR_PHP_CSEC_METADATA_ENTITY_TYPE, - NR_PHP_CSEC_METADATA_ENTITY_GUID, - NR_PHP_CSEC_METADATA_HOST_NAME, - NR_PHP_CSEC_METADATA_AGENT_RUN_ID, - NR_PHP_CSEC_METADATA_ACCOUNT_ID, - NR_PHP_CSEC_METADATA_LICENSE, - NR_PHP_CSEC_METADATA_PLICENSE + NR_PHP_CSEC_METADATA_HIGH_SECURITY = 1, + NR_PHP_CSEC_METADATA_ENTITY_NAME, + NR_PHP_CSEC_METADATA_ENTITY_TYPE, + NR_PHP_CSEC_METADATA_ENTITY_GUID, + NR_PHP_CSEC_METADATA_HOST_NAME, + NR_PHP_CSEC_METADATA_AGENT_RUN_ID, + NR_PHP_CSEC_METADATA_ACCOUNT_ID, + NR_PHP_CSEC_METADATA_LICENSE, + NR_PHP_CSEC_METADATA_PLICENSE } nr_php_csec_metadata_key_t; /* @@ -33,7 +33,9 @@ typedef enum { * -4 for invalid metadata key * -5 for inability to retrieve metadata value */ -extern int nr_php_csec_get_metadata(const nr_php_csec_metadata_key_t k, char** value); -typedef int (*nr_php_csec_get_metadata_t)(const nr_php_csec_metadata_key_t k, char** value); +extern int nr_php_csec_get_metadata(const nr_php_csec_metadata_key_t k, + char** value); +typedef int (*nr_php_csec_get_metadata_t)(const nr_php_csec_metadata_key_t k, + char** value); #define NR_PHP_CSEC_GET_METADATA "nr_php_csec_get_metadata" #endif diff --git a/agent/php_api_internal.h b/agent/php_api_internal.h index 61db36648..f8ae9a653 100644 --- a/agent/php_api_internal.h +++ b/agent/php_api_internal.h @@ -16,6 +16,8 @@ */ extern PHP_FUNCTION(newrelic_get_request_metadata); +extern PHP_FUNCTION(newrelic_get_security_metadata); + #ifdef ENABLE_TESTING_API /* diff --git a/agent/php_newrelic.c b/agent/php_newrelic.c index 912dff365..fb81d65b2 100644 --- a/agent/php_newrelic.c +++ b/agent/php_newrelic.c @@ -342,9 +342,11 @@ static zend_function_entry newrelic_functions[] = { #ifdef PHP8 PHP_FE(newrelic_get_linking_metadata, newrelic_arginfo_void) PHP_FE(newrelic_get_trace_metadata, newrelic_arginfo_void) + PHP_FE(newrelic_get_security_metadata, newrelic_arginfo_void) #else PHP_FE(newrelic_get_linking_metadata, 0) PHP_FE(newrelic_get_trace_metadata, 0) + PHP_FE(newrelic_get_security_metadata, 0) #endif /* PHP 8 */ /* * Integration test helpers From 2feb6761ee128d4583873a1a846f17482a9aedbd Mon Sep 17 00:00:00 2001 From: anmol-ap Date: Tue, 2 Jul 2024 11:50:34 +0530 Subject: [PATCH 2/5] add trace id and span id to metadata --- agent/csec_metadata.c | 22 +++++++++++++++++++--- agent/csec_metadata.h | 4 +++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/agent/csec_metadata.c b/agent/csec_metadata.c index af8af2d91..cab010301 100644 --- a/agent/csec_metadata.c +++ b/agent/csec_metadata.c @@ -13,15 +13,18 @@ #include "php_includes.h" #include "php_compat.h" #include "php_newrelic.h" +#include "util_strings.h" int nr_php_csec_get_metadata(const nr_php_csec_metadata_key_t key, char** p) { const char* value = NULL; + char* id_value = NULL; + bool is_allocated = false; if (NULL == p) { return -1; } - if (NULL == NRPRG(app)) { + if (NULL == NRPRG(app) || NULL == NRPRG(txn)) { return -2; } @@ -57,15 +60,28 @@ int nr_php_csec_get_metadata(const nr_php_csec_metadata_key_t key, char** p) { case NR_PHP_CSEC_METADATA_PLICENSE: value = NRPRG(app)->plicense; break; + case NR_PHP_CSEC_METADATA_TRACE_ID: + id_value = nr_txn_get_current_trace_id(NRPRG(txn)); + is_allocated = true; + break; + case NR_PHP_CSEC_METADATA_SPAN_ID: + id_value = nr_txn_get_current_span_id(NRPRG(txn)); + is_allocated = true; + break; default: return -4; } - if (NULL == value) { + if (!is_allocated && NULL == value) { return -5; } - *p = nr_strdup(value); + if (is_allocated) { + *p = id_value; + } else { + *p = nr_strdup(value); + } + if (NULL == *p) { return -3; } diff --git a/agent/csec_metadata.h b/agent/csec_metadata.h index 80ebd75dc..bb7c8cc2d 100644 --- a/agent/csec_metadata.h +++ b/agent/csec_metadata.h @@ -15,7 +15,9 @@ typedef enum { NR_PHP_CSEC_METADATA_AGENT_RUN_ID, NR_PHP_CSEC_METADATA_ACCOUNT_ID, NR_PHP_CSEC_METADATA_LICENSE, - NR_PHP_CSEC_METADATA_PLICENSE + NR_PHP_CSEC_METADATA_PLICENSE, + NR_PHP_CSEC_METADATA_TRACE_ID, + NR_PHP_CSEC_METADATA_SPAN_ID } nr_php_csec_metadata_key_t; /* From 89b0bd0c0de82381fcbda9426cbd6e912949086e Mon Sep 17 00:00:00 2001 From: Anmol Jain Date: Tue, 26 Nov 2024 13:13:55 +0530 Subject: [PATCH 3/5] debug segmentation fault due to trace id --- axiom/nr_txn.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/axiom/nr_txn.c b/axiom/nr_txn.c index 06c0214ef..d7171a141 100644 --- a/axiom/nr_txn.c +++ b/axiom/nr_txn.c @@ -3259,15 +3259,17 @@ char* nr_txn_get_current_trace_id(nrtxn_t* txn) { const char* trace_id; if (NULL == txn) { + nrl_debug(NRL_AGENT, "%s", "nr_txn_get_current_trace_id : txn is NULL"); return NULL; } trace_id = nr_distributed_trace_get_trace_id(txn->distributed_trace); + nrl_debug(NRL_AGENT, "nr_distributed_trace_get_trace_id : %s", trace_id); if ((NULL == trace_id) || (!txn->options.distributed_tracing_enabled)) { return NULL; } - + nrl_debug(NRL_AGENT, "returning trace_id : %s", trace_id); return nr_strdup(trace_id); } From fb5fd9720d5e2766a353f305ff935d7105e3c266 Mon Sep 17 00:00:00 2001 From: Anmol Jain Date: Thu, 28 Nov 2024 12:02:43 +0530 Subject: [PATCH 4/5] revert debug logs --- axiom/nr_txn.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/axiom/nr_txn.c b/axiom/nr_txn.c index d7171a141..e127efd20 100644 --- a/axiom/nr_txn.c +++ b/axiom/nr_txn.c @@ -3259,17 +3259,14 @@ char* nr_txn_get_current_trace_id(nrtxn_t* txn) { const char* trace_id; if (NULL == txn) { - nrl_debug(NRL_AGENT, "%s", "nr_txn_get_current_trace_id : txn is NULL"); return NULL; } trace_id = nr_distributed_trace_get_trace_id(txn->distributed_trace); - nrl_debug(NRL_AGENT, "nr_distributed_trace_get_trace_id : %s", trace_id); if ((NULL == trace_id) || (!txn->options.distributed_tracing_enabled)) { return NULL; } - nrl_debug(NRL_AGENT, "returning trace_id : %s", trace_id); return nr_strdup(trace_id); } From 95e02cdc50f24735fb1607e873e21411c5a640f9 Mon Sep 17 00:00:00 2001 From: Anmol Jain Date: Fri, 21 Feb 2025 12:50:33 +0530 Subject: [PATCH 5/5] resolve issues while rebasing --- agent/php_api_internal.h | 2 -- agent/php_newrelic.c | 2 -- 2 files changed, 4 deletions(-) diff --git a/agent/php_api_internal.h b/agent/php_api_internal.h index f8ae9a653..61db36648 100644 --- a/agent/php_api_internal.h +++ b/agent/php_api_internal.h @@ -16,8 +16,6 @@ */ extern PHP_FUNCTION(newrelic_get_request_metadata); -extern PHP_FUNCTION(newrelic_get_security_metadata); - #ifdef ENABLE_TESTING_API /* diff --git a/agent/php_newrelic.c b/agent/php_newrelic.c index fb81d65b2..912dff365 100644 --- a/agent/php_newrelic.c +++ b/agent/php_newrelic.c @@ -342,11 +342,9 @@ static zend_function_entry newrelic_functions[] = { #ifdef PHP8 PHP_FE(newrelic_get_linking_metadata, newrelic_arginfo_void) PHP_FE(newrelic_get_trace_metadata, newrelic_arginfo_void) - PHP_FE(newrelic_get_security_metadata, newrelic_arginfo_void) #else PHP_FE(newrelic_get_linking_metadata, 0) PHP_FE(newrelic_get_trace_metadata, 0) - PHP_FE(newrelic_get_security_metadata, 0) #endif /* PHP 8 */ /* * Integration test helpers