From: phk Date: Sun, 24 Jun 2007 10:43:15 +0000 (+0000) Subject: Further sockaddr/sockaddr_storage sanitation in order to quiet FlexeLint X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc65f6a47d3fdc1dee6d2a811782952a6f3f1d33;p=varnish Further sockaddr/sockaddr_storage sanitation in order to quiet FlexeLint git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@1547 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishd/cache.h b/varnish-cache/bin/varnishd/cache.h index fdf248c0..00ce1d12 100644 --- a/varnish-cache/bin/varnishd/cache.h +++ b/varnish-cache/bin/varnishd/cache.h @@ -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]; diff --git a/varnish-cache/bin/varnishd/cache_acceptor.c b/varnish-cache/bin/varnishd/cache_acceptor.c index e59418a0..b505eb8f 100644 --- a/varnish-cache/bin/varnishd/cache_acceptor.c +++ b/varnish-cache/bin/varnishd/cache_acceptor.c @@ -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; diff --git a/varnish-cache/bin/varnishd/cache_session.c b/varnish-cache/bin/varnishd/cache_session.c index 2ca9efbf..390f270f 100644 --- a/varnish-cache/bin/varnishd/cache_session.c +++ b/varnish-cache/bin/varnishd/cache_session.c @@ -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 diff --git a/varnish-cache/bin/varnishd/cache_vrt.c b/varnish-cache/bin/varnishd/cache_vrt.c index 34d6b307..13256f64 100644 --- a/varnish-cache/bin/varnishd/cache_vrt.c +++ b/varnish-cache/bin/varnishd/cache_vrt.c @@ -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); } /*--------------------------------------------------------------------*/ diff --git a/varnish-cache/bin/varnishd/cache_vrt_acl.c b/varnish-cache/bin/varnishd/cache_vrt_acl.c index 6dc1a5d0..1157d02a 100644 --- a/varnish-cache/bin/varnishd/cache_vrt_acl.c +++ b/varnish-cache/bin/varnishd/cache_vrt_acl.c @@ -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) { diff --git a/varnish-cache/bin/varnishd/mgt_cli.c b/varnish-cache/bin/varnishd/mgt_cli.c index e7991593..f7964a94 100644 --- a/varnish-cache/bin/varnishd/mgt_cli.c +++ b/varnish-cache/bin/varnishd/mgt_cli.c @@ -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); diff --git a/varnish-cache/bin/varnishd/tcp.c b/varnish-cache/bin/varnishd/tcp.c index cc6e05a9..b3d6c265 100644 --- a/varnish-cache/bin/varnishd/tcp.c +++ b/varnish-cache/bin/varnishd/tcp.c @@ -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;