diff --git a/plugins/User/plugin.py b/plugins/User/plugin.py index 5cc50e693..8eb0d72e3 100644 --- a/plugins/User/plugin.py +++ b/plugins/User/plugin.py @@ -356,6 +356,7 @@ class User(callbacks.Plugin): try: ircdb.users.setUser(user) except ircdb.DuplicateHostmask: + user.removeHostmask(hostmask) irc.error(_('That hostmask is already registered.'), Raise=True) except ValueError as e: diff --git a/plugins/User/test.py b/plugins/User/test.py index 850c6c02b..85b0987d0 100644 --- a/plugins/User/test.py +++ b/plugins/User/test.py @@ -38,8 +38,8 @@ import supybot.utils as utils class UserTestCase(PluginTestCase): plugins = ('User', 'Admin', 'Config') - prefix1 = 'somethingElse!user@host.tld' - prefix2 = 'EvensomethingElse!user@host.tld' + prefix1 = 'somethingElse!user@host1.tld' + prefix2 = 'EvensomethingElse!user@host2.tld' def testHostmaskList(self): self.assertError('hostmask list') @@ -60,6 +60,21 @@ class UserTestCase(PluginTestCase): self.assertNotError('identify foo bar') self.assertRegexp('hostmask list', 'no registered hostmasks') + def testHostmaskOverlap(self): + self.assertNotError('register foo passwd', frm=self.prefix1) + self.assertNotError('register bar passwd', frm=self.prefix2) + self.assertResponse('whoami', 'foo', frm=self.prefix1) + self.assertResponse('whoami', 'bar', frm=self.prefix2) + self.assertNotError('hostmask add foo *!*@foobar/b', + frm=self.prefix1) + self.assertResponse('hostmask add bar *!*@foobar/*', + 'Error: That hostmask is already registered.', + frm=self.prefix2) + self.assertRegexp('hostmask list foo', '\*!\*@foobar/b', + frm=self.prefix1) + self.assertNotRegexp('hostmask list bar', 'foobar', + frm=self.prefix2) + def testHostmask(self): self.assertResponse('hostmask', self.prefix)