3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-22 03:49:27 +01:00

Merge pull request #1429 from slingamn/issue1428_tor_sts.1

fix #1428
This commit is contained in:
Shivaram Lingamneni 2020-12-06 13:56:33 -08:00 committed by GitHub
commit f9768e2259
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 13 additions and 0 deletions

View File

@ -159,6 +159,7 @@ type Session struct {
proxiedIP net.IP
rawHostname string
isTor bool
hideSTS bool
fakelag Fakelag
deferredFakelagCount int
@ -376,6 +377,7 @@ func (server *Server) RunClient(conn IRCConn) {
realIP: realIP,
proxiedIP: proxiedIP,
isTor: wConn.Config.Tor,
hideSTS: wConn.Config.Tor || wConn.Config.HideSTS,
}
client.sessions = []*Session{session}

View File

@ -59,6 +59,7 @@ type listenerConfigBlock struct {
Tor bool
STSOnly bool `yaml:"sts-only"`
WebSocket bool
HideSTS bool `yaml:"hide-sts"`
}
type PersistentStatus uint
@ -532,6 +533,7 @@ type Config struct {
SecureNetDefs []string `yaml:"secure-nets"`
secureNets []net.IPNet
supportedCaps *caps.Set
supportedCapsWithoutSTS *caps.Set
capValues caps.Values
Casemapping Casemapping
EnforceUtf8 bool `yaml:"enforce-utf8"`
@ -834,6 +836,7 @@ func (conf *Config) prepareListeners() (err error) {
}
lconf.RequireProxy = block.TLS.Proxy || block.Proxy
lconf.WebSocket = block.WebSocket
lconf.HideSTS = block.HideSTS
conf.Server.trueListeners[addr] = lconf
}
return nil
@ -1371,6 +1374,11 @@ func LoadConfig(filename string) (config *Config, err error) {
return nil, fmt.Errorf("failed to prepare listeners: %v", err)
}
// #1428: Tor listeners should never see STS
config.Server.supportedCapsWithoutSTS = caps.NewSet()
config.Server.supportedCapsWithoutSTS.Union(config.Server.supportedCaps)
config.Server.supportedCapsWithoutSTS.Disable(caps.STS)
return config, nil
}

View File

@ -442,6 +442,8 @@ func capHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Respo
supportedCaps := config.Server.supportedCaps
if client.isSTSOnly {
supportedCaps = stsOnlyCaps
} else if rb.session.hideSTS {
supportedCaps = config.Server.supportedCapsWithoutSTS
}
badCaps := false

View File

@ -54,6 +54,7 @@ type ListenerConfig struct {
Tor bool
STSOnly bool
WebSocket bool
HideSTS bool
}
// read a PROXY header (either v1 or v2), ensuring we don't read anything beyond