]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: lua: Make `set_var()` and `unset_var()` return success
authorTim Duesterhus <tim@bastelstu.be>
Tue, 19 May 2020 11:49:41 +0000 (13:49 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 25 May 2020 06:12:31 +0000 (08:12 +0200)
This patch makes `set_var()` and `unset_var()` return a boolean indicating
success.

reg-tests/lua/set_var.lua [new file with mode: 0644]
reg-tests/lua/set_var.vtc [new file with mode: 0644]
src/hlua.c

diff --git a/reg-tests/lua/set_var.lua b/reg-tests/lua/set_var.lua
new file mode 100644 (file)
index 0000000..78d1fd4
--- /dev/null
@@ -0,0 +1,12 @@
+core.register_service("set_var", "http", function(applet)
+       local var_name = applet.headers["var"][0]
+       local result = applet:set_var(var_name, "value")
+       if result then
+               applet:set_status(202)
+       else
+               applet:set_status(400)
+       end
+       applet:add_header("echo", applet:get_var(var_name) or "(nil)")
+       applet:start_response()
+       applet:send("")
+end)
diff --git a/reg-tests/lua/set_var.vtc b/reg-tests/lua/set_var.vtc
new file mode 100644 (file)
index 0000000..2f1ba4e
--- /dev/null
@@ -0,0 +1,29 @@
+varnishtest "Lua: set_var"
+#REQUIRE_OPTIONS=LUA
+
+feature ignore_unknown_macro
+
+haproxy h1 -conf {
+    global
+        lua-load ${testdir}/set_var.lua
+
+    frontend fe1
+        mode http
+        ${no-htx} option http-use-htx
+        bind "fd@${fe1}"
+
+        http-request use-service lua.set_var
+} -start
+
+client c0 -connect ${h1_fe1_sock} {
+    txreq -url "/" \
+        -hdr "Var: txn.foo"
+    rxresp
+    expect resp.status == 202
+    expect resp.http.echo == "value"
+    txreq -url "/" \
+        -hdr "Var: invalid.var"
+    rxresp
+    expect resp.status == 400
+    expect resp.http.echo == "(nil)"
+} -run
index b5bf646322cccc6a167371ad9acb818c04bfd4da..0ce57c7ed553714d20d9fecee0aff45772d461f0 100644 (file)
@@ -3489,8 +3489,8 @@ __LJMP static int hlua_applet_tcp_set_var(lua_State *L)
 
        /* Store the sample in a variable. */
        smp_set_owner(&smp, s->be, s->sess, s, 0);
-       vars_set_by_name(name, len, &smp);
-       return 0;
+       lua_pushboolean(L, vars_set_by_name(name, len, &smp) != 0);
+       return 1;
 }
 
 __LJMP static int hlua_applet_tcp_unset_var(lua_State *L)
@@ -3512,8 +3512,8 @@ __LJMP static int hlua_applet_tcp_unset_var(lua_State *L)
 
        /* Unset the variable. */
        smp_set_owner(&smp, s->be, s->sess, s, 0);
-       vars_unset_by_name_ifexist(name, len, &smp);
-       return 0;
+       lua_pushboolean(L, vars_unset_by_name_ifexist(name, len, &smp) != 0);
+       return 1;
 }
 
 __LJMP static int hlua_applet_tcp_get_var(lua_State *L)
@@ -3967,8 +3967,8 @@ __LJMP static int hlua_applet_http_set_var(lua_State *L)
 
        /* Store the sample in a variable. */
        smp_set_owner(&smp, s->be, s->sess, s, 0);
-       vars_set_by_name(name, len, &smp);
-       return 0;
+       lua_pushboolean(L, vars_set_by_name(name, len, &smp) != 0);
+       return 1;
 }
 
 __LJMP static int hlua_applet_http_unset_var(lua_State *L)
@@ -3990,8 +3990,8 @@ __LJMP static int hlua_applet_http_unset_var(lua_State *L)
 
        /* Unset the variable. */
        smp_set_owner(&smp, s->be, s->sess, s, 0);
-       vars_unset_by_name_ifexist(name, len, &smp);
-       return 0;
+       lua_pushboolean(L, vars_unset_by_name_ifexist(name, len, &smp) != 0);
+       return 1;
 }
 
 __LJMP static int hlua_applet_http_get_var(lua_State *L)
@@ -5053,8 +5053,8 @@ __LJMP static int hlua_set_var(lua_State *L)
 
        /* Store the sample in a variable. */
        smp_set_owner(&smp, htxn->p, htxn->s->sess, htxn->s, htxn->dir & SMP_OPT_DIR);
-       vars_set_by_name(name, len, &smp);
-       return 0;
+       lua_pushboolean(L, vars_set_by_name(name, len, &smp) != 0);
+       return 1;
 }
 
 __LJMP static int hlua_unset_var(lua_State *L)
@@ -5074,8 +5074,8 @@ __LJMP static int hlua_unset_var(lua_State *L)
 
        /* Unset the variable. */
        smp_set_owner(&smp, htxn->p, htxn->s->sess, htxn->s, htxn->dir & SMP_OPT_DIR);
-       vars_unset_by_name_ifexist(name, len, &smp);
-       return 0;
+       lua_pushboolean(L, vars_unset_by_name_ifexist(name, len, &smp) != 0);
+       return 1;
 }
 
 __LJMP static int hlua_get_var(lua_State *L)