diff --git a/irc/database.go b/irc/database.go index 2608127b..c2989a22 100644 --- a/irc/database.go +++ b/irc/database.go @@ -24,7 +24,7 @@ const ( // 'version' of the database schema keySchemaVersion = "db.version" // latest schema of the db - latestDbSchema = "14" + latestDbSchema = "15" keyCloakSecret = "crypto.cloak_secret" ) @@ -792,6 +792,26 @@ func schemaChangeV13ToV14(config *Config, tx *buntdb.Tx) error { return nil } +// #1327: delete any invalid klines +func schemaChangeV14ToV15(config *Config, tx *buntdb.Tx) error { + prefix := "bans.klinev2 " + var keys []string + tx.AscendGreaterOrEqual("", prefix, func(key, value string) bool { + if !strings.HasPrefix(key, prefix) { + return false + } + if key != strings.TrimSpace(key) { + keys = append(keys, key) + } + return true + }) + // don't bother trying to fix these up + for _, key := range keys { + tx.Delete(key) + } + return nil +} + func init() { allChanges := []SchemaChange{ { @@ -859,6 +879,11 @@ func init() { TargetVersion: "14", Changer: schemaChangeV13ToV14, }, + { + InitialVersion: "14", + TargetVersion: "15", + Changer: schemaChangeV14ToV15, + }, } // build the index diff --git a/irc/strings.go b/irc/strings.go index 6c496f95..a977190e 100644 --- a/irc/strings.go +++ b/irc/strings.go @@ -222,6 +222,7 @@ func realSkeleton(name string) (string, error) { // Shivaram@good-fortune -> *!shivaram@good-fortune // EDMUND -> edmund!*@* func CanonicalizeMaskWildcard(userhost string) (expanded string, err error) { + userhost = strings.TrimSpace(userhost) var nick, user, host string bangIndex := strings.IndexByte(userhost, '!') strudelIndex := strings.IndexByte(userhost, '@') diff --git a/irc/strings_test.go b/irc/strings_test.go index 44f368af..1ffc1500 100644 --- a/irc/strings_test.go +++ b/irc/strings_test.go @@ -215,6 +215,7 @@ func TestCanonicalizeMaskWildcard(t *testing.T) { tester("shivaram*", "shivaram*!*@*", nil) tester("Shivaram*", "shivaram*!*@*", nil) tester("*SHIVARAM*", "*shivaram*!*@*", nil) + tester("*SHIVARAM* ", "*shivaram*!*@*", nil) } func validFoldTester(first, second string, equal bool, folder func(string) (string, error), t *testing.T) { diff --git a/irctest b/irctest index 513c74a5..f0eb6e4e 160000 --- a/irctest +++ b/irctest @@ -1 +1 @@ -Subproject commit 513c74a52b7fb4121e95037d7230ad1119188e00 +Subproject commit f0eb6e4e80669b7587ffd8802f20e0e5fef923b5