1
0
Fork 0
forked from External/grumble

Fix SuperUser handling on new servers.

This commit is contained in:
Mikkel Krautz 2011-05-20 12:30:24 +02:00
parent 5a2e3331d9
commit fec890da2f
2 changed files with 11 additions and 6 deletions

View file

@ -17,11 +17,12 @@ import (
) )
type frozenServer struct { type frozenServer struct {
Id int "id" Id int "id"
Config map[string]string "config" SuperUserPassword string "supw"
Bans []ban.Ban "bans" Config map[string]string "config"
Channels []frozenChannel "channels" Bans []ban.Ban "bans"
Users []frozenUser "users" Channels []frozenChannel "channels"
Users []frozenUser "users"
} }
type frozenUser struct { type frozenUser struct {
@ -104,7 +105,7 @@ func (server *Server) FreezeToFile(filename string) (err os.Error) {
} else if err != nil { } else if err != nil {
return err return err
} }
err = os.Rename(filename, filename + ".old") err = os.Rename(filename, filename+".old")
if e, ok := err.(*os.LinkError); ok { if e, ok := err.(*os.LinkError); ok {
if e.Error != os.ENOENT { if e.Error != os.ENOENT {
return err return err
@ -125,6 +126,7 @@ func (server *Server) FreezeToFile(filename string) (err os.Error) {
func (server *Server) Freeze() (fs frozenServer, err os.Error) { func (server *Server) Freeze() (fs frozenServer, err os.Error) {
fs.Id = int(server.Id) fs.Id = int(server.Id)
fs.Config = server.cfg.GetAll() fs.Config = server.cfg.GetAll()
fs.SuperUserPassword = server.SuperUserPassword
server.banlock.RLock() server.banlock.RLock()
fs.Bans = make([]ban.Ban, len(server.Bans)) fs.Bans = make([]ban.Ban, len(server.Bans))
@ -258,6 +260,7 @@ func NewServerFromFrozen(filename string) (s *Server, err os.Error) {
s.cfg = serverconf.New(fs.Config) s.cfg = serverconf.New(fs.Config)
} }
s.SuperUserPassword = fs.SuperUserPassword
s.Bans = fs.Bans s.Bans = fs.Bans
// Add all channels, but don't hook up parent/child relationships // Add all channels, but don't hook up parent/child relationships

View file

@ -155,6 +155,8 @@ func NewServer(id int64, addr string, port int) (s *Server, err os.Error) {
s.clientAuthenticated = make(chan *Client) s.clientAuthenticated = make(chan *Client)
s.Users[0], err = NewUser(0, "SuperUser") s.Users[0], err = NewUser(0, "SuperUser")
s.UserNameMap["SuperUser"] = s.Users[0]
s.Channels = make(map[int]*Channel) s.Channels = make(map[int]*Channel)
s.root = s.NewChannel(0, "Root") s.root = s.NewChannel(0, "Root")
s.aclcache = NewACLCache() s.aclcache = NewACLCache()