Merge remote-tracking branch 'supybot/maint/0.83.4' into testing

Conflicts:
	src/ircutils.py
This commit is contained in:
Valentin Lorentz 2011-08-23 16:41:52 +02:00
commit be585ecea9
8 changed files with 48 additions and 31 deletions

View File

@ -1,6 +1,6 @@
### ###
# Copyright (c) 2003-2005, Jeremiah Fincher # Copyright (c) 2003-2005, Jeremiah Fincher
# Copyright (c) 2010, James Vega # Copyright (c) 2010-2011, James Vega
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -55,7 +55,7 @@ class Internet(callbacks.Plugin):
irc.reply(hostname) irc.reply(hostname)
else: else:
try: try:
ip = socket.gethostbyname(host) ip = socket.getaddrinfo(host, None)[0][4][0]
if ip == '64.94.110.11': # Verisign sucks! if ip == '64.94.110.11': # Verisign sucks!
irc.reply(_('Host not found.')) irc.reply(_('Host not found.'))
else: else:
@ -153,12 +153,22 @@ class Internet(callbacks.Plugin):
Returns the hexadecimal IP for that IP. Returns the hexadecimal IP for that IP.
""" """
quads = ip.split('.')
ret = "" ret = ""
for quad in quads: if utils.net.isIPV4(ip):
i = int(quad) quads = ip.split('.')
ret += '%02x' % i for quad in quads:
irc.reply(ret.upper()) i = int(quad)
ret += '%02X' % i
else:
octets = ip.split(':')
for octet in octets:
if octet:
i = int(octet, 16)
ret += '%04X' % i
else:
missing = (8 - len(octets)) * 4
ret += '0' * missing
irc.reply(ret)
hexip = wrap(hexip, ['ip']) hexip = wrap(hexip, ['ip'])
Internet = internationalizeDocstring(Internet) Internet = internationalizeDocstring(Internet)

View File

@ -1,6 +1,6 @@
### ###
# Copyright (c) 2002-2004, Jeremiah Fincher # Copyright (c) 2002-2004, Jeremiah Fincher
# Copyright (c) 2010, James Vega # Copyright (c) 2010-2011, James Vega
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -68,7 +68,7 @@ class SeenDB(plugins.ChannelUserDB):
def seenWildcard(self, channel, nick): def seenWildcard(self, channel, nick):
nicks = ircutils.IrcSet() nicks = ircutils.IrcSet()
nickRe = re.compile('.*'.join(nick.split('*')), re.I) nickRe = re.compile('^%s$' % '.*'.join(nick.split('*')), re.I)
for (searchChan, searchNick) in self.keys(): for (searchChan, searchNick) in self.keys():
#print 'chan: %s ... nick: %s' % (searchChan, searchNick) #print 'chan: %s ... nick: %s' % (searchChan, searchNick)
if isinstance(searchNick, int): if isinstance(searchNick, int):
@ -77,11 +77,8 @@ class SeenDB(plugins.ChannelUserDB):
# are keyed by nick-string # are keyed by nick-string
continue continue
if ircutils.strEqual(searchChan, channel): if ircutils.strEqual(searchChan, channel):
try: if nickRe.search(searchNick) is not None:
s = nickRe.match(searchNick).group() nicks.add(searchNick)
except AttributeError:
continue
nicks.add(s)
L = [[nick, self.seen(channel, nick)] for nick in nicks] L = [[nick, self.seen(channel, nick)] for nick in nicks]
def negativeTime(x): def negativeTime(x):
return -x[1][0] return -x[1][0]

View File

@ -247,7 +247,7 @@ class Services(callbacks.Plugin):
# You have been unbanned from (oftc) # You have been unbanned from (oftc)
irc.sendMsg(networkGroup.channels.join(channel)) irc.sendMsg(networkGroup.channels.join(channel))
elif 'isn\'t registered' in s: elif 'isn\'t registered' in s:
self.log.warning('Received "%s isn\'t registered" from ChanServ %', self.log.warning('Received "%s isn\'t registered" from ChanServ %s',
channel, on) channel, on)
elif 'this channel has been registered' in s: elif 'this channel has been registered' in s:
self.log.debug('Got "Registered channel" from ChanServ %s.', on) self.log.debug('Got "Registered channel" from ChanServ %s.', on)

View File

@ -1,6 +1,6 @@
### ###
# Copyright (c) 2002-2005, Jeremiah Fincher # Copyright (c) 2002-2005, Jeremiah Fincher
# Copyright (c) 2008-2009, James Vega # Copyright (c) 2008-2009,2011, James Vega
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -1050,7 +1050,7 @@ registerGroup(supybot.servers, 'http')
class IP(registry.String): class IP(registry.String):
"""Value must be a valid IP.""" """Value must be a valid IP."""
def setValue(self, v): def setValue(self, v):
if v and not (utils.net.isIP(v) or utils.net.isIPV6(v)): if v and not utils.net.isIP(v):
self.error() self.error()
else: else:
registry.String.setValue(self, v) registry.String.setValue(self, v)

