Ensure that permissions are set properly on daemon boot
This commit is contained in:
parent
23df075253
commit
6e2a442846
|
@ -2,12 +2,17 @@ package config
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"go.uber.org/zap"
|
||||
"gopkg.in/yaml.v2"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/user"
|
||||
"path"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type Configuration struct {
|
||||
|
@ -233,9 +238,56 @@ func (c *Configuration) EnsurePterodactylUser() (*user.User, error) {
|
|||
// Ensures that the configured data directory has the correct permissions assigned to
|
||||
// all of the files and folders within.
|
||||
func (c *Configuration) EnsureFilePermissions() error {
|
||||
// Don't run this unless it is configured to be run. On large system this can often slow
|
||||
// things down dramatically during the boot process.
|
||||
if !c.System.SetPermissionsOnBoot {
|
||||
return nil
|
||||
}
|
||||
|
||||
r := regexp.MustCompile("^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$")
|
||||
|
||||
files, err := ioutil.ReadDir(c.System.Data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
su, err := user.Lookup(c.System.User)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
wg := new(sync.WaitGroup)
|
||||
|
||||
for _, file := range files {
|
||||
wg.Add(1)
|
||||
|
||||
// Asynchronously run through the list of files and folders in the data directory. If
|
||||
// the item is not a folder, or is not a folder that matches the expected UUIDv4 format
|
||||
// skip over it.
|
||||
//
|
||||
// If we do have a positive match, run a chown aganist the directory.
|
||||
go func(f os.FileInfo) {
|
||||
defer wg.Done()
|
||||
|
||||
if !f.IsDir() || !r.MatchString(f.Name()) {
|
||||
return
|
||||
}
|
||||
|
||||
uid, _ := strconv.Atoi(su.Uid)
|
||||
gid, _ := strconv.Atoi(su.Gid)
|
||||
|
||||
if err := os.Chown(path.Join(c.System.Data, f.Name()), uid, gid); err != nil {
|
||||
zap.S().Warnw("failed to chown server directory", zap.String("directory", f.Name()), zap.Error(err))
|
||||
}
|
||||
}(file)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Gets the system release name.
|
||||
func getSystemName() (string, error) {
|
||||
cmd := exec.Command("lsb_release", "-is")
|
||||
|
||||
|
|
7
wings.go
7
wings.go
|
@ -46,6 +46,13 @@ func main() {
|
|||
zap.S().Infow("configured system user", zap.String("username", su.Username), zap.String("uid", su.Uid), zap.String("gid", su.Gid))
|
||||
}
|
||||
|
||||
zap.S().Infow("beginnning file permission setting on server data directories")
|
||||
if err := c.EnsureFilePermissions(); err != nil {
|
||||
zap.S().Errorw("failed to properly chown data directories", zap.Error(err))
|
||||
} else {
|
||||
zap.S().Infow("finished ensuring file permissions")
|
||||
}
|
||||
|
||||
servers, err := server.LoadDirectory("data/servers", c.System)
|
||||
if err != nil {
|
||||
zap.S().Fatalw("failed to load server configurations", zap.Error(err))
|
||||
|
|
Loading…
Reference in New Issue
Block a user