Skip to content

Commit 65e3f82

Browse files
committed
lua: minimal support for Unix socket incoming connections.
1 parent 6977769 commit 65e3f82

File tree

5 files changed

+18
-8
lines changed

5 files changed

+18
-8
lines changed

doc/admin-guide/plugins/lua.en.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1838,6 +1838,7 @@ Socket address family
18381838

18391839
TS_LUA_AF_INET (2)
18401840
TS_LUA_AF_INET6 (10)
1841+
TS_LUA_AF_UNIX (1)
18411842

18421843

18431844
:ref:`TOP <admin-plugins-ts-lua>`

plugins/lua/ts_lua_client_request.cc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,7 @@ ts_lua_client_request_client_addr_get_port(lua_State *L)
790790
{
791791
struct sockaddr const *client_ip;
792792
ts_lua_http_ctx *http_ctx;
793-
int port;
793+
int port = 0;
794794

795795
GET_HTTP_CONTEXT(http_ctx, L);
796796

@@ -802,7 +802,7 @@ ts_lua_client_request_client_addr_get_port(lua_State *L)
802802
} else {
803803
if (client_ip->sa_family == AF_INET) {
804804
port = ((struct sockaddr_in *)client_ip)->sin_port;
805-
} else {
805+
} else if (client_ip->sa_family == AF_INET6) {
806806
port = ((struct sockaddr_in6 *)client_ip)->sin6_port;
807807
}
808808

@@ -817,7 +817,7 @@ ts_lua_client_request_client_addr_get_incoming_port(lua_State *L)
817817
{
818818
struct sockaddr const *incoming_addr;
819819
ts_lua_http_ctx *http_ctx;
820-
int port;
820+
int port = 0;
821821

822822
GET_HTTP_CONTEXT(http_ctx, L);
823823

@@ -829,7 +829,7 @@ ts_lua_client_request_client_addr_get_incoming_port(lua_State *L)
829829
} else {
830830
if (incoming_addr->sa_family == AF_INET) {
831831
port = ((struct sockaddr_in *)incoming_addr)->sin_port;
832-
} else {
832+
} else if (incoming_addr->sa_family == AF_INET6) {
833833
port = ((struct sockaddr_in6 *)incoming_addr)->sin6_port;
834834
}
835835

@@ -866,6 +866,8 @@ ts_lua_client_request_client_addr_get_addr(lua_State *L)
866866
port = ntohs(((struct sockaddr_in6 *)client_ip)->sin6_port);
867867
inet_ntop(AF_INET6, (const void *)&((struct sockaddr_in6 *)client_ip)->sin6_addr, cip, sizeof(cip));
868868
family = AF_INET6;
869+
} else if (client_ip->sa_family == AF_UNIX) {
870+
family = AF_UNIX;
869871
}
870872

871873
lua_pushstring(L, cip);

plugins/lua/ts_lua_http.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,6 +1085,8 @@ ts_lua_http_get_ssn_remote_addr(lua_State *L)
10851085
port = ntohs(((struct sockaddr_in6 *)client_ip)->sin6_port);
10861086
inet_ntop(AF_INET6, (const void *)&((struct sockaddr_in6 *)client_ip)->sin6_addr, cip, sizeof(cip));
10871087
family = AF_INET6;
1088+
} else if (client_ip->sa_family == AF_UNIX) {
1089+
family = AF_UNIX;
10881090
}
10891091

10901092
lua_pushstring(L, cip);

plugins/lua/ts_lua_server_request.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ ts_lua_inject_server_request_server_addr_api(lua_State *L)
149149

150150
lua_pushinteger(L, AF_INET6);
151151
lua_setglobal(L, "TS_LUA_AF_INET6");
152+
153+
lua_pushinteger(L, AF_UNIX);
154+
lua_setglobal(L, "TS_LUA_AF_UNIX");
152155
}
153156

154157
static void

plugins/lua/ts_lua_vconn.cc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ static int
5656
ts_lua_vconn_get_remote_addr(lua_State *L)
5757
{
5858
ts_lua_vconn_ctx *vconn_ctx;
59-
int port;
60-
int family;
61-
char sip[128];
59+
int port = 0;
60+
int family = AF_UNSPEC;
61+
char sip[128] = "";
6262

6363
GET_VCONN_CONTEXT(vconn_ctx, L);
6464

@@ -73,10 +73,12 @@ ts_lua_vconn_get_remote_addr(lua_State *L)
7373
port = ntohs(((struct sockaddr_in *)addr)->sin_port);
7474
inet_ntop(AF_INET, (const void *)&((struct sockaddr_in *)addr)->sin_addr, sip, sizeof(sip));
7575
family = AF_INET;
76-
} else {
76+
} else if (addr->sa_family == AF_INET6) {
7777
port = ntohs(((struct sockaddr_in6 *)addr)->sin6_port);
7878
inet_ntop(AF_INET6, (const void *)&((struct sockaddr_in6 *)addr)->sin6_addr, sip, sizeof(sip));
7979
family = AF_INET6;
80+
} else if (addr->sa_family == AF_UNIX) {
81+
family = AF_UNIX;
8082
}
8183

8284
lua_pushstring(L, sip);

0 commit comments

Comments
 (0)