From: Timo Sirainen Date: Mon, 31 Aug 2009 21:04:27 +0000 (-0400) Subject: Added net_getunixname(). X-Git-Tag: 2.0.alpha1~209 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eaf2d66b35b0f4af999e920df79ab345c5cee4ab;p=thirdparty%2Fdovecot%2Fcore.git Added net_getunixname(). --HG-- branch : HEAD --- diff --git a/src/lib/network.c b/src/lib/network.c index 7c621c1707..cb31049de0 100644 --- a/src/lib/network.c +++ b/src/lib/network.c @@ -589,6 +589,21 @@ int net_getpeername(int fd, struct ip_addr *addr, unsigned int *port) return 0; } +int net_getunixname(int fd, const char **name_r) +{ + struct sockaddr_un sa; + socklen_t addrlen = sizeof(sa); + + if (getsockname(fd, (void *)&sa, &addrlen) < 0) + return -1; + if (sa.sun_family != AF_UNIX) { + errno = ENOTSOCK; + return -1; + } + *name_r = t_strdup(sa.sun_path); + return 0; +} + const char *net_ip2addr(const struct ip_addr *ip) { #ifdef HAVE_IPV6 diff --git a/src/lib/network.h b/src/lib/network.h index e4623d9bce..916f49c569 100644 --- a/src/lib/network.h +++ b/src/lib/network.h @@ -95,6 +95,8 @@ int net_hosterror_notfound(int error) ATTR_CONST; int net_getsockname(int fd, struct ip_addr *addr, unsigned int *port); /* Get socket remote address/port */ int net_getpeername(int fd, struct ip_addr *addr, unsigned int *port); +/* Get UNIX socket name. */ +int net_getunixname(int fd, const char **name_r); /* Returns ip_addr as string, or NULL if ip is invalid. */ const char *net_ip2addr(const struct ip_addr *ip);