Skip to content

Commit

Permalink
Fix Rule6 src/dst manipulation.
Browse files Browse the repository at this point in the history
  • Loading branch information
ldx committed Feb 7, 2013
1 parent e35fd13 commit 934bd77
Showing 1 changed file with 19 additions and 9 deletions.
28 changes: 19 additions & 9 deletions iptc/ip6tc.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,12 +254,14 @@ def get_src(self):
if self.entry.ipv6.invflags & ip6t_ip6.IP6T_INV_SRCIP:
src = "".join([src, "!"])
try:
addr = socket.inet_ntop(socket.AF_INET, self.entry.ipv6.src)
addr = socket.inet_ntop(socket.AF_INET6,
self.entry.ipv6.src.s6_addr)
except socket.error as e:
raise IPTCError("error in internal state: invalid address")
src = "".join([src, addr, "/"])
try:
netmask = socket.inet_ntop(socket.AF_INET, self.entry.ipv6.smsk)
netmask = socket.inet_ntop(socket.AF_INET6,
self.entry.ipv6.smsk.s6_addr)
except socket.error as e:
raise IPTCError("error in internal state: invalid netmask")
src = "".join([src, netmask])
Expand All @@ -281,16 +283,19 @@ def set_src(self, src):
addr = src[:slash]
netm = src[slash + 1:]

arr = ct.c_uint8 * 16
ina = in6_addr()
try:
ina.s6_addr = socket.inet_pton(socket.AF_INET6, addr)
ina.s6_addr = arr.from_buffer_copy(
socket.inet_pton(socket.AF_INET6, addr))
except socket.error as e:
raise ValueError("invalid address %s" % (addr))
self.entry.ipv6.src = ina

neta = in6_addr()
try:
neta.s6_addr = socket.inet_pton(socket.AF_INET6, netm)
neta.s6_addr = arr.from_buffer_copy(
socket.inet_pton(socket.AF_INET6, netm))
except socket.error as e:
raise ValueError("invalid netmask %s" % (netm))
self.entry.ipv6.smsk = neta
Expand All @@ -304,12 +309,14 @@ def get_dst(self):
if self.entry.ipv6.invflags & ip6t_ip6.IP6T_INV_DSTIP:
dst = "".join([dst, "!"])
try:
addr = socket.inet_ntop(socket.AF_INET6, self.entry.ipv6.dst)
addr = socket.inet_ntop(socket.AF_INET6,
self.entry.ipv6.dst.s6_addr)
except socket.error as e:
raise IPTCError("error in internal state: invalid address")
dst = "".join([dst, addr, "/"])
try:
netmask = socket.inet_ntop(socket.AF_INET6, self.entry.ipv6.smsk)
netmask = socket.inet_ntop(socket.AF_INET6,
self.entry.ipv6.dmsk.s6_addr)
except socket.error as e:
raise IPTCError("error in internal state: invalid netmask")
dst = "".join([dst, netmask])
Expand All @@ -331,19 +338,22 @@ def set_dst(self, dst):
addr = dst[:slash]
netm = dst[slash + 1:]

arr = ct.c_uint8 * 16
ina = in6_addr()
try:
ina.s6_addr = socket.inet_pton(socket.AF_INET6, addr)
ina.s6_addr = arr.from_buffer_copy(
socket.inet_pton(socket.AF_INET6, addr))
except socket.error as e:
raise ValueError("invalid address %s" % (addr))
self.entry.ipv6.dst = ina

neta = in6_addr()
try:
neta.s6_addr = socket.inet_pton(socket.AF_INET6, netm)
neta.s6_addr = arr.from_buffer_copy(
socket.inet_pton(socket.AF_INET6, netm))
except socket.error as e:
raise ValueError("invalid netmask %s" % (netm))
self.entry.ipv6.smsk = neta
self.entry.ipv6.dmsk = neta

dst = property(get_dst, set_dst)
"""This is the destination network address with an optional network mask
Expand Down

0 comments on commit 934bd77

Please sign in to comment.