1
0
Fork 0
forked from External/ergo

Merge remote-tracking branch 'origin/master' into passhashing.2

This commit is contained in:
Shivaram Lingamneni 2018-08-15 13:02:05 -04:00
commit cbc2b07d35
14 changed files with 150 additions and 129 deletions

View file

@ -9,7 +9,6 @@ import (
"bufio"
"crypto/tls"
"fmt"
"log"
"math/rand"
"net"
"net/http"
@ -143,22 +142,6 @@ func NewServer(config *Config, logger *logger.Manager) (*Server, error) {
return nil, err
}
// confirm help entries for ChanServ exist.
// this forces people to write help entries for every single CS command.
for commandName, commandInfo := range chanservCommands {
if commandInfo.help == "" || commandInfo.helpShort == "" {
return nil, fmt.Errorf("Help entry does not exist for ChanServ command %s", commandName)
}
}
// confirm help entries for NickServ exist.
// this forces people to write help entries for every single NS command.
for commandName, commandInfo := range nickservCommands {
if commandInfo.help == "" || commandInfo.helpShort == "" {
return nil, fmt.Errorf("Help entry does not exist for NickServ command %s", commandName)
}
}
// Attempt to clean up when receiving these signals.
signal.Notify(server.signals, ServerExitSignals...)
signal.Notify(server.rehashSignal, syscall.SIGHUP)
@ -325,8 +308,8 @@ func (server *Server) checkBans(ipaddr net.IP) (banned bool, message string) {
// IRC protocol listeners
//
// createListener starts the given listeners.
func (server *Server) createListener(addr string, tlsConfig *tls.Config) *ListenerWrapper {
// createListener starts a given listener.
func (server *Server) createListener(addr string, tlsConfig *tls.Config) (*ListenerWrapper, error) {
// make listener
var listener net.Listener
var err error
@ -339,7 +322,7 @@ func (server *Server) createListener(addr string, tlsConfig *tls.Config) *Listen
listener, err = net.Listen("tcp", addr)
}
if err != nil {
log.Fatal(server, "listen error: ", err)
return nil, err
}
// throw our details to the server so we can be modified/killed later
@ -382,7 +365,7 @@ func (server *Server) createListener(addr string, tlsConfig *tls.Config) *Listen
}
}()
return &wrapper
return &wrapper, nil
}
// generateMessageID returns a network-unique message ID.
@ -896,7 +879,7 @@ func (server *Server) applyConfig(config *Config, initial bool) (err error) {
}
// we are now open for business
server.setupListeners(config)
err = server.setupListeners(config)
if !initial {
// push new info to all of our clients
@ -911,7 +894,7 @@ func (server *Server) applyConfig(config *Config, initial bool) (err error) {
}
}
return nil
return err
}
func (server *Server) setupPprofListener(config *Config) {
@ -1000,15 +983,20 @@ func (server *Server) loadDatastore(config *Config) error {
return nil
}
func (server *Server) setupListeners(config *Config) {
func (server *Server) setupListeners(config *Config) (err error) {
logListener := func(addr string, tlsconfig *tls.Config) {
server.logger.Info("listeners",
fmt.Sprintf("now listening on %s, tls=%t.", addr, (tlsconfig != nil)),
)
}
tlsListeners, err := config.TLSListeners()
if err != nil {
server.logger.Error("rehash", "failed to reload TLS certificates, aborting rehash", err.Error())
return
}
// update or destroy all existing listeners
tlsListeners := config.TLSListeners()
for addr := range server.listeners {
currentListener := server.listeners[addr]
var stillConfigured bool
@ -1044,7 +1032,13 @@ func (server *Server) setupListeners(config *Config) {
if !exists {
// make new listener
tlsConfig := tlsListeners[newaddr]
server.listeners[newaddr] = server.createListener(newaddr, tlsConfig)
listener, listenerErr := server.createListener(newaddr, tlsConfig)
if listenerErr != nil {
server.logger.Error("rehash", "couldn't listen on", newaddr, listenerErr.Error())
err = listenerErr
continue
}
server.listeners[newaddr] = listener
logListener(newaddr, tlsConfig)
}
}
@ -1054,8 +1048,8 @@ func (server *Server) setupListeners(config *Config) {
}
var usesStandardTLSPort bool
for addr := range config.TLSListeners() {
if strings.Contains(addr, "6697") {
for addr := range tlsListeners {
if strings.HasSuffix(addr, ":6697") {
usesStandardTLSPort = true
break
}
@ -1063,6 +1057,8 @@ func (server *Server) setupListeners(config *Config) {
if 0 < len(tlsListeners) && !usesStandardTLSPort {
server.logger.Warning("startup", "Port 6697 is the standard TLS port for IRC. You should (also) expose port 6697 as a TLS port to ensure clients can connect securely")
}
return
}
// elistMatcher takes and matches ELIST conditions