aboutsummaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-ipv6-proximity-calculation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-ipv6-proximity-calculation.patch')
-rw-r--r--meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-ipv6-proximity-calculation.patch297
1 files changed, 0 insertions, 297 deletions
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-ipv6-proximity-calculation.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-ipv6-proximity-calculation.patch
deleted file mode 100644
index b341ecdd50..0000000000
--- a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-ipv6-proximity-calculation.patch
+++ /dev/null
@@ -1,297 +0,0 @@
-autofs-5.0.7 - fix ipv6 proximity calculation
-
-From: Ian Kent <ikent@redhat.com>
-
-The socket based ioctl used to get interface information only
-return IPv4 information. Change get_proximity() function to use
-getifaddrs(3) instead.
----
-
- CHANGELOG | 1
- modules/replicated.c | 149 ++++++++++++++------------------------------------
- 2 files changed, 42 insertions(+), 108 deletions(-)
-
-
-diff --git a/CHANGELOG b/CHANGELOG
-index dc38580..34c70fa 100644
---- a/CHANGELOG
-+++ b/CHANGELOG
-@@ -2,6 +2,7 @@
- =======================
- - fix nobind sun escaped map entries.
- - fix use cache entry after free in lookup_prune_one_cache().
-+- fix ipv6 proximity calculation.
-
- 25/07/2012 autofs-5.0.7
- =======================
-diff --git a/modules/replicated.c b/modules/replicated.c
-index 78046c6..bd6003b 100644
---- a/modules/replicated.c
-+++ b/modules/replicated.c
-@@ -52,6 +52,7 @@
- #include <net/if.h>
- #include <netinet/in.h>
- #include <netdb.h>
-+#include <ifaddrs.h>
-
- #include "rpc_subs.h"
- #include "replicated.h"
-@@ -110,58 +111,18 @@ void seed_random(void)
- return;
- }
-
--static int alloc_ifreq(struct ifconf *ifc, int sock)
--{
-- int ret, lastlen = ifc_last_len, len = ifc_buf_len;
-- char err_buf[MAX_ERR_BUF], *buf;
--
-- while (1) {
-- buf = malloc(len);
-- if (!buf) {
-- char *estr = strerror_r(errno, err_buf, MAX_ERR_BUF);
-- logerr("malloc: %s", estr);
-- return 0;
-- }
--
-- ifc->ifc_len = len;
-- ifc->ifc_req = (struct ifreq *) buf;
--
-- ret = ioctl(sock, SIOCGIFCONF, ifc);
-- if (ret == -1) {
-- char *estr = strerror_r(errno, err_buf, MAX_ERR_BUF);
-- logerr("ioctl: %s", estr);
-- free(buf);
-- return 0;
-- }
--
-- if (ifc->ifc_len <= lastlen)
-- break;
--
-- lastlen = ifc->ifc_len;
-- len += MAX_IFC_BUF;
-- free(buf);
-- }
--
-- if (lastlen != ifc_last_len) {
-- ifc_last_len = lastlen;
-- ifc_buf_len = len;
-- }
--
-- return 1;
--}
--
- static unsigned int get_proximity(struct sockaddr *host_addr)
- {
-+ struct ifaddrs *ifa = NULL;
-+ struct ifaddrs *this;
- struct sockaddr_in *addr, *msk_addr, *if_addr;
- struct sockaddr_in6 *addr6, *msk6_addr, *if6_addr;
- struct in_addr *hst_addr;
- struct in6_addr *hst6_addr;
- int addr_len;
-- char buf[MAX_ERR_BUF], *ptr;
-- struct ifconf ifc;
-- struct ifreq *ifr, nmptr;
-- int sock, ret, i;
-+ char buf[MAX_ERR_BUF];
- uint32_t mask, ha, ia, *mask6, *ha6, *ia6;
-+ int ret;
-
- addr = NULL;
- addr6 = NULL;
-@@ -170,13 +131,14 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
- mask6 = NULL;
- ha6 = NULL;
- ia6 = NULL;
-+ ha = 0;
-
- switch (host_addr->sa_family) {
- case AF_INET:
- addr = (struct sockaddr_in *) host_addr;
- hst_addr = (struct in_addr *) &addr->sin_addr;
- ha = ntohl((uint32_t) hst_addr->s_addr);
-- addr_len = sizeof(hst_addr);
-+ addr_len = sizeof(*hst_addr);
- break;
-
- case AF_INET6:
-@@ -186,7 +148,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
- addr6 = (struct sockaddr_in6 *) host_addr;
- hst6_addr = (struct in6_addr *) &addr6->sin6_addr;
- ha6 = &hst6_addr->s6_addr32[0];
-- addr_len = sizeof(hst6_addr);
-+ addr_len = sizeof(*hst6_addr);
- break;
- #endif
-
-@@ -194,36 +156,29 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
- return PROXIMITY_ERROR;
- }
-
-- sock = open_sock(AF_INET, SOCK_DGRAM, 0);
-- if (sock < 0) {
-+ ret = getifaddrs(&ifa);
-+ if (ret) {
- char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
-- logerr("socket creation failed: %s", estr);
-+ logerr("getifaddrs: %s", estr);
- return PROXIMITY_ERROR;
- }
-
-- if (!alloc_ifreq(&ifc, sock)) {
-- close(sock);
-- return PROXIMITY_ERROR;
-- }
--
-- /* For each interface */
--
-- /* Is the address a local interface */
-- i = 0;
-- ptr = (char *) &ifc.ifc_buf[0];
--
-- while (ptr < (char *) ifc.ifc_req + ifc.ifc_len) {
-- ifr = (struct ifreq *) ptr;
-+ this = ifa;
-+ while (this) {
-+ if (this->ifa_flags & IFF_POINTOPOINT ||
-+ this->ifa_addr->sa_data == NULL) {
-+ this = this->ifa_next;
-+ continue;
-+ }
-
-- switch (ifr->ifr_addr.sa_family) {
-+ switch (this->ifa_addr->sa_family) {
- case AF_INET:
- if (host_addr->sa_family == AF_INET6)
- break;
-- if_addr = (struct sockaddr_in *) &ifr->ifr_addr;
-+ if_addr = (struct sockaddr_in *) this->ifa_addr;
- ret = memcmp(&if_addr->sin_addr, hst_addr, addr_len);
- if (!ret) {
-- close(sock);
-- free(ifc.ifc_req);
-+ freeifaddrs(ifa);
- return PROXIMITY_LOCAL;
- }
- break;
-@@ -234,55 +189,41 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
- #else
- if (host_addr->sa_family == AF_INET)
- break;
--
-- if6_addr = (struct sockaddr_in6 *) &ifr->ifr_addr;
-+ if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
- ret = memcmp(&if6_addr->sin6_addr, hst6_addr, addr_len);
- if (!ret) {
-- close(sock);
-- free(ifc.ifc_req);
-+ freeifaddrs(ifa);
- return PROXIMITY_LOCAL;
- }
- #endif
--
- default:
- break;
- }
--
-- i++;
-- ptr = (char *) &ifc.ifc_req[i];
-+ this = this->ifa_next;
- }
-
-- i = 0;
-- ptr = (char *) &ifc.ifc_buf[0];
--
-- while (ptr < (char *) ifc.ifc_req + ifc.ifc_len) {
-- ifr = (struct ifreq *) ptr;
--
-- nmptr = *ifr;
-- ret = ioctl(sock, SIOCGIFNETMASK, &nmptr);
-- if (ret == -1) {
-- char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
-- logerr("ioctl: %s", estr);
-- close(sock);
-- free(ifc.ifc_req);
-- return PROXIMITY_ERROR;
-+ this = ifa;
-+ while (this) {
-+ if (this->ifa_flags & IFF_POINTOPOINT ||
-+ this->ifa_addr->sa_data == NULL) {
-+ this = this->ifa_next;
-+ continue;
- }
-
-- switch (ifr->ifr_addr.sa_family) {
-+ switch (this->ifa_addr->sa_family) {
- case AF_INET:
- if (host_addr->sa_family == AF_INET6)
- break;
-- if_addr = (struct sockaddr_in *) &ifr->ifr_addr;
-+ if_addr = (struct sockaddr_in *) this->ifa_addr;
- ia = ntohl((uint32_t) if_addr->sin_addr.s_addr);
-
-- /* Is the address within a localiy attached subnet */
-+ /* Is the address within a localy attached subnet */
-
-- msk_addr = (struct sockaddr_in *) &nmptr.ifr_netmask;
-+ msk_addr = (struct sockaddr_in *) this->ifa_netmask;
- mask = ntohl((uint32_t) msk_addr->sin_addr.s_addr);
-
- if ((ia & mask) == (ha & mask)) {
-- close(sock);
-- free(ifc.ifc_req);
-+ freeifaddrs(ifa);
- return PROXIMITY_SUBNET;
- }
-
-@@ -304,8 +245,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
- break;
-
- if ((ia & mask) == (ha & mask)) {
-- close(sock);
-- free(ifc.ifc_req);
-+ freeifaddrs(ifa);
- return PROXIMITY_NET;
- }
- break;
-@@ -316,35 +256,28 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
- #else
- if (host_addr->sa_family == AF_INET)
- break;
--
-- if6_addr = (struct sockaddr_in6 *) &ifr->ifr_addr;
-+ if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
- ia6 = &if6_addr->sin6_addr.s6_addr32[0];
-
- /* Is the address within the network of the interface */
-
-- msk6_addr = (struct sockaddr_in6 *) &nmptr.ifr_netmask;
-+ msk6_addr = (struct sockaddr_in6 *) this->ifa_netmask;
- mask6 = &msk6_addr->sin6_addr.s6_addr32[0];
-
- if (ipv6_mask_cmp(ha6, ia6, mask6)) {
-- close(sock);
-- free(ifc.ifc_req);
-+ freeifaddrs(ifa);
- return PROXIMITY_SUBNET;
- }
-
- /* How do we define "local network" in ipv6? */
- #endif
-- break;
--
- default:
- break;
- }
--
-- i++;
-- ptr = (char *) &ifc.ifc_req[i];
-+ this = this->ifa_next;
- }
-
-- close(sock);
-- free(ifc.ifc_req);
-+ freeifaddrs(ifa);
-
- return PROXIMITY_OTHER;
- }