annotate src/core/ngx_proxy_protocol.c @ 7690:8253424d1aff

Added size check to ngx_http_alloc_large_header_buffer(). This ensures that copying won't write more than the buffer size even if the buffer comes from hc->free and it is smaller than the large client header buffer size in the virtual host configuration. This might happen if size of large client header buffers is different in name-based virtual hosts, similarly to the problem with number of buffers fixed in 6926:e662cbf1b932.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 06 Aug 2020 05:02:22 +0300
parents 89adf49fe76a
children 017fd847f4f7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
1
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
2 /*
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
3 * Copyright (C) Roman Arutyunyan
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
4 * Copyright (C) Nginx, Inc.
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
5 */
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
6
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
7
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
8 #include <ngx_config.h>
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
9 #include <ngx_core.h>
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
10
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
11
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
12 #define NGX_PROXY_PROTOCOL_AF_INET 1
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
13 #define NGX_PROXY_PROTOCOL_AF_INET6 2
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
14
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
15
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
16 #define ngx_proxy_protocol_parse_uint16(p) ((p)[0] << 8 | (p)[1])
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
17
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
18
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
19 typedef struct {
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
20 u_char signature[12];
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
21 u_char version_command;
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
22 u_char family_transport;
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
23 u_char len[2];
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
24 } ngx_proxy_protocol_header_t;
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
25
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
26
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
27 typedef struct {
7254
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
28 u_char src_addr[4];
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
29 u_char dst_addr[4];
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
30 u_char src_port[2];
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
31 u_char dst_port[2];
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
32 } ngx_proxy_protocol_inet_addrs_t;
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
33
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
34
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
35 typedef struct {
7254
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
36 u_char src_addr[16];
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
37 u_char dst_addr[16];
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
38 u_char src_port[2];
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
39 u_char dst_port[2];
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
40 } ngx_proxy_protocol_inet6_addrs_t;
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
41
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
42
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
43 static u_char *ngx_proxy_protocol_read_addr(ngx_connection_t *c, u_char *p,
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
44 u_char *last, ngx_str_t *addr);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
45 static u_char *ngx_proxy_protocol_read_port(u_char *p, u_char *last,
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
46 in_port_t *port, u_char sep);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
47 static u_char *ngx_proxy_protocol_v2_read(ngx_connection_t *c, u_char *buf,
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
48 u_char *last);
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
49
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
50
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
51 u_char *
6185
a420cb1c170b Core: renamed ngx_proxy_protocol_parse to ngx_proxy_protocol_read.
Roman Arutyunyan <arut@nginx.com>
parents: 6184
diff changeset
52 ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last)
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
53 {
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
54 size_t len;
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
55 u_char *p;
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
56 ngx_proxy_protocol_t *pp;
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
57
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
58 static const u_char signature[] = "\r\n\r\n\0\r\nQUIT\n";
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
59
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
60 p = buf;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
61 len = last - buf;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
62
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
63 if (len >= sizeof(ngx_proxy_protocol_header_t)
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
64 && memcmp(p, signature, sizeof(signature) - 1) == 0)
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
65 {
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
66 return ngx_proxy_protocol_v2_read(c, buf, last);
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
67 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
68
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
69 if (len < 8 || ngx_strncmp(p, "PROXY ", 6) != 0) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
70 goto invalid;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
71 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
72
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
73 p += 6;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
74 len -= 6;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
75
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
76 if (len >= 7 && ngx_strncmp(p, "UNKNOWN", 7) == 0) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
77 ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0,
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
78 "PROXY protocol unknown protocol");
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
79 p += 7;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
80 goto skip;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
81 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
82
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
83 if (len < 5 || ngx_strncmp(p, "TCP", 3) != 0
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
84 || (p[3] != '4' && p[3] != '6') || p[4] != ' ')
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
85 {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
86 goto invalid;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
87 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
88
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
89 p += 5;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
90
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
91 pp = ngx_pcalloc(c->pool, sizeof(ngx_proxy_protocol_t));
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
92 if (pp == NULL) {
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
93 return NULL;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
94 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
95
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
96 p = ngx_proxy_protocol_read_addr(c, p, last, &pp->src_addr);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
97 if (p == NULL) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
98 goto invalid;
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
99 }
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
100
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
101 p = ngx_proxy_protocol_read_addr(c, p, last, &pp->dst_addr);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
102 if (p == NULL) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
103 goto invalid;
6561
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6185
diff changeset
104 }
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6185
diff changeset
105
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
106 p = ngx_proxy_protocol_read_port(p, last, &pp->src_port, ' ');
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
107 if (p == NULL) {
6561
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6185
diff changeset
108 goto invalid;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6185
diff changeset
109 }
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6185
diff changeset
110
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
111 p = ngx_proxy_protocol_read_port(p, last, &pp->dst_port, CR);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
112 if (p == NULL) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
113 goto invalid;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
114 }
6561
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6185
diff changeset
115
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
116 if (p == last) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
117 goto invalid;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
118 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
119
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
120 if (*p++ != LF) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
121 goto invalid;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
122 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
123
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
124 ngx_log_debug4(NGX_LOG_DEBUG_CORE, c->log, 0,
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
125 "PROXY protocol src: %V %d, dst: %V %d",
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
126 &pp->src_addr, pp->src_port, &pp->dst_addr, pp->dst_port);
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
127
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
128 c->proxy_protocol = pp;
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
129
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
130 return p;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
131
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
132 skip:
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
133
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
134 for ( /* void */ ; p < last - 1; p++) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
135 if (p[0] == CR && p[1] == LF) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
136 return p + 2;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
137 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
138 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
139
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
140 invalid:
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
141
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
142 ngx_log_error(NGX_LOG_ERR, c->log, 0,
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
143 "broken header: \"%*s\"", (size_t) (last - buf), buf);
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
144
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
145 return NULL;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
146 }
6184
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
147
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
148
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
149 static u_char *
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
150 ngx_proxy_protocol_read_addr(ngx_connection_t *c, u_char *p, u_char *last,
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
151 ngx_str_t *addr)
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
152 {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
153 size_t len;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
154 u_char ch, *pos;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
155
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
156 pos = p;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
157
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
158 for ( ;; ) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
159 if (p == last) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
160 return NULL;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
161 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
162
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
163 ch = *p++;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
164
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
165 if (ch == ' ') {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
166 break;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
167 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
168
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
169 if (ch != ':' && ch != '.'
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
170 && (ch < 'a' || ch > 'f')
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
171 && (ch < 'A' || ch > 'F')
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
172 && (ch < '0' || ch > '9'))
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
173 {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
174 return NULL;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
175 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
176 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
177
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
178 len = p - pos - 1;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
179
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
180 addr->data = ngx_pnalloc(c->pool, len);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
181 if (addr->data == NULL) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
182 return NULL;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
183 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
184
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
185 ngx_memcpy(addr->data, pos, len);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
186 addr->len = len;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
187
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
188 return p;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
189 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
190
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
191
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
192 static u_char *
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
193 ngx_proxy_protocol_read_port(u_char *p, u_char *last, in_port_t *port,
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
194 u_char sep)
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
195 {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
196 size_t len;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
197 u_char *pos;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
198 ngx_int_t n;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
199
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
200 pos = p;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
201
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
202 for ( ;; ) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
203 if (p == last) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
204 return NULL;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
205 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
206
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
207 if (*p++ == sep) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
208 break;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
209 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
210 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
211
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
212 len = p - pos - 1;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
213
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
214 n = ngx_atoi(pos, len);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
215 if (n < 0 || n > 65535) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
216 return NULL;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
217 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
218
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
219 *port = (in_port_t) n;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
220
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
221 return p;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
222 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
223
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
224
6184
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
225 u_char *
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
226 ngx_proxy_protocol_write(ngx_connection_t *c, u_char *buf, u_char *last)
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
227 {
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
228 ngx_uint_t port, lport;
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
229
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
230 if (last - buf < NGX_PROXY_PROTOCOL_MAX_HEADER) {
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
231 return NULL;
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
232 }
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
233
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
234 if (ngx_connection_local_sockaddr(c, NULL, 0) != NGX_OK) {
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
235 return NULL;
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
236 }
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
237
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
238 switch (c->sockaddr->sa_family) {
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
239
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
240 case AF_INET:
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
241 buf = ngx_cpymem(buf, "PROXY TCP4 ", sizeof("PROXY TCP4 ") - 1);
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
242 break;
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
243
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
244 #if (NGX_HAVE_INET6)
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
245 case AF_INET6:
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
246 buf = ngx_cpymem(buf, "PROXY TCP6 ", sizeof("PROXY TCP6 ") - 1);
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
247 break;
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
248 #endif
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
249
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
250 default:
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
251 return ngx_cpymem(buf, "PROXY UNKNOWN" CRLF,
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
252 sizeof("PROXY UNKNOWN" CRLF) - 1);
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
253 }
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
254
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
255 buf += ngx_sock_ntop(c->sockaddr, c->socklen, buf, last - buf, 0);
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
256
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
257 *buf++ = ' ';
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
258
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
259 buf += ngx_sock_ntop(c->local_sockaddr, c->local_socklen, buf, last - buf,
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
260 0);
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
261
6593
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6561
diff changeset
262 port = ngx_inet_get_port(c->sockaddr);
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6561
diff changeset
263 lport = ngx_inet_get_port(c->local_sockaddr);
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6561
diff changeset
264
6184
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
265 return ngx_slprintf(buf, last, " %ui %ui" CRLF, port, lport);
fa663739e115 Stream: client-side PROXY protocol.
Roman Arutyunyan <arut@nginx.com>
parents: 5605
diff changeset
266 }
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
267
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
268
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
269 static u_char *
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
270 ngx_proxy_protocol_v2_read(ngx_connection_t *c, u_char *buf, u_char *last)
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
271 {
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
272 u_char *end;
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
273 size_t len;
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
274 socklen_t socklen;
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
275 ngx_uint_t version, command, family, transport;
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
276 ngx_sockaddr_t src_sockaddr, dst_sockaddr;
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
277 ngx_proxy_protocol_t *pp;
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
278 ngx_proxy_protocol_header_t *header;
7254
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
279 ngx_proxy_protocol_inet_addrs_t *in;
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
280 #if (NGX_HAVE_INET6)
7254
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
281 ngx_proxy_protocol_inet6_addrs_t *in6;
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
282 #endif
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
283
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
284 header = (ngx_proxy_protocol_header_t *) buf;
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
285
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
286 buf += sizeof(ngx_proxy_protocol_header_t);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
287
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
288 version = header->version_command >> 4;
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
289
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
290 if (version != 2) {
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
291 ngx_log_error(NGX_LOG_ERR, c->log, 0,
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
292 "unknown PROXY protocol version: %ui", version);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
293 return NULL;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
294 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
295
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
296 len = ngx_proxy_protocol_parse_uint16(header->len);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
297
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
298 if ((size_t) (last - buf) < len) {
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
299 ngx_log_error(NGX_LOG_ERR, c->log, 0, "header is too large");
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
300 return NULL;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
301 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
302
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
303 end = buf + len;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
304
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
305 command = header->version_command & 0x0f;
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
306
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
307 /* only PROXY is supported */
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
308 if (command != 1) {
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
309 ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0,
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
310 "PROXY protocol v2 unsupported command %ui", command);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
311 return end;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
312 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
313
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
314 transport = header->family_transport & 0x0f;
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
315
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
316 /* only STREAM is supported */
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
317 if (transport != 1) {
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
318 ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0,
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
319 "PROXY protocol v2 unsupported transport %ui",
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
320 transport);
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
321 return end;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
322 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
323
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
324 pp = ngx_pcalloc(c->pool, sizeof(ngx_proxy_protocol_t));
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
325 if (pp == NULL) {
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
326 return NULL;
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
327 }
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
328
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
329 family = header->family_transport >> 4;
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
330
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
331 switch (family) {
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
332
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
333 case NGX_PROXY_PROTOCOL_AF_INET:
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
334
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
335 if ((size_t) (end - buf) < sizeof(ngx_proxy_protocol_inet_addrs_t)) {
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
336 return NULL;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
337 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
338
7254
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
339 in = (ngx_proxy_protocol_inet_addrs_t *) buf;
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
340
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
341 src_sockaddr.sockaddr_in.sin_family = AF_INET;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
342 src_sockaddr.sockaddr_in.sin_port = 0;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
343 memcpy(&src_sockaddr.sockaddr_in.sin_addr, in->src_addr, 4);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
344
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
345 dst_sockaddr.sockaddr_in.sin_family = AF_INET;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
346 dst_sockaddr.sockaddr_in.sin_port = 0;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
347 memcpy(&dst_sockaddr.sockaddr_in.sin_addr, in->dst_addr, 4);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
348
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
349 pp->src_port = ngx_proxy_protocol_parse_uint16(in->src_port);
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
350 pp->dst_port = ngx_proxy_protocol_parse_uint16(in->dst_port);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
351
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
352 socklen = sizeof(struct sockaddr_in);
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
353
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
354 buf += sizeof(ngx_proxy_protocol_inet_addrs_t);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
355
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
356 break;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
357
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
358 #if (NGX_HAVE_INET6)
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
359
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
360 case NGX_PROXY_PROTOCOL_AF_INET6:
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
361
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
362 if ((size_t) (end - buf) < sizeof(ngx_proxy_protocol_inet6_addrs_t)) {
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
363 return NULL;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
364 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
365
7254
1fd992589ffe Core: fixed build, broken by 63e91f263a49.
Vladimir Homutov <vl@nginx.com>
parents: 7253
diff changeset
366 in6 = (ngx_proxy_protocol_inet6_addrs_t *) buf;
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
367
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
368 src_sockaddr.sockaddr_in6.sin6_family = AF_INET6;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
369 src_sockaddr.sockaddr_in6.sin6_port = 0;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
370 memcpy(&src_sockaddr.sockaddr_in6.sin6_addr, in6->src_addr, 16);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
371
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
372 dst_sockaddr.sockaddr_in6.sin6_family = AF_INET6;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
373 dst_sockaddr.sockaddr_in6.sin6_port = 0;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
374 memcpy(&dst_sockaddr.sockaddr_in6.sin6_addr, in6->dst_addr, 16);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
375
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
376 pp->src_port = ngx_proxy_protocol_parse_uint16(in6->src_port);
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
377 pp->dst_port = ngx_proxy_protocol_parse_uint16(in6->dst_port);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
378
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
379 socklen = sizeof(struct sockaddr_in6);
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
380
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
381 buf += sizeof(ngx_proxy_protocol_inet6_addrs_t);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
382
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
383 break;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
384
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
385 #endif
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
386
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
387 default:
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
388 ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0,
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
389 "PROXY protocol v2 unsupported address family %ui",
7252
7bdab16c55f1 Core: style.
Vladimir Homutov <vl@nginx.com>
parents: 7251
diff changeset
390 family);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
391 return end;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
392 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
393
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
394 pp->src_addr.data = ngx_pnalloc(c->pool, NGX_SOCKADDR_STRLEN);
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
395 if (pp->src_addr.data == NULL) {
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
396 return NULL;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
397 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
398
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
399 pp->src_addr.len = ngx_sock_ntop(&src_sockaddr.sockaddr, socklen,
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
400 pp->src_addr.data, NGX_SOCKADDR_STRLEN, 0);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
401
7591
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
402 pp->dst_addr.data = ngx_pnalloc(c->pool, NGX_SOCKADDR_STRLEN);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
403 if (pp->dst_addr.data == NULL) {
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
404 return NULL;
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
405 }
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
406
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
407 pp->dst_addr.len = ngx_sock_ntop(&dst_sockaddr.sockaddr, socklen,
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
408 pp->dst_addr.data, NGX_SOCKADDR_STRLEN, 0);
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
409
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
410 ngx_log_debug4(NGX_LOG_DEBUG_CORE, c->log, 0,
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
411 "PROXY protocol v2 src: %V %d, dst: %V %d",
89adf49fe76a Parsing server PROXY protocol address and port (ticket #1206).
Roman Arutyunyan <arut@nginx.com>
parents: 7590
diff changeset
412 &pp->src_addr, pp->src_port, &pp->dst_addr, pp->dst_port);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
413
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
414 if (buf < end) {
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
415 ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0,
7253
63e91f263a49 Core: revised the PROXY protocol v2 code.
Ruslan Ermilov <ru@nginx.com>
parents: 7252
diff changeset
416 "PROXY protocol v2 %z bytes of tlv ignored", end - buf);
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
417 }
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
418
7590
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
419 c->proxy_protocol = pp;
06b01840bd42 Core: moved PROXY protocol fields out of ngx_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 7254
diff changeset
420
7251
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
421 return end;
416953ef0428 Core: added processing of version 2 of the PROXY protocol.
Vladimir Homutov <vl@nginx.com>
parents: 6593
diff changeset
422 }