3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-01 01:09:22 +01:00

Irc: hack in CIDR support in matchHost() (#411)

This commit is contained in:
James Lu 2017-02-24 22:27:11 -08:00
parent 04fa0520a6
commit 7c0cb92696

View File

@ -16,6 +16,7 @@ from copy import deepcopy
import inspect import inspect
import re import re
from collections import defaultdict, deque from collections import defaultdict, deque
import ipaddress
try: try:
import ircmatch import ircmatch
@ -1134,8 +1135,27 @@ class Irc():
if ip: if ip:
hosts.add(self.getHostmask(target, ip=True)) hosts.add(self.getHostmask(target, ip=True))
# HACK: support CIDR hosts in the hosts portion
try:
header, cidrtarget = glob.split('@', 1)
log.debug('(%s) Processing CIDRs for %s (full host: %s)', self.name,
cidrtarget, glob)
# Try to parse the host portion as a CIDR range
network = ipaddress.ip_network(cidrtarget)
log.debug('(%s) Found CIDR for %s, replacing target host with IP %s', self.name,
realhost, target)
real_ip = self.users[target].ip
if ipaddress.ip_address(real_ip) in network:
# If the CIDR matches, hack around the host matcher by pretending that
# the lookup target was the IP and not the CIDR range!
glob = '@'.join((header, real_ip))
except ValueError:
pass
if realhost: if realhost:
hosts.add(self.getHostmask(target, realhost=True)) hosts.add(self.getHostmask(target, realhost=True))
else: # We were given a host, use that. else: # We were given a host, use that.
hosts = [target] hosts = [target]