try to cover AF_LOCAL in libwebsockets_get_peer_addresses
authorAndy Green <andy@warmcat.com>
Wed, 9 Mar 2011 15:13:52 +0000 (15:13 +0000)
committerAndy Green <andy@warmcat.com>
Wed, 9 Mar 2011 15:13:52 +0000 (15:13 +0000)
Signed-off-by: Andy Green <andy@warmcat.com>
lib/libwebsockets.c

index 40d25a8..d4e5435 100644 (file)
@@ -25,6 +25,7 @@
 
 #else
 #include <ifaddrs.h>
+#include <sys/un.h>
 #endif
 
 #ifdef LWS_OPENSSL_SUPPORT
@@ -371,6 +372,7 @@ libwebsockets_get_peer_addresses(int fd, char *name, int name_len,
        char ip[128];
        unsigned char *p;
        int n;
+       struct sockaddr_un *un;
 
        rip[0] = '\0';
        name[0] = '\0';
@@ -400,11 +402,17 @@ libwebsockets_get_peer_addresses(int fd, char *name, int name_len,
                p = (unsigned char *)host1->h_addr_list[n++];
                if (p == NULL)
                        continue;
-               if (host1->h_addrtype != AF_INET)
+               if ((host1->h_addrtype != AF_INET) &&
+                                               (host1->h_addrtype != AF_LOCAL))
                        continue;
 
-               sprintf(ip, "%u.%u.%u.%u",
-                               p[0], p[1], p[2], p[3]);
+               if (host1->h_addrtype == AF_INET)
+                       sprintf(ip, "%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
+               else {
+                       un = (struct sockaddr_un *)p;
+                       strncpy(ip, un->sun_path, sizeof(ip) -1);
+                       ip[sizeof(ip) - 1] = '\0';
+               }
                p = NULL;
                strncpy(rip, ip, rip_len);
                rip[rip_len - 1] = '\0';