axe r->port
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index bf5d483..34dafaa 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2061,7 +2061,6 @@
c->data = sr;
}
- sr->port = r->port;
sr->port_text = r->port_text;
sr->variables = r->variables;
diff --git a/src/http/ngx_http_header_filter_module.c b/src/http/ngx_http_header_filter_module.c
index f9476c6..0a56154 100644
--- a/src/http/ngx_http_header_filter_module.c
+++ b/src/http/ngx_http_header_filter_module.c
@@ -155,12 +155,17 @@
size_t len;
ngx_str_t host;
ngx_buf_t *b;
- ngx_uint_t status, i;
+ ngx_uint_t status, i, port;
ngx_chain_t out;
ngx_list_part_t *part;
ngx_table_elt_t *header;
+ ngx_connection_t *c;
ngx_http_core_loc_conf_t *clcf;
ngx_http_core_srv_conf_t *cscf;
+ struct sockaddr_in *sin;
+#if (NGX_HAVE_INET6)
+ struct sockaddr_in6 *sin6;
+#endif
u_char addr[NGX_SOCKADDR_STRLEN];
r->header_sent = 1;
@@ -297,13 +302,29 @@
}
}
+ c = r->connection;
+
+ switch (c->local_sockaddr->sa_family) {
+
+#if (NGX_HAVE_INET6)
+ case AF_INET6:
+ sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
+ port = sin6->sin6_port;
+ break;
+#endif
+ default: /* AF_INET */
+ sin = (struct sockaddr_in *) c->local_sockaddr;
+ port = sin->sin_port;
+ break;
+ }
+
#if (NGX_HTTP_SSL)
if (r->connection->ssl) {
len += sizeof("Location: https://") - 1
+ host.len
+ r->headers_out.location->value.len + 2;
- if (clcf->port_in_redirect && r->port != 443) {
+ if (clcf->port_in_redirect && port != 443) {
len += r->port_text->len;
}
@@ -314,7 +335,7 @@
+ host.len
+ r->headers_out.location->value.len + 2;
- if (clcf->port_in_redirect && r->port != 80) {
+ if (clcf->port_in_redirect && port != 80) {
len += r->port_text->len;
}
}
@@ -322,6 +343,7 @@
} else {
host.len = 0;
host.data = NULL;
+ port = 0;
}
if (r->chunked) {
@@ -476,14 +498,14 @@
if (clcf->port_in_redirect) {
#if (NGX_HTTP_SSL)
if (r->connection->ssl) {
- if (r->port != 443) {
+ if (port != 443) {
b->last = ngx_copy(b->last, r->port_text->data,
r->port_text->len);
}
} else
#endif
{
- if (r->port != 80) {
+ if (port != 80) {
b->last = ngx_copy(b->last, r->port_text->data,
r->port_text->len);
}
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 5f5c707..bd14200 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -300,7 +300,6 @@
port = c->listening->servers;
- r->port = port->port;
r->port_text = &port->port_text;
r->connection = c;
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index ab693b7..ea3c6ab 100644
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -384,7 +384,6 @@
ngx_http_post_subrequest_t *post_subrequest;
ngx_http_posted_request_t *posted_requests;
- ngx_uint_t port;
ngx_str_t *port_text; /* ":80" */
ngx_http_virtual_names_t *virtual_names;