From 00916441b977f5bdea9f80234c81dbfd16406b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Fri, 10 Dec 2021 20:08:50 +0100 Subject: [PATCH] Admin support for SELECT current_user() and user() Admin now replies to SELECT current_user() and SELECT user() see https://github.com/sysown/proxysql/issues/1105#issuecomment-990940585 --- lib/ProxySQL_Admin.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 54500adb1..8682f6f1a 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -4202,6 +4202,33 @@ void admin_session_handler(MySQL_Session *sess, void *_pa, PtrSize_t *pkt) { goto __run_query; } + // add support for SELECT current_user() and SELECT user() + // see https://github.com/sysown/proxysql/issues/1105#issuecomment-990940585 + if ( + (strcasecmp("SELECT current_user()", query_no_space) == 0) + || + (strcasecmp("SELECT user()", query_no_space) == 0) + ) { + bool current = false; + if (strcasestr(query_no_space, "current") != NULL) + current = true; + l_free(query_length,query); + std::string s = "SELECT '"; + s += sess->client_myds->myconn->userinfo->username ; + if (strlen(sess->client_myds->addr.addr) > 0) { + s += "@"; + s += sess->client_myds->addr.addr; + } + s += "' AS '"; + if (current == true) { + s+= "current_"; + } + s += "user()'"; + query=l_strdup(s.c_str()); + query_length=strlen(query)+1; + goto __run_query; + } + if (!strncasecmp("select @@sql_mode", query_no_space, strlen("select @@sql_mode"))) { l_free(query_length,query); char *q = const_cast("SELECT \"\" as \"@@sql_mode\"");