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 <[email protected]> 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)
signature.asc
Description: Digital signature

