[mod_magnet] attrs for remote port and server port

lighty.r.req_attr["request.remote-port"]
lighty.r.req_attr["request.server-port"]
personal/stbuehler/tests-path
Glenn Strauss 2021-08-17 08:35:32 -04:00
parent f7018e3d39
commit e7290fad9a
1 changed files with 23 additions and 8 deletions

View File

@ -1363,7 +1363,9 @@ typedef struct {
MAGNET_ENV_REQUEST_ORIG_URI,
MAGNET_ENV_REQUEST_PATH_INFO,
MAGNET_ENV_REQUEST_REMOTE_ADDR,
MAGNET_ENV_REQUEST_REMOTE_PORT,
MAGNET_ENV_REQUEST_SERVER_ADDR,
MAGNET_ENV_REQUEST_SERVER_PORT,
MAGNET_ENV_REQUEST_PROTOCOL,
MAGNET_ENV_RESPONSE_HTTP_STATUS,
@ -1390,7 +1392,9 @@ static const magnet_env_t magnet_env[] = {
{ CONST_STR_LEN("request.path-info"), MAGNET_ENV_REQUEST_PATH_INFO },
{ CONST_STR_LEN("request.remote-ip"), MAGNET_ENV_REQUEST_REMOTE_ADDR },
{ CONST_STR_LEN("request.remote-addr"), MAGNET_ENV_REQUEST_REMOTE_ADDR },
{ CONST_STR_LEN("request.remote-port"), MAGNET_ENV_REQUEST_REMOTE_PORT },
{ CONST_STR_LEN("request.server-addr"), MAGNET_ENV_REQUEST_SERVER_ADDR },
{ CONST_STR_LEN("request.server-port"), MAGNET_ENV_REQUEST_SERVER_PORT },
{ CONST_STR_LEN("request.protocol"), MAGNET_ENV_REQUEST_PROTOCOL },
{ CONST_STR_LEN("response.http-status"), MAGNET_ENV_RESPONSE_HTTP_STATUS },
@ -1437,6 +1441,11 @@ static buffer *magnet_env_get_buffer_by_id(request_st * const r, int id) {
case MAGNET_ENV_REQUEST_ORIG_URI: dest = &r->target_orig; break;
case MAGNET_ENV_REQUEST_PATH_INFO: dest = &r->pathinfo; break;
case MAGNET_ENV_REQUEST_REMOTE_ADDR: dest = &r->con->dst_addr_buf; break;
case MAGNET_ENV_REQUEST_REMOTE_PORT:
dest = r->tmp_buf;
buffer_clear(dest);
buffer_append_int(dest, sock_addr_get_port(&r->con->dst_addr));
break;
case MAGNET_ENV_REQUEST_SERVER_ADDR: /* local IP without port */
{
const server_socket * const srv_socket = r->con->srv_socket;
@ -1465,6 +1474,16 @@ static buffer *magnet_env_get_buffer_by_id(request_st * const r, int id) {
}
break;
}
case MAGNET_ENV_REQUEST_SERVER_PORT:
{
const server_socket * const srv_socket = r->con->srv_socket;
const buffer * const srv_token = srv_socket->srv_token;
const uint32_t portoffset = srv_socket->srv_token_colon+1;
dest = r->tmp_buf;
buffer_copy_string_len(dest, srv_token->ptr+portoffset,
buffer_clen(srv_token)-portoffset);
break;
}
case MAGNET_ENV_REQUEST_PROTOCOL:
dest = r->tmp_buf;
buffer_clear(dest);
@ -1567,14 +1586,7 @@ static int magnet_env_set(lua_State *L) {
saddr.plain.sa_family = AF_UNSPEC;
if (1 == sock_addr_from_str_numeric(&saddr, val.ptr, r->conf.errh)
&& saddr.plain.sa_family != AF_UNSPEC) {
/*(set port 0 instead of memset(&saddr, 0, sizeof(saddr)) above
* and instead of sock_addr_assign() as in mod_extforward.c)
*(future: might provide MAGNET_ENV_REQUEST_REMOTE_PORT
* and create sock_addr_set_port()) */
if (saddr.plain.sa_family == AF_INET)
saddr.ipv4.sin_port = 0;
else if (saddr.plain.sa_family == AF_INET6)
saddr.ipv6.sin6_port = 0;
sock_addr_set_port(&saddr, 0);
memcpy(&r->con->dst_addr, &saddr, sizeof(sock_addr));
}
else {
@ -1585,6 +1597,9 @@ static int magnet_env_set(lua_State *L) {
buffer_copy_string_len(&r->con->dst_addr_buf, val.ptr, val.len);
config_cond_cache_reset_item(r, COMP_HTTP_REMOTE_IP);
return 0;
case MAGNET_ENV_REQUEST_REMOTE_PORT:
sock_addr_set_port(&r->con->dst_addr, (unsigned short)atoi(val.ptr));
return 0;
case MAGNET_ENV_RESPONSE_HTTP_STATUS:
case MAGNET_ENV_RESPONSE_BODY_LENGTH:
case MAGNET_ENV_RESPONSE_BODY: