]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: db-lua - Allow nil response from Lua
authorAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 9 May 2023 09:00:48 +0000 (12:00 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 19 May 2023 09:25:44 +0000 (09:25 +0000)
src/auth/db-lua.c

index c0b22d73728879f85c374da996c8df8354fc7f78..58bfc7e029a7ad7feed2148ef70037523547943e 100644 (file)
@@ -416,9 +416,9 @@ static int auth_lua_call_lookup(lua_State *L, const char *fn,
                                           "(expected number got %s)",
                                           fn, luaL_typename(L, -2));
                err = -1;
-       } else if (!lua_isstring(L, -1) && !lua_istable(L, -1)) {
+       } else if (!lua_isstring(L, -1) && !lua_istable(L, -1) && !lua_isnil(L, -1)) {
                *error_r = t_strdup_printf("db-lua: %s(req) invalid return value "
-                                          "(expected string or table, got %s)",
+                                          "(expected nil, string or table, got %s)",
                                           fn, luaL_typename(L, -1));
                err = -1;
        }
@@ -622,7 +622,7 @@ auth_lua_call_lookup_finish(lua_State *L, struct auth_request *req,
 
        if (ret != PASSDB_RESULT_OK && ret != PASSDB_RESULT_NEXT) {
                *error_r = str;
-       } else {
+       } else if (str != NULL) {
                auth_lua_export_fields(req, str, scheme_r, password_r);
        }
 
@@ -654,9 +654,9 @@ auth_lua_call_password_verify(struct dlua_script *script,
                                           AUTH_LUA_PASSWORD_VERIFY,
                                           luaL_typename(L, -2));
                err = -1;
-       } else if (!lua_isstring(L, -1) && !lua_istable(L, -1)) {
+       } else if (!lua_isstring(L, -1) && !lua_istable(L, -1) && !lua_isnil(L, -1)) {
                *error_r = t_strdup_printf("db-lua: %s invalid return value "
-                                          "(expected string or table, got %s)",
+                                          "(expected nil, string or table, got %s)",
                                           AUTH_LUA_PASSWORD_VERIFY,
                                           luaL_typename(L, -1));
                err = -1;
@@ -717,7 +717,8 @@ auth_lua_call_userdb_lookup(struct dlua_script *script,
                *error_r = str;
                return ret;
        }
-       auth_lua_export_fields(req, str, NULL, NULL);
+       if (str != NULL)
+               auth_lua_export_fields(req, str, NULL, NULL);
 
        return USERDB_RESULT_OK;
 }