mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-12-23 19:22:45 +01:00
Merge remote-tracking branch 'supybot/maint/0.83.4' into testing
Conflicts: src/ircutils.py
This commit is contained in:
commit
be585ecea9
@ -1,6 +1,6 @@
|
||||
###
|
||||
# Copyright (c) 2003-2005, Jeremiah Fincher
|
||||
# Copyright (c) 2010, James Vega
|
||||
# Copyright (c) 2010-2011, James Vega
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@ -55,7 +55,7 @@ class Internet(callbacks.Plugin):
|
||||
irc.reply(hostname)
|
||||
else:
|
||||
try:
|
||||
ip = socket.gethostbyname(host)
|
||||
ip = socket.getaddrinfo(host, None)[0][4][0]
|
||||
if ip == '64.94.110.11': # Verisign sucks!
|
||||
irc.reply(_('Host not found.'))
|
||||
else:
|
||||
@ -153,12 +153,22 @@ class Internet(callbacks.Plugin):
|
||||
|
||||
Returns the hexadecimal IP for that IP.
|
||||
"""
|
||||
quads = ip.split('.')
|
||||
ret = ""
|
||||
for quad in quads:
|
||||
i = int(quad)
|
||||
ret += '%02x' % i
|
||||
irc.reply(ret.upper())
|
||||
if utils.net.isIPV4(ip):
|
||||
quads = ip.split('.')
|
||||
for quad in quads:
|
||||
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'])
|
||||
Internet = internationalizeDocstring(Internet)
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
###
|
||||
# Copyright (c) 2002-2004, Jeremiah Fincher
|
||||
# Copyright (c) 2010, James Vega
|
||||
# Copyright (c) 2010-2011, James Vega
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@ -68,7 +68,7 @@ class SeenDB(plugins.ChannelUserDB):
|
||||
|
||||
def seenWildcard(self, channel, nick):
|
||||
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():
|
||||
#print 'chan: %s ... nick: %s' % (searchChan, searchNick)
|
||||
if isinstance(searchNick, int):
|
||||
@ -77,11 +77,8 @@ class SeenDB(plugins.ChannelUserDB):
|
||||
# are keyed by nick-string
|
||||
continue
|
||||
if ircutils.strEqual(searchChan, channel):
|
||||
try:
|
||||
s = nickRe.match(searchNick).group()
|
||||
except AttributeError:
|
||||
continue
|
||||
nicks.add(s)
|
||||
if nickRe.search(searchNick) is not None:
|
||||
nicks.add(searchNick)
|
||||
L = [[nick, self.seen(channel, nick)] for nick in nicks]
|
||||
def negativeTime(x):
|
||||
return -x[1][0]
|
||||
|
@ -247,7 +247,7 @@ class Services(callbacks.Plugin):
|
||||
# You have been unbanned from (oftc)
|
||||
irc.sendMsg(networkGroup.channels.join(channel))
|
||||
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)
|
||||
elif 'this channel has been registered' in s:
|
||||
self.log.debug('Got "Registered channel" from ChanServ %s.', on)
|
||||
|
@ -1,6 +1,6 @@
|
||||
###
|
||||
# Copyright (c) 2002-2005, Jeremiah Fincher
|
||||
# Copyright (c) 2008-2009, James Vega
|
||||
# Copyright (c) 2008-2009,2011, James Vega
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@ -1050,7 +1050,7 @@ registerGroup(supybot.servers, 'http')
|
||||
class IP(registry.String):
|
||||
"""Value must be a valid IP."""
|
||||
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()
|
||||
else:
|
||||
registry.String.setValue(self, v)
|
||||
|
@ -1,6 +1,6 @@
|
||||
###
|
||||
# Copyright (c) 2002-2005, Jeremiah Fincher
|
||||
# Copyright (c) 2009, James Vega
|
||||
# Copyright (c) 2011, James Vega
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@ -187,7 +187,7 @@ def banmask(hostmask):
|
||||
"""
|
||||
assert isUserHostmask(hostmask)
|
||||
host = hostFromHostmask(hostmask)
|
||||
if utils.net.isIP(host):
|
||||
if utils.net.isIPV4(host):
|
||||
L = host.split('.')
|
||||
L[-1] = '*'
|
||||
return '*!*@' + '.'.join(L)
|
||||
@ -458,9 +458,9 @@ def replyTo(msg):
|
||||
return msg.nick
|
||||
|
||||
def dccIP(ip):
|
||||
"""Converts an IP string to the DCC integer form."""
|
||||
assert utils.net.isIP(ip), \
|
||||
'argument must be a string ip in xxx.xxx.xxx.xxx format.'
|
||||
"""Returns an IP in the proper for DCC."""
|
||||
assert utils.net.isIPV4(ip), \
|
||||
'argument must be a string ip in xxx.yyy.zzz.www format.'
|
||||
i = 0
|
||||
x = 256**3
|
||||
for quad in ip.split('.'):
|
||||
|
@ -1,5 +1,6 @@
|
||||
###
|
||||
# Copyright (c) 2002-2005, Jeremiah Fincher
|
||||
# Copyright (c) 2011, James Vega
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@ -85,7 +86,7 @@ def getSocket(host):
|
||||
"""
|
||||
addrinfo = socket.getaddrinfo(host, None)
|
||||
host = addrinfo[0][4][0]
|
||||
if isIP(host):
|
||||
if isIPV4(host):
|
||||
return socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
elif isIPV6(host):
|
||||
return socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
|
||||
@ -93,16 +94,27 @@ def getSocket(host):
|
||||
raise socket.error, 'Something wonky happened.'
|
||||
|
||||
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')
|
||||
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
|
||||
"""
|
||||
try:
|
||||
return bool(socket.inet_aton(s))
|
||||
return bool(socket.inet_pton(socket.AF_INET, s))
|
||||
except socket.error:
|
||||
return False
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
"""stick the various versioning attributes in here, so we only have to change
|
||||
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)'
|
||||
|
@ -1,6 +1,6 @@
|
||||
###
|
||||
# Copyright (c) 2002-2005, Jeremiah Fincher
|
||||
# Copyright (c) 2009, James Vega
|
||||
# Copyright (c) 2009,2011, James Vega
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@ -501,11 +501,9 @@ class NetTest(SupyTestCase):
|
||||
isIP = utils.net.isIP
|
||||
self.failIf(isIP('a.b.c'))
|
||||
self.failIf(isIP('256.0.0.0'))
|
||||
self.failUnless(isIP('127.1'))
|
||||
self.failUnless(isIP('0.0.0.0'))
|
||||
self.failUnless(isIP('100.100.100.100'))
|
||||
# This test is too flaky to bother with.
|
||||
# self.failUnless(utils.isIP('255.255.255.255'))
|
||||
self.failUnless(isIP('255.255.255.255'))
|
||||
|
||||
def testIsIPV6(self):
|
||||
f = utils.net.isIPV6
|
||||
|
Loading…
Reference in New Issue
Block a user