Index: third_party/talloc/libreplace/getifaddrs.c |
diff --git a/third_party/talloc/libreplace/getifaddrs.c b/third_party/talloc/libreplace/getifaddrs.c |
deleted file mode 100644 |
index 3a91bb40d2ac44c87b8ff1885d8ca0be22b23f5b..0000000000000000000000000000000000000000 |
--- a/third_party/talloc/libreplace/getifaddrs.c |
+++ /dev/null |
@@ -1,352 +0,0 @@ |
-/* |
- Unix SMB/CIFS implementation. |
- Samba utility functions |
- Copyright (C) Andrew Tridgell 1998 |
- Copyright (C) Jeremy Allison 2007 |
- Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007 |
- |
- 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, see <http://www.gnu.org/licenses/>. |
-*/ |
- |
-#define SOCKET_WRAPPER_NOT_REPLACE |
- |
-#include "replace.h" |
-#include "system/network.h" |
- |
-#include <unistd.h> |
-#include <stdio.h> |
-#include <sys/types.h> |
- |
-#ifdef HAVE_SYS_TIME_H |
-#include <sys/time.h> |
-#endif |
- |
-#ifndef SIOCGIFCONF |
-#ifdef HAVE_SYS_SOCKIO_H |
-#include <sys/sockio.h> |
-#endif |
-#endif |
- |
-#ifdef HAVE_IFACE_GETIFADDRS |
-#define _FOUND_IFACE_ANY |
-#else |
- |
-void rep_freeifaddrs(struct ifaddrs *ifp) |
-{ |
- if (ifp != NULL) { |
- free(ifp->ifa_name); |
- free(ifp->ifa_addr); |
- free(ifp->ifa_netmask); |
- free(ifp->ifa_dstaddr); |
- freeifaddrs(ifp->ifa_next); |
- free(ifp); |
- } |
-} |
- |
-static struct sockaddr *sockaddr_dup(struct sockaddr *sa) |
-{ |
- struct sockaddr *ret; |
- socklen_t socklen; |
-#ifdef HAVE_SOCKADDR_SA_LEN |
- socklen = sa->sa_len; |
-#else |
- socklen = sizeof(struct sockaddr_storage); |
-#endif |
- ret = calloc(1, socklen); |
- if (ret == NULL) |
- return NULL; |
- memcpy(ret, sa, socklen); |
- return ret; |
-} |
-#endif |
- |
-#if HAVE_IFACE_IFCONF |
- |
-/* this works for Linux 2.2, Solaris 2.5, SunOS4, HPUX 10.20, OSF1 |
- V4.0, Ultrix 4.4, SCO Unix 3.2, IRIX 6.4 and FreeBSD 3.2. |
- |
- It probably also works on any BSD style system. */ |
- |
-int rep_getifaddrs(struct ifaddrs **ifap) |
-{ |
- struct ifconf ifc; |
- char buff[8192]; |
- int fd, i, n; |
- struct ifreq *ifr=NULL; |
- struct ifaddrs *curif; |
- struct ifaddrs *lastif = NULL; |
- |
- *ifap = NULL; |
- |
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { |
- return -1; |
- } |
- |
- ifc.ifc_len = sizeof(buff); |
- ifc.ifc_buf = buff; |
- |
- if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) { |
- close(fd); |
- return -1; |
- } |
- |
- ifr = ifc.ifc_req; |
- |
- n = ifc.ifc_len / sizeof(struct ifreq); |
- |
- /* Loop through interfaces, looking for given IP address */ |
- for (i=n-1; i>=0; i--) { |
- if (ioctl(fd, SIOCGIFFLAGS, &ifr[i]) == -1) { |
- freeifaddrs(*ifap); |
- return -1; |
- } |
- |
- curif = calloc(1, sizeof(struct ifaddrs)); |
- curif->ifa_name = strdup(ifr[i].ifr_name); |
- curif->ifa_flags = ifr[i].ifr_flags; |
- curif->ifa_dstaddr = NULL; |
- curif->ifa_data = NULL; |
- curif->ifa_next = NULL; |
- |
- curif->ifa_addr = NULL; |
- if (ioctl(fd, SIOCGIFADDR, &ifr[i]) != -1) { |
- curif->ifa_addr = sockaddr_dup(&ifr[i].ifr_addr); |
- } |
- |
- curif->ifa_netmask = NULL; |
- if (ioctl(fd, SIOCGIFNETMASK, &ifr[i]) != -1) { |
- curif->ifa_netmask = sockaddr_dup(&ifr[i].ifr_addr); |
- } |
- |
- if (lastif == NULL) { |
- *ifap = curif; |
- } else { |
- lastif->ifa_next = curif; |
- } |
- lastif = curif; |
- } |
- |
- close(fd); |
- |
- return 0; |
-} |
- |
-#define _FOUND_IFACE_ANY |
-#endif /* HAVE_IFACE_IFCONF */ |
-#ifdef HAVE_IFACE_IFREQ |
- |
-#ifndef I_STR |
-#include <sys/stropts.h> |
-#endif |
- |
-/**************************************************************************** |
-this should cover most of the streams based systems |
-Thanks to Andrej.Borsenkow@mow.siemens.ru for several ideas in this code |
-****************************************************************************/ |
-int rep_getifaddrs(struct ifaddrs **ifap) |
-{ |
- struct ifreq ifreq; |
- struct strioctl strioctl; |
- char buff[8192]; |
- int fd, i, n; |
- struct ifreq *ifr=NULL; |
- struct ifaddrs *curif; |
- struct ifaddrs *lastif = NULL; |
- |
- *ifap = NULL; |
- |
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { |
- return -1; |
- } |
- |
- strioctl.ic_cmd = SIOCGIFCONF; |
- strioctl.ic_dp = buff; |
- strioctl.ic_len = sizeof(buff); |
- if (ioctl(fd, I_STR, &strioctl) < 0) { |
- close(fd); |
- return -1; |
- } |
- |
- /* we can ignore the possible sizeof(int) here as the resulting |
- number of interface structures won't change */ |
- n = strioctl.ic_len / sizeof(struct ifreq); |
- |
- /* we will assume that the kernel returns the length as an int |
- at the start of the buffer if the offered size is a |
- multiple of the structure size plus an int */ |
- if (n*sizeof(struct ifreq) + sizeof(int) == strioctl.ic_len) { |
- ifr = (struct ifreq *)(buff + sizeof(int)); |
- } else { |
- ifr = (struct ifreq *)buff; |
- } |
- |
- /* Loop through interfaces */ |
- |
- for (i = 0; i<n; i++) { |
- ifreq = ifr[i]; |
- |
- curif = calloc(1, sizeof(struct ifaddrs)); |
- if (lastif == NULL) { |
- *ifap = curif; |
- } else { |
- lastif->ifa_next = curif; |
- } |
- |
- strioctl.ic_cmd = SIOCGIFFLAGS; |
- strioctl.ic_dp = (char *)&ifreq; |
- strioctl.ic_len = sizeof(struct ifreq); |
- if (ioctl(fd, I_STR, &strioctl) != 0) { |
- freeifaddrs(*ifap); |
- return -1; |
- } |
- |
- curif->ifa_flags = ifreq.ifr_flags; |
- |
- strioctl.ic_cmd = SIOCGIFADDR; |
- strioctl.ic_dp = (char *)&ifreq; |
- strioctl.ic_len = sizeof(struct ifreq); |
- if (ioctl(fd, I_STR, &strioctl) != 0) { |
- freeifaddrs(*ifap); |
- return -1; |
- } |
- |
- curif->ifa_name = strdup(ifreq.ifr_name); |
- curif->ifa_addr = sockaddr_dup(&ifreq.ifr_addr); |
- curif->ifa_dstaddr = NULL; |
- curif->ifa_data = NULL; |
- curif->ifa_next = NULL; |
- curif->ifa_netmask = NULL; |
- |
- strioctl.ic_cmd = SIOCGIFNETMASK; |
- strioctl.ic_dp = (char *)&ifreq; |
- strioctl.ic_len = sizeof(struct ifreq); |
- if (ioctl(fd, I_STR, &strioctl) != 0) { |
- freeifaddrs(*ifap); |
- return -1; |
- } |
- |
- curif->ifa_netmask = sockaddr_dup(&ifreq.ifr_addr); |
- |
- lastif = curif; |
- } |
- |
- close(fd); |
- |
- return 0; |
-} |
- |
-#define _FOUND_IFACE_ANY |
-#endif /* HAVE_IFACE_IFREQ */ |
-#ifdef HAVE_IFACE_AIX |
- |
-/**************************************************************************** |
-this one is for AIX (tested on 4.2) |
-****************************************************************************/ |
-int rep_getifaddrs(struct ifaddrs **ifap) |
-{ |
- char buff[8192]; |
- int fd, i; |
- struct ifconf ifc; |
- struct ifreq *ifr=NULL; |
- struct ifaddrs *curif; |
- struct ifaddrs *lastif = NULL; |
- |
- *ifap = NULL; |
- |
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { |
- return -1; |
- } |
- |
- ifc.ifc_len = sizeof(buff); |
- ifc.ifc_buf = buff; |
- |
- if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) { |
- close(fd); |
- return -1; |
- } |
- |
- ifr = ifc.ifc_req; |
- |
- /* Loop through interfaces */ |
- i = ifc.ifc_len; |
- |
- while (i > 0) { |
- uint_t inc; |
- |
- inc = ifr->ifr_addr.sa_len; |
- |
- if (ioctl(fd, SIOCGIFADDR, ifr) != 0) { |
- freeaddrinfo(*ifap); |
- return -1; |
- } |
- |
- curif = calloc(1, sizeof(struct ifaddrs)); |
- if (lastif == NULL) { |
- *ifap = curif; |
- } else { |
- lastif->ifa_next = curif; |
- } |
- |
- curif->ifa_name = strdup(ifr->ifr_name); |
- curif->ifa_addr = sockaddr_dup(&ifr->ifr_addr); |
- curif->ifa_dstaddr = NULL; |
- curif->ifa_data = NULL; |
- curif->ifa_netmask = NULL; |
- curif->ifa_next = NULL; |
- |
- if (ioctl(fd, SIOCGIFFLAGS, ifr) != 0) { |
- freeaddrinfo(*ifap); |
- return -1; |
- } |
- |
- curif->ifa_flags = ifr->ifr_flags; |
- |
- if (ioctl(fd, SIOCGIFNETMASK, ifr) != 0) { |
- freeaddrinfo(*ifap); |
- return -1; |
- } |
- |
- curif->ifa_netmask = sockaddr_dup(&ifr->ifr_addr); |
- |
- lastif = curif; |
- |
- next: |
- /* |
- * Patch from Archie Cobbs (archie@whistle.com). The |
- * addresses in the SIOCGIFCONF interface list have a |
- * minimum size. Usually this doesn't matter, but if |
- * your machine has tunnel interfaces, etc. that have |
- * a zero length "link address", this does matter. */ |
- |
- if (inc < sizeof(ifr->ifr_addr)) |
- inc = sizeof(ifr->ifr_addr); |
- inc += IFNAMSIZ; |
- |
- ifr = (struct ifreq*) (((char*) ifr) + inc); |
- i -= inc; |
- } |
- |
- close(fd); |
- return 0; |
-} |
- |
-#define _FOUND_IFACE_ANY |
-#endif /* HAVE_IFACE_AIX */ |
-#ifndef _FOUND_IFACE_ANY |
-int rep_getifaddrs(struct ifaddrs **ifap) |
-{ |
- errno = ENOSYS; |
- return -1; |
-} |
-#endif |