Commit c97b311c authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Further sockaddr/sockaddr_storage sanitation in order to quiet FlexeLint


git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@1547 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent f6243606
......@@ -276,10 +276,10 @@ struct sess {
struct worker *wrk;
unsigned sockaddrlen;
struct sockaddr_storage sockaddr[1];
unsigned mysockaddrlen;
struct sockaddr_storage mysockaddr[1];
socklen_t sockaddrlen;
socklen_t mysockaddrlen;
struct sockaddr *sockaddr;
struct sockaddr *mysockaddr;
/* formatted ascii client address */
char addr[TCP_ADDRBUFSIZE];
......
......@@ -113,7 +113,7 @@ void
VCA_Prep(struct sess *sp)
{
TCP_name((struct sockaddr *)sp->sockaddr, sp->sockaddrlen,
TCP_name(sp->sockaddr, sp->sockaddrlen,
sp->addr, sizeof sp->addr, sp->port, sizeof sp->port);
VSL(SLT_SessionOpen, sp->fd, "%s %s", sp->addr, sp->port);
sp->acct.first = sp->t_open.tv_sec;
......
......@@ -67,6 +67,7 @@ struct sessmem {
struct http http;
unsigned workspace;
TAILQ_ENTRY(sessmem) list;
struct sockaddr_storage sockaddr[2];
};
static TAILQ_HEAD(,sessmem) ses_free_mem[2] = {
......@@ -255,6 +256,7 @@ struct sess *
SES_New(struct sockaddr *addr, unsigned len)
{
struct sessmem *sm;
struct sess *sp;
volatile unsigned u;
/*
......@@ -295,20 +297,26 @@ SES_New(struct sockaddr *addr, unsigned len)
return (NULL);
CHECK_OBJ_NOTNULL(sm, SESSMEM_MAGIC);
VSL_stats->n_sess++;
memset(&sm->sess, 0, sizeof sm->sess);
sm->sess.magic = SESS_MAGIC;
sm->sess.mem = sm;
sm->sess.http = &sm->http;
assert(len < sizeof(sm->sess.sockaddr));
sp = &sm->sess;
memset(sp, 0, sizeof *sp);
sp->magic = SESS_MAGIC;
sp->mem = sm;
sp->http = &sm->http;
sp->sockaddr = (void*)(&sm->sockaddr[0]);
sp->sockaddrlen = sizeof(sm->sockaddr[0]);
sp->mysockaddr = (void*)(&sm->sockaddr[1]);
sp->mysockaddrlen = sizeof(sm->sockaddr[1]);
sp->sockaddr->sa_family = sp->mysockaddr->sa_family = PF_UNSPEC;
assert(len <= sp->sockaddrlen);
if (addr != NULL) {
memcpy(sm->sess.sockaddr, addr, len);
sm->sess.sockaddrlen = len;
memcpy(sp->sockaddr, addr, len);
sp->sockaddrlen = len;
}
http_Setup(&sm->http, (void *)(sm + 1), sm->workspace);
return (&sm->sess);
return (sp);
}
void
......
......@@ -257,22 +257,17 @@ struct sockaddr *
VRT_r_client_ip(struct sess *sp)
{
return ((struct sockaddr *)sp->sockaddr);
return (sp->sockaddr);
}
struct sockaddr *
VRT_r_server_ip(struct sess *sp)
{
socklen_t l;
if (sp->mysockaddrlen == 0) {
l = sizeof sp->mysockaddr;
AZ(getsockname(sp->fd,
(struct sockaddr*)sp->mysockaddr, &l));
sp->mysockaddrlen = l;
}
if (sp->mysockaddr->sa_family == AF_UNSPEC)
AZ(getsockname(sp->fd, sp->mysockaddr, &sp->mysockaddrlen));
return ((struct sockaddr*)sp->mysockaddr);
return (sp->mysockaddr);
}
/*--------------------------------------------------------------------*/
......
......@@ -104,7 +104,7 @@ VRT_acl_match(struct sess *sp, struct sockaddr *sa, const char *acln, struct vrt
for (a1 = ap->priv; a1 != NULL; a1 = a1->ai_next) {
/* only match the right family */
if (a1->ai_family != sp->sockaddr->ss_family)
if (a1->ai_family != sp->sockaddr->sa_family)
continue;
if (a1->ai_family == AF_INET) {
......
......@@ -380,7 +380,7 @@ telnet_accept(struct ev *ev, int what)
(void)what;
addrlen = sizeof addr;
i = accept(ev->fd, (struct sockaddr *)&addr, &addrlen);
i = accept(ev->fd, (void *)&addr, &addrlen);
if (i < 0)
return (0);
......
......@@ -76,7 +76,8 @@ TCP_name(struct sockaddr *addr, unsigned l, char *abuf, unsigned alen, char *pbu
void
TCP_myname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen)
{
struct sockaddr addr[2]; /* XXX: IPv6 hack */
struct sockaddr_storage addr_s;
struct sockaddr *addr = (void*)&addr_s;
socklen_t l;
l = sizeof addr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment