Skip to content

Commit

Permalink
Merge branch 'master' into inet-getsockname-port
Browse files Browse the repository at this point in the history
  • Loading branch information
alerque committed Nov 8, 2023
2 parents d7856b2 + 43a97b7 commit 8c44649
Show file tree
Hide file tree
Showing 8 changed files with 82 additions and 13 deletions.
17 changes: 11 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,32 @@ on:

jobs:
build:
name: Test build on ${{ matrix.platform }}
name: Test ${{ matrix.luaVersion }} on ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
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 }}
steps:
- 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’
uses: leafo/gh-actions-lua@v9
uses: leso-kn/gh-actions-lua@v11-staging
with:
luaVersion: ${{ matrix.luaVersion }}
- name: Setup ‘luarocks’
uses: leafo/gh-actions-luarocks@v4
uses: hishamhm/gh-actions-luarocks@master
- name: Make and install
run: |
export DEBUG=DEBUG
luarocks make -- luasocket-scm-3.rockspec
env:
DEBUG: DEBUG
- name: Run regression tests
shell: bash
run: |
cd test
lua hello.lua
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/luacheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ on: [push, pull_request]
jobs:

luacheck:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Luacheck
uses: lunarmodules/luacheck@v0
uses: lunarmodules/luacheck@v1
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# LuaSocket


[![Build](https://img.shields.io/github/workflow/status/lunarmodules/luasocket/Build?label=Build=Lua)](https://github.com/lunarmodules/luasocket/actions?workflow=Build)
[![Luacheck](https://img.shields.io/github/workflow/status/lunarmodules/luasocket/Luacheck?label=Luacheck&logo=Lua)](https://github.com/lunarmodules/luasocket/actions?workflow=Luacheck)
[![Build](https://img.shields.io/github/actions/workflow/status/lunarmodules/luasocket/build.yml?branch=master&label=Build&logo=Lua)](https://github.com/lunarmodules/luasocket/actions?workflow=Build)
[![Luacheck](https://img.shields.io/github/actions/workflow/status/lunarmodules/luasocket/luacheck.yml?branch=master&label=Luacheck&logo=Lua)](https://github.com/lunarmodules/luasocket/actions?workflow=Luacheck)
[![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/lunarmodules/luasocket?label=Tag&logo=GitHub)](https://github.com/lunarmodules/luasocket/releases)
[![Luarocks](https://img.shields.io/luarocks/v/lunarmodules/luasocket?label=Luarocks&logo=Lua)](https://luarocks.org/modules/lunarmodules/luasocket)

Expand Down
5 changes: 3 additions & 2 deletions src/http.lua
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,8 @@ local function shouldredirect(reqt, code, headers)
if not location then return false end
location = string.gsub(location, "%s", "")
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
if scheme and (not SCHEMES[scheme]) then return false end
-- avoid https downgrades
Expand All @@ -323,8 +325,7 @@ end
local trequest, tredirect

--[[local]] function tredirect(reqt, location)
-- the RFC says the redirect URL has to be absolute, but some
-- servers do not respect that
-- the RFC says the redirect URL may be relative
local newurl = url.absolute(reqt.url, location)
-- if switching schemes, reset port and create function
if url.parse(newurl).scheme ~= reqt.scheme then
Expand Down
27 changes: 27 additions & 0 deletions src/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,33 @@ int opt_meth_getoption(lua_State *L, p_opt opt, p_socket 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 */
int opt_set_reuseaddr(lua_State *L, p_socket ps)
Expand Down
3 changes: 3 additions & 0 deletions src/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
#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_get_keepalive(lua_State *L, p_socket ps);

Expand Down
2 changes: 2 additions & 0 deletions src/tcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ static luaL_Reg tcp_methods[] = {

/* socket option handlers */
static t_opt optget[] = {
{"bindtodevice", opt_get_bindtodevice},
{"keepalive", opt_get_keepalive},
{"reuseaddr", opt_get_reuseaddr},
{"reuseport", opt_get_reuseport},
Expand All @@ -92,6 +93,7 @@ static t_opt optget[] = {
};

static t_opt optset[] = {
{"bindtodevice", opt_set_bindtodevice},
{"keepalive", opt_set_keepalive},
{"reuseaddr", opt_set_reuseaddr},
{"reuseport", opt_set_reuseport},
Expand Down
31 changes: 31 additions & 0 deletions test/httptest.lua
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,37 @@ 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: ")
Expand Down

0 comments on commit 8c44649

Please sign in to comment.