View File

@ -1,6 +1,6 @@
### ###
# Copyright (c) 2002-2005, Jeremiah Fincher # Copyright (c) 2002-2005, Jeremiah Fincher
# Copyright (c) 2009, James Vega # Copyright (c) 2011, James Vega
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -187,7 +187,7 @@ def banmask(hostmask):
""" """
assert isUserHostmask(hostmask) assert isUserHostmask(hostmask)
host = hostFromHostmask(hostmask) host = hostFromHostmask(hostmask)
if utils.net.isIP(host): if utils.net.isIPV4(host):
L = host.split('.') L = host.split('.')
L[-1] = '*' L[-1] = '*'
return '*!*@' + '.'.join(L) return '*!*@' + '.'.join(L)
@ -458,9 +458,9 @@ def replyTo(msg):
return msg.nick return msg.nick
def dccIP(ip): def dccIP(ip):
"""Converts an IP string to the DCC integer form.""" """Returns an IP in the proper for DCC."""
assert utils.net.isIP(ip), \ assert utils.net.isIPV4(ip), \
'argument must be a string ip in xxx.xxx.xxx.xxx format.' 'argument must be a string ip in xxx.yyy.zzz.www format.'
i = 0 i = 0
x = 256**3 x = 256**3
for quad in ip.split('.'): for quad in ip.split('.'):

View File

@ -1,5 +1,6 @@
### ###
# Copyright (c) 2002-2005, Jeremiah Fincher # Copyright (c) 2002-2005, Jeremiah Fincher
# Copyright (c) 2011, James Vega
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -85,7 +86,7 @@ def getSocket(host):
""" """
addrinfo = socket.getaddrinfo(host, None) addrinfo = socket.getaddrinfo(host, None)
host = addrinfo[0][4][0] host = addrinfo[0][4][0]
if isIP(host): if isIPV4(host):
return socket.socket(socket.AF_INET, socket.SOCK_STREAM) return socket.socket(socket.AF_INET, socket.SOCK_STREAM)
elif isIPV6(host): elif isIPV6(host):
return socket.socket(socket.AF_INET6, socket.SOCK_STREAM) return socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
@ -93,16 +94,27 @@ def getSocket(host):
raise socket.error, 'Something wonky happened.' raise socket.error, 'Something wonky happened.'
def isIP(s): def isIP(s):
"""Returns whether or not a given string is an IPV4 address. """Returns whether or not a given string is an IP address.
>>> isIP('255.255.255.255') >>> isIP('255.255.255.255')
1 1
>>> isIP('abc.abc.abc.abc') >>> isIP('::1')
0
"""
return isIPV4(s) or isIPV6(s)
def isIPV4(s):
"""Returns whether or not a given string is an IPV4 address.
>>> isIPV4('255.255.255.255')
1
>>> isIPV4('abc.abc.abc.abc')
0 0
""" """
try: try:
return bool(socket.inet_aton(s)) return bool(socket.inet_pton(socket.AF_INET, s))
except socket.error: except socket.error:
return False return False

View File

@ -1,3 +1,3 @@
"""stick the various versioning attributes in here, so we only have to change """stick the various versioning attributes in here, so we only have to change
them once.""" them once."""
version = '0.83.4.1+limnoria (2011-08-18T11:07:25+0200)' version = '0.83.4.1+limnoria (2011-08-23T16:41:52+0200)'

View File

@ -1,6 +1,6 @@
### ###
# Copyright (c) 2002-2005, Jeremiah Fincher # Copyright (c) 2002-2005, Jeremiah Fincher
# Copyright (c) 2009, James Vega # Copyright (c) 2009,2011, James Vega
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -501,11 +501,9 @@ class NetTest(SupyTestCase):
isIP = utils.net.isIP isIP = utils.net.isIP
self.failIf(isIP('a.b.c')) self.failIf(isIP('a.b.c'))
self.failIf(isIP('256.0.0.0')) self.failIf(isIP('256.0.0.0'))
self.failUnless(isIP('127.1'))
self.failUnless(isIP('0.0.0.0')) self.failUnless(isIP('0.0.0.0'))
self.failUnless(isIP('100.100.100.100')) self.failUnless(isIP('100.100.100.100'))
# This test is too flaky to bother with. self.failUnless(isIP('255.255.255.255'))
# self.failUnless(utils.isIP('255.255.255.255'))
def testIsIPV6(self): def testIsIPV6(self):
f = utils.net.isIPV6 f = utils.net.isIPV6