* asks for it.
*/
if ((sess->fe->options | s->be->options) & PR_O_FWDFOR) {
+ const struct sockaddr_storage *src = si_src(&s->si[0]);
struct http_hdr_ctx ctx = { .blk = NULL };
struct ist hdr = ist2(s->be->fwdfor_hdr_len ? s->be->fwdfor_hdr_name : sess->fe->fwdfor_hdr_name,
s->be->fwdfor_hdr_len ? s->be->fwdfor_hdr_len : sess->fe->fwdfor_hdr_len);
* and we found it, so don't do anything.
*/
}
- else if (cli_conn && conn_get_src(cli_conn) && cli_conn->src->ss_family == AF_INET) {
+ else if (src && src->ss_family == AF_INET) {
/* Add an X-Forwarded-For header unless the source IP is
* in the 'except' network range.
*/
- if (ipcmp2net(cli_conn->src, &sess->fe->except_xff_net) &&
- ipcmp2net(cli_conn->src, &s->be->except_xff_net)) {
- unsigned char *pn = (unsigned char *)&((struct sockaddr_in *)cli_conn->src)->sin_addr;
+ if (ipcmp2net(src, &sess->fe->except_xff_net) &&
+ ipcmp2net(src, &s->be->except_xff_net)) {
+ unsigned char *pn = (unsigned char *)&((struct sockaddr_in *)src)->sin_addr;
/* Note: we rely on the backend to get the header name to be used for
* x-forwarded-for, because the header is really meant for the backends.
goto return_int_err;
}
}
- else if (cli_conn && conn_get_src(cli_conn) && cli_conn->src->ss_family == AF_INET6) {
+ else if (src && src->ss_family == AF_INET6) {
/* Add an X-Forwarded-For header unless the source IP is
* in the 'except' network range.
*/
- if (ipcmp2net(cli_conn->src, &sess->fe->except_xff_net) &&
- ipcmp2net(cli_conn->src, &s->be->except_xff_net)) {
+ if (ipcmp2net(src, &sess->fe->except_xff_net) &&
+ ipcmp2net(src, &s->be->except_xff_net)) {
char pn[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6,
- (const void *)&((struct sockaddr_in6 *)(cli_conn->src))->sin6_addr,
+ (const void *)&((struct sockaddr_in6 *)(src))->sin6_addr,
pn, sizeof(pn));
/* Note: we rely on the backend to get the header name to be used for
* asks for it.
*/
if ((sess->fe->options | s->be->options) & PR_O_ORGTO) {
+ const struct sockaddr_storage *dst = si_dst(&s->si[0]);
struct ist hdr = ist2(s->be->orgto_hdr_len ? s->be->orgto_hdr_name : sess->fe->orgto_hdr_name,
s->be->orgto_hdr_len ? s->be->orgto_hdr_len : sess->fe->orgto_hdr_len);
- if (cli_conn && conn_get_dst(cli_conn) && cli_conn->dst->ss_family == AF_INET) {
+ if (dst && dst->ss_family == AF_INET) {
/* Add an X-Original-To header unless the destination IP is
* in the 'except' network range.
*/
- if (ipcmp2net(cli_conn->dst, &sess->fe->except_xot_net) &&
- ipcmp2net(cli_conn->dst, &s->be->except_xot_net)) {
- unsigned char *pn = (unsigned char *)&((struct sockaddr_in *)cli_conn->dst)->sin_addr;
+ if (ipcmp2net(dst, &sess->fe->except_xot_net) &&
+ ipcmp2net(dst, &s->be->except_xot_net)) {
+ unsigned char *pn = (unsigned char *)&((struct sockaddr_in *)dst)->sin_addr;
/* Note: we rely on the backend to get the header name to be used for
* x-original-to, because the header is really meant for the backends.
goto return_int_err;
}
}
- else if (cli_conn && conn_get_dst(cli_conn) && cli_conn->dst->ss_family == AF_INET6) {
+ else if (dst && dst->ss_family == AF_INET6) {
/* Add an X-Original-To header unless the source IP is
* in the 'except' network range.
*/
- if (ipcmp2net(cli_conn->dst, &sess->fe->except_xot_net) &&
- ipcmp2net(cli_conn->dst, &s->be->except_xot_net)) {
+ if (ipcmp2net(dst, &sess->fe->except_xot_net) &&
+ ipcmp2net(dst, &s->be->except_xot_net)) {
char pn[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6,
- (const void *)&((struct sockaddr_in6 *)(cli_conn->dst))->sin6_addr,
+ (const void *)&((struct sockaddr_in6 *)dst)->sin6_addr,
pn, sizeof(pn));
/* Note: we rely on the backend to get the header name to be used for