From e79694d6d2bcd2651ba58489331e06c8c23f1ff3 Mon Sep 17 00:00:00 2001 From: Matthew Penner Date: Mon, 13 Sep 2021 15:00:26 -0600 Subject: [PATCH] config: add ability to enable/disable server crash detection fixes https://github.com/pterodactyl/panel/issues/3617 Co-authored-by: Alex --- config/config.go | 23 ++++++++++++++--------- server/server.go | 10 ++++++---- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/config/config.go b/config/config.go index 2d46e85..07b6a74 100644 --- a/config/config.go +++ b/config/config.go @@ -48,10 +48,12 @@ var DefaultTLSConfig = &tls.Config{ CurvePreferences: []tls.CurveID{tls.X25519, tls.CurveP256}, } -var mu sync.RWMutex -var _config *Configuration -var _jwtAlgo *jwt.HMACSHA -var _debugViaFlag bool +var ( + mu sync.RWMutex + _config *Configuration + _jwtAlgo *jwt.HMACSHA + _debugViaFlag bool +) // Locker specific to writing the configuration to the disk, this happens // in areas that might already be locked, so we don't want to crash the process. @@ -181,6 +183,9 @@ type SystemConfiguration struct { } type CrashDetection struct { + // CrashDetectionEnabled sets if crash detection is enabled globally for all servers on this node. + CrashDetectionEnabled bool `default:"true" yaml:"enabled"` + // Determines if Wings should detect a server that stops with a normal exit code of // "0" as being crashed if the process stopped without any Wings interaction. E.g. // the user did not press the stop button, but the process stopped cleanly. @@ -375,7 +380,7 @@ func WriteToDisk(c *Configuration) error { if err != nil { return err } - if err := ioutil.WriteFile(c.path, b, 0600); err != nil { + if err := ioutil.WriteFile(c.path, b, 0o600); err != nil { return err } return nil @@ -470,7 +475,7 @@ func FromFile(path string) error { func ConfigureDirectories() error { root := _config.System.RootDirectory log.WithField("path", root).Debug("ensuring root data directory exists") - if err := os.MkdirAll(root, 0700); err != nil { + if err := os.MkdirAll(root, 0o700); err != nil { return err } @@ -491,17 +496,17 @@ func ConfigureDirectories() error { } log.WithField("path", _config.System.Data).Debug("ensuring server data directory exists") - if err := os.MkdirAll(_config.System.Data, 0700); err != nil { + if err := os.MkdirAll(_config.System.Data, 0o700); err != nil { return err } log.WithField("path", _config.System.ArchiveDirectory).Debug("ensuring archive data directory exists") - if err := os.MkdirAll(_config.System.ArchiveDirectory, 0700); err != nil { + if err := os.MkdirAll(_config.System.ArchiveDirectory, 0o700); err != nil { return err } log.WithField("path", _config.System.BackupDirectory).Debug("ensuring backup data directory exists") - if err := os.MkdirAll(_config.System.BackupDirectory, 0700); err != nil { + if err := os.MkdirAll(_config.System.BackupDirectory, 0o700); err != nil { return err } diff --git a/server/server.go b/server/server.go index 6ffc4bc..76c82aa 100644 --- a/server/server.go +++ b/server/server.go @@ -188,7 +188,9 @@ func (s *Server) Sync() error { // can be called from scoped where the server may not be fully initialized, // therefore other things like the filesystem and environment may not exist yet. func (s *Server) SyncWithConfiguration(cfg remote.ServerConfigurationResponse) error { - c := Configuration{} + c := Configuration{ + CrashDetectionEnabled: config.Get().System.CrashDetection.CrashDetectionEnabled, + } if err := json.Unmarshal(cfg.Settings, &c); err != nil { return errors.WithStackIf(err) } @@ -196,9 +198,9 @@ func (s *Server) SyncWithConfiguration(cfg remote.ServerConfigurationResponse) e s.cfg.mu.Lock() defer s.cfg.mu.Unlock() - // Lock the new configuration. Since we have the defered Unlock above we need + // Lock the new configuration. Since we have the deferred Unlock above we need // to make sure that the NEW configuration object is already locked since that - // defer is running on the memory address for "s.cfg.mu" which we're explcitly + // defer is running on the memory address for "s.cfg.mu" which we're explicitly // changing on the next line. c.mu.Lock() @@ -259,7 +261,7 @@ func (s *Server) EnsureDataDirectoryExists() error { if _, err := os.Lstat(s.fs.Path()); err != nil { if os.IsNotExist(err) { s.Log().Debug("server: creating root directory and setting permissions") - if err := os.MkdirAll(s.fs.Path(), 0700); err != nil { + if err := os.MkdirAll(s.fs.Path(), 0o700); err != nil { return errors.WithStack(err) } if err := s.fs.Chown("/"); err != nil {