[PATCH 2/3] git-daemon: use getnameinfo to resolve hostname
- From
- Jan Engelhardt <jengelh@medozas.de>
- Date
- Jan 14, 2009, 10:48 UTC
- Message-ID
- <alpine.LSU.2.00.0901141148130.16109@fbirervta.pbzchgretzou.qr>
- In-Reply-To
- <alpine.LSU.2.00.0901141147120.16109@fbirervta.pbzchgretzou.qr>
parent v1.6.1
git-daemon: use getnameinfo to resolve hostname
This is much shorter than inet_ntop'ing, and also translated unresolvable addresses into a string.
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
--- daemon.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-)
Index: git-1.6.1/daemon.c =================================================================== --- git-1.6.1.orig/daemon.c +++ git-1.6.1/daemon.c @@ -512,25 +512,13 @@ static int execute(struct sockaddr *addr int pktlen, len, i; if (addr) { - int port = -1; - - if (addr->sa_family == AF_INET) { - struct sockaddr_in *sin_addr = (void *) addr; - inet_ntop(addr->sa_family, &sin_addr->sin_addr, addrbuf, sizeof(addrbuf)); - port = ntohs(sin_addr->sin_port); -#ifndef NO_IPV6 - } else if (addr && addr->sa_family == AF_INET6) { - struct sockaddr_in6 *sin6_addr = (void *) addr; - - char *buf = addrbuf; - *buf++ = '['; *buf = '\0'; /* stpcpy() is cool */ - inet_ntop(AF_INET6, &sin6_addr->sin6_addr, buf, sizeof(addrbuf) - 1); - strcat(buf, "]"); - - port = ntohs(sin6_addr->sin6_port); -#endif - } - setenv("REMOTE_ADDR", addrbuf, 1); + i = getnameinfo(addr, (addr->sa_family == AF_INET6) ? + sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in), + addrbuf, sizeof(addrbuf), NULL, 0, 0); + if (i == 0) + setenv("REMOTE_ADDR", addrbuf, 1); + else + unsetenv("REMOTE_ADDR"); } else { unsetenv("REMOTE_ADDR");