Merge branch 'master' into inet-getsockname-port
This commit is contained in:
commit
8c44649138
8 changed files with 82 additions and 13 deletions
17
.github/workflows/build.yml
vendored
17
.github/workflows/build.yml
vendored
|
@ -8,27 +8,32 @@ on:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Test build on ${{ matrix.platform }}
|
name: Test ${{ matrix.luaVersion }} on ${{ matrix.platform }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
luaVersion: [ "5.4", "5.3", "5.2", "5.1", "luajit", "luajit-openresty" ]
|
luaVersion: [ "5.4", "5.3", "5.2", "5.1", "luajit", "luajit-openresty" ]
|
||||||
platform: [ "ubuntu-20.04", "macos-11" ] # "windows-2022" not supported by gh-actions-lua
|
platform: [ "ubuntu-22.04", "macos-11", "windows-2022" ]
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
- name: Setup ’msvc’
|
||||||
|
if: ${{ startsWith(matrix.platform, 'windows') && !startsWith(matrix.luaVersion, 'luajit') }}
|
||||||
|
uses: ilammy/msvc-dev-cmd@v1
|
||||||
- name: Setup ‘lua’
|
- name: Setup ‘lua’
|
||||||
uses: leafo/gh-actions-lua@v9
|
uses: leso-kn/gh-actions-lua@v11-staging
|
||||||
with:
|
with:
|
||||||
luaVersion: ${{ matrix.luaVersion }}
|
luaVersion: ${{ matrix.luaVersion }}
|
||||||
- name: Setup ‘luarocks’
|
- name: Setup ‘luarocks’
|
||||||
uses: leafo/gh-actions-luarocks@v4
|
uses: hishamhm/gh-actions-luarocks@master
|
||||||
- name: Make and install
|
- name: Make and install
|
||||||
run: |
|
run: |
|
||||||
export DEBUG=DEBUG
|
|
||||||
luarocks make -- luasocket-scm-3.rockspec
|
luarocks make -- luasocket-scm-3.rockspec
|
||||||
|
env:
|
||||||
|
DEBUG: DEBUG
|
||||||
- name: Run regression tests
|
- name: Run regression tests
|
||||||
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd test
|
cd test
|
||||||
lua hello.lua
|
lua hello.lua
|
||||||
|
|
6
.github/workflows/luacheck.yml
vendored
6
.github/workflows/luacheck.yml
vendored
|
@ -5,9 +5,9 @@ on: [push, pull_request]
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
luacheck:
|
luacheck:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: Luacheck
|
- name: Luacheck
|
||||||
uses: lunarmodules/luacheck@v0
|
uses: lunarmodules/luacheck@v1
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# LuaSocket
|
# LuaSocket
|
||||||
|
|
||||||
|
|
||||||
[](https://github.com/lunarmodules/luasocket/actions?workflow=Build)
|
[](https://github.com/lunarmodules/luasocket/actions?workflow=Build)
|
||||||
[](https://github.com/lunarmodules/luasocket/actions?workflow=Luacheck)
|
[](https://github.com/lunarmodules/luasocket/actions?workflow=Luacheck)
|
||||||
[](https://github.com/lunarmodules/luasocket/releases)
|
[](https://github.com/lunarmodules/luasocket/releases)
|
||||||
[](https://luarocks.org/modules/lunarmodules/luasocket)
|
[](https://luarocks.org/modules/lunarmodules/luasocket)
|
||||||
|
|
||||||
|
|
|
@ -300,6 +300,8 @@ local function shouldredirect(reqt, code, headers)
|
||||||
if not location then return false end
|
if not location then return false end
|
||||||
location = string.gsub(location, "%s", "")
|
location = string.gsub(location, "%s", "")
|
||||||
if location == "" then return false end
|
if location == "" then return false end
|
||||||
|
-- the RFC says the redirect URL may be relative
|
||||||
|
location = url.absolute(reqt.url, location)
|
||||||
local scheme = url.parse(location).scheme
|
local scheme = url.parse(location).scheme
|
||||||
if scheme and (not SCHEMES[scheme]) then return false end
|
if scheme and (not SCHEMES[scheme]) then return false end
|
||||||
-- avoid https downgrades
|
-- avoid https downgrades
|
||||||
|
@ -323,8 +325,7 @@ end
|
||||||
local trequest, tredirect
|
local trequest, tredirect
|
||||||
|
|
||||||
--[[local]] function tredirect(reqt, location)
|
--[[local]] function tredirect(reqt, location)
|
||||||
-- the RFC says the redirect URL has to be absolute, but some
|
-- the RFC says the redirect URL may be relative
|
||||||
-- servers do not respect that
|
|
||||||
local newurl = url.absolute(reqt.url, location)
|
local newurl = url.absolute(reqt.url, location)
|
||||||
-- if switching schemes, reset port and create function
|
-- if switching schemes, reset port and create function
|
||||||
if url.parse(newurl).scheme ~= reqt.scheme then
|
if url.parse(newurl).scheme ~= reqt.scheme then
|
||||||
|
|
|
@ -54,6 +54,33 @@ int opt_meth_getoption(lua_State *L, p_opt opt, p_socket ps)
|
||||||
return opt->func(L, ps);
|
return opt->func(L, ps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------*/
|
||||||
|
/* binds socket to network interface */
|
||||||
|
int opt_set_bindtodevice(lua_State *L, p_socket ps)
|
||||||
|
{
|
||||||
|
#ifndef SO_BINDTODEVICE
|
||||||
|
return luaL_error(L, "SO_BINDTODEVICE is not supported on this operating system");
|
||||||
|
#else
|
||||||
|
const char *dev = luaL_checkstring(L, 3);
|
||||||
|
return opt_set(L, ps, SOL_SOCKET, SO_BINDTODEVICE, (char*)dev, strlen(dev)+1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int opt_get_bindtodevice(lua_State *L, p_socket ps)
|
||||||
|
{
|
||||||
|
#ifndef SO_BINDTODEVICE
|
||||||
|
return luaL_error(L, "SO_BINDTODEVICE is not supported on this operating system");
|
||||||
|
#else
|
||||||
|
char dev[IFNAMSIZ];
|
||||||
|
int len = sizeof(dev);
|
||||||
|
int err = opt_get(L, ps, SOL_SOCKET, SO_BINDTODEVICE, &dev, &len);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
lua_pushstring(L, dev);
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------*/
|
/*------------------------------------------------------*/
|
||||||
/* enables reuse of local address */
|
/* enables reuse of local address */
|
||||||
int opt_set_reuseaddr(lua_State *L, p_socket ps)
|
int opt_set_reuseaddr(lua_State *L, p_socket ps)
|
||||||
|
|
|
@ -53,6 +53,9 @@ int opt_get_tcp_keepintvl(lua_State *L, p_socket ps);
|
||||||
int opt_set_tcp_defer_accept(lua_State *L, p_socket ps);
|
int opt_set_tcp_defer_accept(lua_State *L, p_socket ps);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int opt_set_bindtodevice(lua_State *L, p_socket ps);
|
||||||
|
int opt_get_bindtodevice(lua_State *L, p_socket ps);
|
||||||
|
|
||||||
int opt_set_keepalive(lua_State *L, p_socket ps);
|
int opt_set_keepalive(lua_State *L, p_socket ps);
|
||||||
int opt_get_keepalive(lua_State *L, p_socket ps);
|
int opt_get_keepalive(lua_State *L, p_socket ps);
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,7 @@ static luaL_Reg tcp_methods[] = {
|
||||||
|
|
||||||
/* socket option handlers */
|
/* socket option handlers */
|
||||||
static t_opt optget[] = {
|
static t_opt optget[] = {
|
||||||
|
{"bindtodevice", opt_get_bindtodevice},
|
||||||
{"keepalive", opt_get_keepalive},
|
{"keepalive", opt_get_keepalive},
|
||||||
{"reuseaddr", opt_get_reuseaddr},
|
{"reuseaddr", opt_get_reuseaddr},
|
||||||
{"reuseport", opt_get_reuseport},
|
{"reuseport", opt_get_reuseport},
|
||||||
|
@ -92,6 +93,7 @@ static t_opt optget[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static t_opt optset[] = {
|
static t_opt optset[] = {
|
||||||
|
{"bindtodevice", opt_set_bindtodevice},
|
||||||
{"keepalive", opt_set_keepalive},
|
{"keepalive", opt_set_keepalive},
|
||||||
{"reuseaddr", opt_set_reuseaddr},
|
{"reuseaddr", opt_set_reuseaddr},
|
||||||
{"reuseport", opt_set_reuseport},
|
{"reuseport", opt_set_reuseport},
|
||||||
|
|
|
@ -265,6 +265,37 @@ ignore = {
|
||||||
}
|
}
|
||||||
check_request(request, expect, ignore)
|
check_request(request, expect, ignore)
|
||||||
|
|
||||||
|
-- Use https://httpbin.org/#/Dynamic_data/get_base64__value_ for testing
|
||||||
|
-----------------------------------------------------
|
||||||
|
io.write("testing absolute https redirection: ")
|
||||||
|
request = {
|
||||||
|
url = "https://httpbin.org/redirect-to?url=https://httpbin.org/base64/THVhIFNvY2tldA=="
|
||||||
|
}
|
||||||
|
expect = {
|
||||||
|
code = 200,
|
||||||
|
body = "Lua Socket"
|
||||||
|
}
|
||||||
|
ignore = {
|
||||||
|
status = 1,
|
||||||
|
headers = 1
|
||||||
|
}
|
||||||
|
check_request(request, expect, ignore)
|
||||||
|
|
||||||
|
-----------------------------------------------------
|
||||||
|
io.write("testing relative https redirection: ")
|
||||||
|
request = {
|
||||||
|
url = "https://httpbin.org/redirect-to?url=/base64/THVhIFNvY2tldA=="
|
||||||
|
}
|
||||||
|
expect = {
|
||||||
|
code = 200,
|
||||||
|
body = "Lua Socket"
|
||||||
|
}
|
||||||
|
ignore = {
|
||||||
|
status = 1,
|
||||||
|
headers = 1
|
||||||
|
}
|
||||||
|
check_request(request, expect, ignore)
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
--[[
|
--[[
|
||||||
io.write("testing proxy with redirection: ")
|
io.write("testing proxy with redirection: ")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue