From bb046ac8c58c71939ebaa20b160c15e84f7a3fda Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sat, 3 Mar 2007 19:17:03 +0100 Subject: [PATCH] [MINOR] option forwardfor is for frontends too Finally, if the "option forwardfor" is specified in the frontend and not in the backend, apply it. --- TODO | 7 +++++++ src/proto_http.c | 15 +++------------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/TODO b/TODO index d6b574072..ae120a1e8 100644 --- a/TODO +++ b/TODO @@ -174,4 +174,11 @@ TODO for 1.3 filters and backend, on which every entity could rely. - implement 'on uri ', 'on host ' - remove the first now useless hop in hdr_idx + - implement "track XXX.YYY" for each server as an alternative to + health checks. This will automatically set the server state to + the same as server YYY of proxy XXX. + - balance on URI hash (specify length or depth) + - balance on any header hash (eg: host) + - balance with redirections to real servers + - multi-site LB with weighted redirections to the remote one diff --git a/src/proto_http.c b/src/proto_http.c index a7e51d534..289ece6c2 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -1133,16 +1133,6 @@ int process_cli(struct session *t) * * For the parsing, we use a 28 states FSM. * - * RFC2616 requires that both LF and CRLF are recognized as - * line breaks, but that any other combination is an error. - * To avoid duplicating all the states above to check for CR, - * we use a special bit HTTP_PA_LF_EXP that we 'OR' with the - * state we will switch to if the LF is seen, so that we know - * whether there's a pending CR or not. We can check it - * globally since all CR followed by anything but LF are - * errors. Each state is entered with the first character is - * has to process at req->lr. - * * Here is the information we currently have : * req->data + req->som = beginning of request * req->data + req->eoh = end of processed headers / start of current one @@ -1570,9 +1560,10 @@ int process_cli(struct session *t) /* - * 9: add X-Forwarded-For : Should depend on the backend only. + * 9: add X-Forwarded-For if either the frontend or the backend + * asks for it. */ - if (t->be->beprm->options & PR_O_FWDFOR) { + if ((t->fe->options | t->be->beprm->options) & PR_O_FWDFOR) { if (t->cli_addr.ss_family == AF_INET) { int len; unsigned char *pn;