summaryrefslogtreecommitdiff
path: root/debian/patches/dyson-socketmodule-ifindex.patch
blob: 3e022d7f88ed9e5413f43f8fbe1d2f55c0a2d504 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Index: python3.6-3.6.3~rc1/Modules/socketmodule.c
===================================================================
--- python3.6-3.6.3~rc1.orig/Modules/socketmodule.c
+++ python3.6-3.6.3~rc1/Modules/socketmodule.c
@@ -284,6 +284,10 @@ http://cvsweb.netbsd.org/bsdweb.cgi/src/
 #include <sys/socket.h>
 #endif
 
+#ifdef HAVE_SYS_SOCKIO_H
+#include <sys/sockio.h>
+#endif
+
 #ifdef HAVE_NET_IF_H
 #include <net/if.h>
 #endif
@@ -1767,11 +1771,15 @@ getsockaddrarg(PySocketSockObject *s, Py
     }
 #endif
 
-#if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFINDEX)
+#if defined(HAVE_NETPACKET_PACKET_H)
     case AF_PACKET:
     {
         struct sockaddr_ll* addr;
+#ifdef SIOCGLIFINDEX
+        struct lifreq lifr;
+#else
         struct ifreq ifr;
+#endif
         char *interfaceName;
         int protoNumber;
         int hatype = 0;
@@ -1790,6 +1798,15 @@ getsockaddrarg(PySocketSockObject *s, Py
                               &protoNumber, &pkttype, &hatype,
                               &haddr))
             return 0;
+#ifdef SIOCGLIFINDEX
+        strncpy(lifr.lifr_name, interfaceName, sizeof(lifr.lifr_name));
+        lifr.lifr_name[(sizeof(lifr.lifr_name))-1] = '\0';
+        if (ioctl(s->sock_fd, SIOCGLIFINDEX, &lifr) < 0) {
+            s->errorhandler();
+            PyBuffer_Release(&haddr);
+            return 0;
+        }
+#else
         strncpy(ifr.ifr_name, interfaceName, sizeof(ifr.ifr_name));
         ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0';
         if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) {
@@ -1797,6 +1814,7 @@ getsockaddrarg(PySocketSockObject *s, Py
             PyBuffer_Release(&haddr);
             return 0;
         }
+#endif
         if (haddr.buf && haddr.len > 8) {
             PyErr_SetString(PyExc_ValueError,
                             "Hardware address must be 8 bytes or less");
@@ -1813,7 +1831,11 @@ getsockaddrarg(PySocketSockObject *s, Py
         addr = (struct sockaddr_ll*)addr_ret;
         addr->sll_family = AF_PACKET;
         addr->sll_protocol = htons((short)protoNumber);
+#ifdef SIOCGLIFINDEX
+        addr->sll_ifindex = lifr.lifr_index;
+#else
         addr->sll_ifindex = ifr.ifr_ifindex;
+#endif
         addr->sll_pkttype = pkttype;
         addr->sll_hatype = hatype;
         if (haddr.buf) {
Index: python3.6-3.6.3~rc1/configure.ac
===================================================================
--- python3.6-3.6.3~rc1.orig/configure.ac
+++ python3.6-3.6.3~rc1/configure.ac
@@ -2053,6 +2053,7 @@ poll.h sys/devpoll.h sys/epoll.h sys/pol
 sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \
 sys/kern_control.h sys/loadavg.h sys/lock.h sys/mkdev.h sys/modem.h \
 sys/param.h sys/random.h sys/select.h sys/sendfile.h sys/socket.h sys/statvfs.h \
+sys/sockio.h \
 sys/stat.h sys/syscall.h sys/sys_domain.h sys/termio.h sys/time.h \
 sys/times.h sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/wait.h pty.h \
 libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \