1 /* 2 * Workarounds for known system software bugs. This module provides wrappers 3 * around library functions and system calls that are known to have problems 4 * on some systems. Most of these workarounds won't do any harm on regular 5 * systems. 6 * 7 * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands. |
8 * 9 * $FreeBSD: head/contrib/tcp_wrappers/workarounds.c 56977 2000-02-03 10:27:03Z shin $ |
10 */ 11 12#ifndef lint 13char sccsid[] = "@(#) workarounds.c 1.6 96/03/19 16:22:25"; 14#endif 15 16#include <sys/types.h> 17#include <sys/param.h> --- 145 unchanged lines hidden (view full) --- 163#undef getpeername 164 165int fix_getpeername(sock, sa, len) 166int sock; 167struct sockaddr *sa; 168int *len; 169{ 170 int ret; |
171#ifdef INET6 172 struct sockaddr *sin = sa; 173#else |
174 struct sockaddr_in *sin = (struct sockaddr_in *) sa; |
175#endif |
176 177 if ((ret = getpeername(sock, sa, len)) >= 0 |
178#ifdef INET6 179 && ((sin->su_si.si_family == AF_INET6 180 && IN6_IS_ADDR_UNSPECIFIED(&sin->su_sin6.sin6_addr)) 181 || (sin->su_si.si_family == AF_INET 182 && sin->su_sin.sin_addr.s_addr == 0))) { 183#else |
184 && sa->sa_family == AF_INET 185 && sin->sin_addr.s_addr == 0) { |
186#endif |
187 errno = ENOTCONN; 188 return (-1); 189 } else { 190 return (ret); 191 } 192} 193 194#endif /* GETPEERNAME_BUG */ --- 127 unchanged lines hidden --- |