]> err.no Git - varnish/commitdiff
sockaddr.sa_len is not portable.
authordes <des@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Thu, 12 Jul 2007 17:37:44 +0000 (17:37 +0000)
committerdes <des@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Thu, 12 Jul 2007 17:37:44 +0000 (17:37 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@1678 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache_vrt.c

index 612a7d5c3757167ee3766b2a6b72172cfc87d442..6437f705cfb19549c40ec7eba299360fe668669d 100644 (file)
@@ -32,6 +32,9 @@
  */
 
 #include <sys/types.h>
+#include <sys/socket.h>
+
+#include <netinet/in.h>
 
 #include <stdio.h>
 #include <string.h>
@@ -480,8 +483,19 @@ char *
 VRT_IP_string(struct sess *sp, struct sockaddr *sa)
 {
        char h[64], p[8], *q;
+       socklen_t len = 0;
 
-       TCP_name(sa, sa->sa_len, h, sizeof h, p, sizeof p);
+       /* XXX can't rely on sockaddr.sa_len */
+       switch (sa->sa_family) {
+       case AF_INET:
+               len = sizeof(struct sockaddr_in);
+               break;
+       case AF_INET6:
+               len = sizeof(struct sockaddr_in6);
+               break;
+       }
+       XXXAN(len);
+       TCP_name(sa, len, h, sizeof h, p, sizeof p);
        q = WS_Alloc(sp->http->ws, strlen(h) + strlen(p) + 2);
        AN(q);
        strcpy(q, h);