system/resolver: return path of UNIX domain sockets

getnameinfo() doesn't work well - it always returns "localhost".
This commit is contained in:
Max Kellermann 2013-11-04 18:39:42 +01:00
parent eab1a77683
commit 7adfea8ca2
2 changed files with 17 additions and 7 deletions

2
NEWS
View File

@ -1,6 +1,8 @@
ver 0.18.1 (2013/11/??)
* protocol:
- always ignore whitespace at the end of the line
* networking:
- log UNIX domain path names instead of "localhost"
* filter:
- autoconvert: fix "volume_normalization" with mp3 files
* add missing files to source tarball

View File

@ -32,6 +32,10 @@
#include <winsock.h>
#endif
#ifdef HAVE_UN
#include <sys/un.h>
#endif
#include <string.h>
#include <stdio.h>
@ -40,6 +44,17 @@ const Domain resolver_domain("resolver");
char *
sockaddr_to_string(const struct sockaddr *sa, size_t length, Error &error)
{
#ifdef HAVE_UN
if (sa->sa_family == AF_UNIX) {
/* return path of UNIX domain sockets */
const sockaddr_un &s_un = *(const sockaddr_un *)sa;
if (length < sizeof(s_un) || s_un.sun_path[0] == 0)
return g_strdup("local");
return g_strdup(s_un.sun_path);
}
#endif
#if defined(HAVE_IPV6) && defined(IN6_IS_ADDR_V4MAPPED)
const struct sockaddr_in6 *a6 = (const struct sockaddr_in6 *)sa;
struct sockaddr_in a4;
@ -70,13 +85,6 @@ sockaddr_to_string(const struct sockaddr *sa, size_t length, Error &error)
return NULL;
}
#ifdef HAVE_UN
if (sa->sa_family == AF_UNIX)
/* "serv" contains corrupt information with unix
sockets */
return g_strdup(host);
#endif
#ifdef HAVE_IPV6
if (strchr(host, ':') != NULL)
return g_strconcat("[", host, "]:", serv, NULL);