From a09db8318c8f80a93698bf971c4917b4fc4ba596 Mon Sep 17 00:00:00 2001 From: Rene Cannao Date: Mon, 16 Feb 2026 12:38:31 +0000 Subject: [PATCH] tsdb: fix SET command validation by adding tsdb- prefix support --- include/ProxySQL_Statistics.hpp | 1 + lib/Admin_Handler.cpp | 2 ++ lib/ProxySQL_Statistics.cpp | 10 ++++++++++ 3 files changed, 13 insertions(+) diff --git a/include/ProxySQL_Statistics.hpp b/include/ProxySQL_Statistics.hpp index 76ace75dc..7e1c1ad49 100644 --- a/include/ProxySQL_Statistics.hpp +++ b/include/ProxySQL_Statistics.hpp @@ -160,6 +160,7 @@ class ProxySQL_Statistics { // Variable management bool set_variable(const char *name, const char *value); char *get_variable(const char *name); + bool has_variable(const char *name); char **get_variables_list(); bool MySQL_Threads_Handler_timetoget(unsigned long long); diff --git a/lib/Admin_Handler.cpp b/lib/Admin_Handler.cpp index ca94b0097..71c6ecf09 100644 --- a/lib/Admin_Handler.cpp +++ b/lib/Admin_Handler.cpp @@ -1109,6 +1109,8 @@ bool is_valid_global_variable(const char *var_name) { return true; } else if (strlen(var_name) > 6 && !strncmp(var_name, "admin-", 6) && SPA->has_variable(var_name + 6)) { return true; + } else if (strlen(var_name) > 5 && !strncmp(var_name, "tsdb-", 5) && GloProxyStats && GloProxyStats->has_variable(var_name + 5)) { + return true; } else if (strlen(var_name) > 5 && !strncmp(var_name, "ldap-", 5) && GloMyLdapAuth && GloMyLdapAuth->has_variable(var_name + 5)) { return true; } else if (strlen(var_name) > 13 && !strncmp(var_name, "sqliteserver-", 13) && GloSQLite3Server && GloSQLite3Server->has_variable(var_name + 13)) { diff --git a/lib/ProxySQL_Statistics.cpp b/lib/ProxySQL_Statistics.cpp index 6587bfb0c..ced2ca6e6 100644 --- a/lib/ProxySQL_Statistics.cpp +++ b/lib/ProxySQL_Statistics.cpp @@ -183,6 +183,16 @@ char **ProxySQL_Statistics::get_variables_list() { return list; } +bool ProxySQL_Statistics::has_variable(const char *name) { + if (name == NULL) return false; + if (!strcasecmp(name, "enabled")) return true; + if (!strcasecmp(name, "sample_interval")) return true; + if (!strcasecmp(name, "retention_days")) return true; + if (!strcasecmp(name, "monitor_enabled")) return true; + if (!strcasecmp(name, "monitor_interval")) return true; + return false; +} + ProxySQL_Statistics::~ProxySQL_Statistics() { if (stmt_insert_tsdb_metric) { (*proxy_sqlite3_finalize)(stmt_insert_tsdb_metric);