From 66fb4f44a6c7d520ac070898131e1e2f004da5e8 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Sat, 13 Mar 2010 19:58:57 +0000 Subject: [PATCH] * Port locate_host() to IPv6 --- webcit/locate_host.c | 51 +++++++++++++++++++++++++++++++++----------- webcit/tcp_sockets.c | 2 +- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/webcit/locate_host.c b/webcit/locate_host.c index 8b03833d5..165081005 100644 --- a/webcit/locate_host.c +++ b/webcit/locate_host.c @@ -1,20 +1,47 @@ /* * $Id$ + * + * Given a socket, supply the name of the host at the other end. + * + * Copyright (c) 1996-2010 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 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 */ -/** - * \defgroup Hostlookup Examine a socket and determine the name/address of the originating host. - * \ingroup WebcitHttpServer - */ -/*@{*/ #include "webcit.h" -/** - * \brief get a hostname - * \todo buffersize? - * \param tbuf the returnbuffer - * \param client_socket the sock fd where the client is connected - */ + +#ifdef CTDL_IPV6 + +void locate_host(StrBuf *tbuf, int client_socket) +{ + struct sockaddr_in6 clientaddr; + unsigned int addrlen = sizeof(clientaddr); + char str[256]; + + 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; @@ -41,4 +68,4 @@ void locate_host(StrBuf *tbuf, int client_socket) StrBufAppendBufPlain(tbuf, ch->h_name, -1, 0); } -/*@}*/ +#endif /* CTDL_IPV6 */ diff --git a/webcit/tcp_sockets.c b/webcit/tcp_sockets.c index feac83f7a..bf8762fd3 100644 --- a/webcit/tcp_sockets.c +++ b/webcit/tcp_sockets.c @@ -567,7 +567,7 @@ int ig_tcp_server(char *ip_addr, int port_number, int queue_len) } if (inet_pton(AF_INET6, bind_to, &sin.sin6_addr) <= 0) { lprintf(1, "Error binding to [%s] : %s\n", ip_addr, strerror(errno)); - abort(); + return (-WC_EXIT_BIND); } } -- 2.30.2