X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Flocate_host.c;fp=webcit%2Flocate_host.c;h=d015f53f54ab1e6df2e7186a0f346ef2e5e297a5;hb=8611acef7ff4213c28ad20ff755d34509870bc96;hp=0000000000000000000000000000000000000000;hpb=76a0f8571de023fe6bd20390174a2302e0a0b982;p=citadel.git diff --git a/webcit/locate_host.c b/webcit/locate_host.c new file mode 100644 index 000000000..d015f53f5 --- /dev/null +++ b/webcit/locate_host.c @@ -0,0 +1,31 @@ +/* + * Given a socket, supply the name of the host at the other end. + * + * Copyright (c) 1996-2012 by the citadel.org team + * + * 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. + */ + +#include "webcit.h" +#include "webserver.h" + +/* + * IPv4/IPv6 locate_host() + */ +void locate_host(StrBuf *tbuf, int client_socket) +{ + struct sockaddr_in6 clientaddr; + unsigned int addrlen = sizeof(clientaddr); + char clienthost[NI_MAXHOST] = ""; + + getpeername(client_socket, (struct sockaddr *)&clientaddr, &addrlen); + 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); +}