add ability to load motd from file - closes #25

This commit is contained in:
Chad Etzel 2014-12-13 20:28:19 -08:00
parent e3e46f9b8c
commit b5636dba9d
3 changed files with 21 additions and 8 deletions

View File

@ -321,7 +321,7 @@ func (c *Client) handleShell(channel ssh.Channel) {
} else {
newmotd = parts[1] + " " + parts[2]
}
c.Server.SetMotd(c, newmotd)
c.Server.SetMotd(newmotd)
c.Server.MotdBroadcast(c)
}

15
cmd.go
View File

@ -4,6 +4,7 @@ import (
"bufio"
"fmt"
"io/ioutil"
"strings"
"os"
"os/signal"
@ -18,6 +19,7 @@ type Options struct {
Bind string `long:"bind" description:"Host and port to listen on." default:"0.0.0.0:22"`
Admin []string `long:"admin" description:"Fingerprint of pubkey to mark as admin."`
Whitelist string `long:"whitelist" description:"Optional file of pubkey fingerprints that are allowed to connect"`
Motd string `long:"motd" description:"Message of the Day file (optional)"`
}
var logLevels = []log.Level{
@ -80,6 +82,19 @@ func main() {
}
}
if options.Motd != "" {
motd, err := ioutil.ReadFile(options.Motd)
if err != nil {
logger.Errorf("Failed to load MOTD file: %v", err)
return
}
motdString := string(motd[:])
/* hack to normalize line endings into \r\n */
motdString = strings.Replace(motdString, "\r\n", "\n", -1)
motdString = strings.Replace(motdString, "\n", "\r\n", -1)
server.SetMotd(motdString)
}
// Construct interrupt handler
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt)

View File

@ -123,21 +123,19 @@ func (s *Server) Privmsg(nick, message string, sender *Client) error {
return nil
}
func (s *Server) SetMotd(client *Client, motd string) {
func (s *Server) SetMotd(motd string) {
s.Lock()
s.motd = motd
s.Unlock()
}
func (s *Server) MotdUnicast(client *Client) {
client.SysMsg("/** MOTD")
client.SysMsg(" * " + ColorString("36", s.motd)) /* a nice cyan color */
client.SysMsg(" **/")
client.SysMsg("MOTD:\r\n" + ColorString("36", s.motd)) /* a nice cyan color */
}
func (s *Server) MotdBroadcast(client *Client) {
s.Broadcast(ContinuousFormat(SYSTEM_MESSAGE_FORMAT, fmt.Sprintf(" * New MOTD set by %s.", client.ColoredName())), client)
s.Broadcast(" /**\r\n" + " * " + ColorString("36", s.motd) + "\r\n **/", client)
s.Broadcast(ColorString("36", s.motd), client)
}
func (s *Server) Add(client *Client) {
@ -237,9 +235,9 @@ func (s *Server) Op(fingerprint string) {
func (s *Server) Whitelist(fingerprint string) {
logger.Infof("Adding whitelist: %s", fingerprint)
s.lock.Lock()
s.Lock()
s.whitelist[fingerprint] = struct{}{}
s.lock.Unlock()
s.Unlock()
}
func (s *Server) Uptime() string {