80387bc294
If this does not completely solve the issue in containers then we need to evaluate the image being used to determine what changes need to happen to the image itself to support the timezone. ref pterodactyl/panel#2239 ref pterodactyl/panel#2329 ref pterodactyl/panel#2389
73 lines
2.0 KiB
Go
73 lines
2.0 KiB
Go
package server
|
|
|
|
import (
|
|
"github.com/apex/log"
|
|
"github.com/pterodactyl/wings/config"
|
|
"github.com/pterodactyl/wings/environment"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
// To avoid confusion when working with mounts, assume that a server.Mount has not been properly
|
|
// cleaned up and had the paths set. An environment.Mount should only be returned with valid paths
|
|
// that have been checked.
|
|
type Mount environment.Mount
|
|
|
|
// Returns the default container mounts for the server instance. This includes the data directory
|
|
// for the server. Previously this would also mount in host timezone files, however we've moved from
|
|
// that approach to just setting `TZ=Timezone` environment values in containers which should work
|
|
// in most scenarios.
|
|
func (s *Server) Mounts() []environment.Mount {
|
|
m := []environment.Mount{
|
|
{
|
|
Default: true,
|
|
Target: "/home/container",
|
|
Source: s.Filesystem().Path(),
|
|
ReadOnly: false,
|
|
},
|
|
}
|
|
|
|
// Also include any of this server's custom mounts when returning them.
|
|
return append(m, s.customMounts()...)
|
|
}
|
|
|
|
// Returns the custom mounts for a given server after verifying that they are within a list of
|
|
// allowed mount points for the node.
|
|
func (s *Server) customMounts() []environment.Mount {
|
|
var mounts []environment.Mount
|
|
|
|
// TODO: probably need to handle things trying to mount directories that do not exist.
|
|
for _, m := range s.Config().Mounts {
|
|
source := filepath.Clean(m.Source)
|
|
target := filepath.Clean(m.Target)
|
|
|
|
logger := s.Log().WithFields(log.Fields{
|
|
"source_path": source,
|
|
"target_path": target,
|
|
"read_only": m.ReadOnly,
|
|
})
|
|
|
|
mounted := false
|
|
for _, allowed := range config.Get().AllowedMounts {
|
|
if !strings.HasPrefix(source, allowed) {
|
|
continue
|
|
}
|
|
|
|
mounted = true
|
|
mounts = append(mounts, environment.Mount{
|
|
Source: source,
|
|
Target: target,
|
|
ReadOnly: m.ReadOnly,
|
|
})
|
|
|
|
break
|
|
}
|
|
|
|
if !mounted {
|
|
logger.Warn("skipping custom server mount, not in list of allowed mount points")
|
|
}
|
|
}
|
|
|
|
return mounts
|
|
}
|