X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Flocate_host.c;h=d015f53f54ab1e6df2e7186a0f346ef2e5e297a5;hb=HEAD;hp=165081005e6bdd67e1b0ffa3f252316402852a29;hpb=66fb4f44a6c7d520ac070898131e1e2f004da5e8;p=citadel.git diff --git a/webcit/locate_host.c b/webcit/locate_host.c index 165081005..d3ba61707 100644 --- a/webcit/locate_host.c +++ b/webcit/locate_host.c @@ -1,71 +1,31 @@ /* - * $Id$ - * * Given a socket, supply the name of the host at the other end. * - * Copyright (c) 1996-2010 by the citadel.org team + * Copyright (c) 1996-2012 by the citadel.org team * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * This program is open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "webcit.h" -#ifdef CTDL_IPV6 - +/* + * IPv4/IPv6 locate_host() + */ void locate_host(StrBuf *tbuf, int client_socket) { struct sockaddr_in6 clientaddr; unsigned int addrlen = sizeof(clientaddr); - char str[256]; + char clienthost[NI_MAXHOST] = ""; getpeername(client_socket, (struct sockaddr *)&clientaddr, &addrlen); - if(inet_ntop(AF_INET6, &clientaddr.sin6_addr, str, sizeof(str))) { - StrBufAppendBufPlain(tbuf, str, -1, 0); - } - else { - StrBufAppendBufPlain(tbuf, HKEY(""), 0); - } -} - -#else /* CTDL_IPV6 */ - -void locate_host(StrBuf *tbuf, int client_socket) -{ - struct sockaddr_in cs; - struct hostent *ch; - socklen_t len; - char *i; - int a1, a2, a3, a4; - - len = sizeof(cs); - if (getpeername(client_socket, (struct sockaddr *) &cs, &len) < 0) { - StrBufAppendBufPlain(tbuf, HKEY(""), 0); - return; - } - if ((ch = gethostbyaddr((char *) &cs.sin_addr, sizeof(cs.sin_addr), - AF_INET)) == NULL) { - i = (char *) &cs.sin_addr; - a1 = ((*i++) & 0xff); - a2 = ((*i++) & 0xff); - a3 = ((*i++) & 0xff); - a4 = ((*i++) & 0xff); - StrBufPrintf(tbuf, "%d.%d.%d.%d", a1, a2, a3, a4); - return; - } - StrBufAppendBufPlain(tbuf, ch->h_name, -1, 0); + getnameinfo((struct sockaddr *)&clientaddr, addrlen, clienthost, sizeof(clienthost), NULL, 0, 0); + StrBufAppendBufPlain(tbuf, clienthost, -1, 0); + syslog(LOG_DEBUG, "Client is at %s\n", clienthost); } - -#endif /* CTDL_IPV6 */