From 584f2261a8b6f188467d0abd6a2feea750e2a9b6 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Sun, 22 Sep 2019 15:45:06 -0400 Subject: [PATCH 1/3] fix #625 --- irc/server.go | 1 + 1 file changed, 1 insertion(+) diff --git a/irc/server.go b/irc/server.go index c5c78d34..47888141 100644 --- a/irc/server.go +++ b/irc/server.go @@ -137,6 +137,7 @@ func (config *Config) generateISupport() (err error) { isupport.Initialize() isupport.Add("AWAYLEN", strconv.Itoa(config.Limits.AwayLen)) isupport.Add("CASEMAPPING", "ascii") + isupport.Add("CHANLIMIT", fmt.Sprintf("#:%d", config.Channels.MaxChannelsPerClient)) isupport.Add("CHANMODES", strings.Join([]string{modes.Modes{modes.BanMask, modes.ExceptMask, modes.InviteMask}.String(), "", modes.Modes{modes.UserLimit, modes.Key}.String(), modes.Modes{modes.InviteOnly, modes.Moderated, modes.NoOutside, modes.OpOnlyTopic, modes.ChanRoleplaying, modes.Secret}.String()}, ",")) if config.History.Enabled && config.History.ChathistoryMax > 0 { isupport.Add("draft/CHATHISTORY", strconv.Itoa(config.History.ChathistoryMax)) From 1ce716582a1fa705fce96760ba3bf2ba3967ccce Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Sun, 22 Sep 2019 15:48:17 -0400 Subject: [PATCH 2/3] make CHANTYPES a constant --- irc/server.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/irc/server.go b/irc/server.go index 47888141..b9a79536 100644 --- a/irc/server.go +++ b/irc/server.go @@ -42,6 +42,10 @@ var ( // whitelist of caps to serve on the STS-only listener. In particular, // never advertise SASL, to discourage people from sending their passwords: stsOnlyCaps = caps.NewSet(caps.STS, caps.MessageTags, caps.ServerTime, caps.LabeledResponse, caps.Nope) + + // we only have standard channels for now. TODO: any updates to this + // will also need to be reflected in CasefoldChannel + chanTypes = "#" ) // ListenerWrapper wraps a listener so it can be safely reconfigured or stopped @@ -137,13 +141,13 @@ func (config *Config) generateISupport() (err error) { isupport.Initialize() isupport.Add("AWAYLEN", strconv.Itoa(config.Limits.AwayLen)) isupport.Add("CASEMAPPING", "ascii") - isupport.Add("CHANLIMIT", fmt.Sprintf("#:%d", config.Channels.MaxChannelsPerClient)) + isupport.Add("CHANLIMIT", fmt.Sprintf("%s:%d", chanTypes, config.Channels.MaxChannelsPerClient)) isupport.Add("CHANMODES", strings.Join([]string{modes.Modes{modes.BanMask, modes.ExceptMask, modes.InviteMask}.String(), "", modes.Modes{modes.UserLimit, modes.Key}.String(), modes.Modes{modes.InviteOnly, modes.Moderated, modes.NoOutside, modes.OpOnlyTopic, modes.ChanRoleplaying, modes.Secret}.String()}, ",")) if config.History.Enabled && config.History.ChathistoryMax > 0 { isupport.Add("draft/CHATHISTORY", strconv.Itoa(config.History.ChathistoryMax)) } isupport.Add("CHANNELLEN", strconv.Itoa(config.Limits.ChannelLen)) - isupport.Add("CHANTYPES", "#") + isupport.Add("CHANTYPES", chanTypes) isupport.Add("ELIST", "U") isupport.Add("EXCEPTS", "") isupport.Add("INVEX", "") From c1acf3ea430c78e3b0a8d39a9cc44fbba4ce785a Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Sun, 22 Sep 2019 17:26:50 -0400 Subject: [PATCH 3/3] move ISUPPORT regeneration to the end of config loading --- irc/config.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/irc/config.go b/irc/config.go index c01bffca..42be0a1d 100644 --- a/irc/config.go +++ b/irc/config.go @@ -827,11 +827,6 @@ func LoadConfig(filename string) (config *Config, err error) { config.loadMOTD() - err = config.generateISupport() - if err != nil { - return nil, err - } - // in the current implementation, we disable history by creating a history buffer // with zero capacity. but the `enabled` config option MUST be respected regardless // of this detail @@ -847,5 +842,11 @@ func LoadConfig(filename string) (config *Config, err error) { } } + // now that all postprocessing is complete, regenerate ISUPPORT: + err = config.generateISupport() + if err != nil { + return nil, err + } + return config, nil }