Source: python-pcs
Version: 0.5+debian-1.1
Severity: normal
Tags: patch

IP6Connector.mcast() can/will fail in a variety of ways:

1) On 64-bit architectures (dl is not available there):

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/dist-packages/pcs/__init__.py", line 958, in mcast
    import dl
ImportError: No module named dl

2) If libc*-dev is not installed:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/dist-packages/pcs/__init__.py", line 959, in mcast
    _libc = dl.open('libc.so')
dl.error: libc.so: cannot open shared object file: No such file or directory

3) Because dl.open doesn't work for a reason or another:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/dist-packages/pcs/__init__.py", line 959, in mcast
    _libc = dl.open('libc.so')
dl.error: /usr/lib/libc.so: invalid ELF header

4) Otherwise:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/dist-packages/pcs/__init__.py", line 962, in mcast
    self.sock.setsockopt(IPPROTO_IPV6, IPV6_MULTICAST_LOOP, 1)
AttributeError: 'UDP6Connector' object has no attribute 'sock'


The attached patch fixes this bug.


-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (990, 'unstable'), (500, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.32-5-686 (SMP w/2 CPU cores)
Locale: LANG=C, LC_CTYPE=pl_PL.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

--
Jakub Wilk
diff -u python-pcs-0.5+debian/debian/control python-pcs-0.5+debian/debian/control
--- python-pcs-0.5+debian/debian/control
+++ python-pcs-0.5+debian/debian/control
@@ -4,7 +4,7 @@
 Maintainer: Robert S. Edmonds <edmo...@debian.org>
 Build-Depends: debhelper (>= 5.0.38), python-all-dev (>= 2.3.5-11), python-central (>= 0.5.6), dpatch, texlive-latex-recommended
 Standards-Version: 3.7.2
-XS-Python-Version: all
+XS-Python-Version: >= 2.5
 
 Package: python-pcs
 Architecture: all
diff -u python-pcs-0.5+debian/debian/changelog python-pcs-0.5+debian/debian/changelog
--- python-pcs-0.5+debian.orig/pcs/__init__.py
+++ python-pcs-0.5+debian/pcs/__init__.py
@@ -69,6 +69,9 @@
 
 import itertools
 
+import ctypes, ctypes.util
+_libc = ctypes.CDLL(ctypes.util.find_library('c'))
+
 def attribreprlist(obj, attrs):
     return map(lambda x, y = obj: '%s: %s' % (x, repr(getattr(y, x))), itertools.ifilter(lambda x, y = obj: hasattr(y, x), attrs))
 
@@ -954,9 +957,7 @@
 
     def mcast(self, iface):
         """set IP6 connector into multicast mode"""
-        import dl
-        _libc = dl.open('libc.so')
-        ifn = _libc.call('if_nametoindex', iface)
+        ifn = _libc.if_nametoindex(iface)
         self.sock.setsockopt(IPPROTO_IPV6, IPV6_MULTICAST_LOOP, 1)
         self.sock.setsockopt(IPPROTO_IPV6, IPV6_MULTICAST_HOPS, 5)
         self.sock.setsockopt(IPPROTO_IPV6, IPV6_MULTICAST_IF, ifn)

Attachment: signature.asc
Description: Digital signature

Reply via email to