mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-08-14 05:45:59 +03:00
Obtain port from r->connection->local_sockaddr.
This eliminates segfaults caused by unset (NULL) r->port_start and non-NULL r->port_end. In fact, r->port_start is always NULL, so it is useless to rely on this pointer.
This commit is contained in:
parent
9c0229ce1f
commit
5335587b95
@ -207,9 +207,13 @@ ngx_http_modsecurity_load_request(ngx_http_request_t *r)
|
|||||||
{
|
{
|
||||||
ngx_http_modsecurity_ctx_t *ctx;
|
ngx_http_modsecurity_ctx_t *ctx;
|
||||||
request_rec *req;
|
request_rec *req;
|
||||||
ngx_str_t str;
|
|
||||||
size_t root;
|
size_t root;
|
||||||
ngx_str_t path;
|
ngx_str_t path;
|
||||||
|
ngx_uint_t port;
|
||||||
|
struct sockaddr_in *sin;
|
||||||
|
#if (NGX_HAVE_INET6)
|
||||||
|
struct sockaddr_in6 *sin6;
|
||||||
|
#endif
|
||||||
|
|
||||||
ctx = ngx_http_get_module_ctx(r, ngx_http_modsecurity);
|
ctx = ngx_http_get_module_ctx(r, ngx_http_modsecurity);
|
||||||
req = ctx->req;
|
req = ctx->req;
|
||||||
@ -252,10 +256,30 @@ ngx_http_modsecurity_load_request(ngx_http_request_t *r)
|
|||||||
req->parsed_uri.path = (char *)ngx_pstrdup0(r->pool, &r->uri);
|
req->parsed_uri.path = (char *)ngx_pstrdup0(r->pool, &r->uri);
|
||||||
req->parsed_uri.is_initialized = 1;
|
req->parsed_uri.is_initialized = 1;
|
||||||
|
|
||||||
str.data = r->port_start;
|
switch (r->connection->local_sockaddr->sa_family) {
|
||||||
str.len = r->port_end - r->port_start;
|
|
||||||
req->parsed_uri.port = ngx_atoi(str.data, str.len);
|
#if (NGX_HAVE_INET6)
|
||||||
req->parsed_uri.port_str = (char *)ngx_pstrdup0(r->pool, &str);
|
case AF_INET6:
|
||||||
|
sin6 = (struct sockaddr_in6 *) r->connection->local_sockaddr;
|
||||||
|
port = ntohs(sin6->sin6_port);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (NGX_HAVE_UNIX_DOMAIN)
|
||||||
|
case AF_UNIX:
|
||||||
|
port = 0;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default: /* AF_INET */
|
||||||
|
sin = (struct sockaddr_in *) r->connection->local_sockaddr;
|
||||||
|
port = ntohs(sin->sin_port);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
req->parsed_uri.port = port;
|
||||||
|
req->parsed_uri.port_str = ngx_pnalloc(r->pool, sizeof("65535"));
|
||||||
|
(void) ngx_sprintf((u_char *)req->parsed_uri.port_str, "%ui%c", port, '\0');
|
||||||
|
|
||||||
req->parsed_uri.query = r->args.len ? req->args : NULL;
|
req->parsed_uri.query = r->args.len ? req->args : NULL;
|
||||||
req->parsed_uri.dns_looked_up = 0;
|
req->parsed_uri.dns_looked_up = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user