[MINOR] Support listener's sockets unix on http logs.

Enhance controls of sockets family on X-Forwarded-For and X-Original-To insert
This commit is contained in:
Emeric Brun 2010-10-22 17:23:04 +02:00 committed by Willy Tarreau
parent f769f51af6
commit 5bd86a8ff5

View File

@ -869,10 +869,12 @@ void http_sess_clflog(struct session *s)
inet_ntop(AF_INET, inet_ntop(AF_INET,
(const void *)&((struct sockaddr_in *)&s->cli_addr)->sin_addr, (const void *)&((struct sockaddr_in *)&s->cli_addr)->sin_addr,
pn, sizeof(pn)); pn, sizeof(pn));
else else if (s->cli_addr.ss_family == AF_INET6)
inet_ntop(AF_INET6, inet_ntop(AF_INET6,
(const void *)&((struct sockaddr_in6 *)(&s->cli_addr))->sin6_addr, (const void *)&((struct sockaddr_in6 *)(&s->cli_addr))->sin6_addr,
pn, sizeof(pn)); pn, sizeof(pn));
else
snprintf(pn, sizeof(pn), "unix:%d", s->listener->luid);
get_gmtime(s->logs.accept_date.tv_sec, &tm); get_gmtime(s->logs.accept_date.tv_sec, &tm);
@ -912,9 +914,10 @@ void http_sess_clflog(struct session *s)
w = snprintf(h, sizeof(tmpline) - (h - tmpline), w = snprintf(h, sizeof(tmpline) - (h - tmpline),
" %d %03d", " %d %03d",
(s->cli_addr.ss_family == AF_INET) ? s->cli_addr.ss_family == AF_UNIX ? s->listener->luid :
ntohs(((struct sockaddr_in *)&s->cli_addr)->sin_port) : ntohs((s->cli_addr.ss_family == AF_INET) ?
ntohs(((struct sockaddr_in6 *)&s->cli_addr)->sin6_port), ((struct sockaddr_in *)&s->cli_addr)->sin_port :
((struct sockaddr_in6 *)&s->cli_addr)->sin6_port),
(int)s->logs.accept_date.tv_usec/1000); (int)s->logs.accept_date.tv_usec/1000);
if (w < 0 || w >= sizeof(tmpline) - (h - tmpline)) if (w < 0 || w >= sizeof(tmpline) - (h - tmpline))
goto trunc; goto trunc;
@ -1100,7 +1103,7 @@ void http_sess_log(struct session *s)
inet_ntop(AF_INET, inet_ntop(AF_INET,
(const void *)&((struct sockaddr_in *)&s->cli_addr)->sin_addr, (const void *)&((struct sockaddr_in *)&s->cli_addr)->sin_addr,
pn, sizeof(pn)); pn, sizeof(pn));
else else if (s->cli_addr.ss_family == AF_INET6)
inet_ntop(AF_INET6, inet_ntop(AF_INET6,
(const void *)&((struct sockaddr_in6 *)(&s->cli_addr))->sin6_addr, (const void *)&((struct sockaddr_in6 *)(&s->cli_addr))->sin6_addr,
pn, sizeof(pn)); pn, sizeof(pn));
@ -1167,10 +1170,11 @@ void http_sess_log(struct session *s)
"%s:%d [%02d/%s/%04d:%02d:%02d:%02d.%03d]" "%s:%d [%02d/%s/%04d:%02d:%02d:%02d.%03d]"
" %s %s/%s %d/%ld/%ld/%ld/%s%ld %d %s%lld" " %s %s/%s %d/%ld/%ld/%ld/%s%ld %d %s%lld"
" %s %s %c%c%c%c %d/%d/%d/%d/%s%u %ld/%ld%s\n", " %s %s %c%c%c%c %d/%d/%d/%d/%s%u %ld/%ld%s\n",
pn, (s->cli_addr.ss_family == AF_UNIX) ? "unix" : pn,
(s->cli_addr.ss_family == AF_INET) ? (s->cli_addr.ss_family == AF_UNIX) ? s->listener->luid :
ntohs(((struct sockaddr_in *)&s->cli_addr)->sin_port) : ntohs((s->cli_addr.ss_family == AF_INET) ?
ntohs(((struct sockaddr_in6 *)&s->cli_addr)->sin6_port), ((struct sockaddr_in *)&s->cli_addr)->sin_port :
((struct sockaddr_in6 *)&s->cli_addr)->sin6_port),
tm.tm_mday, monthname[tm.tm_mon], tm.tm_year+1900, tm.tm_mday, monthname[tm.tm_mon], tm.tm_year+1900,
tm.tm_hour, tm.tm_min, tm.tm_sec, (int)s->logs.accept_date.tv_usec/1000, tm.tm_hour, tm.tm_min, tm.tm_sec, (int)s->logs.accept_date.tv_usec/1000,
fe->id, be->id, svid, fe->id, be->id, svid,
@ -3535,12 +3539,13 @@ int http_process_request(struct session *s, struct buffer *req, int an_bit)
if (!(s->flags & SN_FRT_ADDR_SET)) if (!(s->flags & SN_FRT_ADDR_SET))
get_frt_addr(s); get_frt_addr(s);
if ((!s->fe->except_mask_to.s_addr || if (s->frt_addr.ss_family == AF_INET &&
((!s->fe->except_mask_to.s_addr ||
(((struct sockaddr_in *)&s->frt_addr)->sin_addr.s_addr & s->fe->except_mask_to.s_addr) (((struct sockaddr_in *)&s->frt_addr)->sin_addr.s_addr & s->fe->except_mask_to.s_addr)
!= s->fe->except_to.s_addr) && != s->fe->except_to.s_addr) &&
(!s->be->except_mask_to.s_addr || (!s->be->except_mask_to.s_addr ||
(((struct sockaddr_in *)&s->frt_addr)->sin_addr.s_addr & s->be->except_mask_to.s_addr) (((struct sockaddr_in *)&s->frt_addr)->sin_addr.s_addr & s->be->except_mask_to.s_addr)
!= s->be->except_to.s_addr)) { != s->be->except_to.s_addr))) {
int len; int len;
unsigned char *pn; unsigned char *pn;
pn = (unsigned char *)&((struct sockaddr_in *)&s->frt_addr)->sin_addr; pn = (unsigned char *)&((struct sockaddr_in *)&s->frt_addr)->sin_addr;