Hi guys,

While playing with Lua API I've noticed that core.proxies attribute
doesn't return all the proxies, more precisely the ones with same names
(e.g. for frontend and backend with the same name it would only return
the latter one).

Here is a patch which tries to fix that, avoiding using the proxy name
as a key for Lua table.
We use a plain integer offsets (starting from 1) to create numerical
array/table iterable by both pairs() and ipairs() in Lua.

The patch also applies cleanly to 1.7 branch.

Best regards,
Adis
>From f201afcd5ec9790a40907ab24e089db28a9cb6f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adis=20Nezirovi=C4=87?= <aneziro...@haproxy.com>
Date: Mon, 5 Jun 2017 17:10:51 +0200
Subject: [PATCH] BUG/MEDIUM: lua: Support proxies with identical names in
 core.proxies

When we have frontends/backends with identical names, core.proxies
returns only the last one, using proxy->id (i.e. proxy name) to insert
the value in Lua table. We should add them to numerical array/table, to
be able to access all proxies.
---
 src/hlua_fcn.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
index 8406bfe5..89bf0b3f 100644
--- a/src/hlua_fcn.c
+++ b/src/hlua_fcn.c
@@ -893,6 +893,7 @@ int hlua_proxy_shut_bcksess(lua_State *L)
 int hlua_fcn_post_init(lua_State *L)
 {
 	struct proxy *px;
+	int index;
 
 	/* get core array. */
 	if (lua_getglobal(L, "core") != LUA_TTABLE)
@@ -903,8 +904,9 @@ int hlua_fcn_post_init(lua_State *L)
 	lua_newtable(L);
 
 	/* List all proxies. */
+	index = 1;
 	for (px = proxy; px; px = px->next) {
-		lua_pushstring(L, px->id);
+		lua_pushinteger(L, index++);
 		hlua_fcn_new_proxy(L, px);
 		lua_settable(L, -3);
 	}
-- 
2.13.0

Reply via email to