mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2026-10-19 16:14:39 +00:00
fix (init): additional assert during startup
This commit is contained in:
@@ -17,11 +17,16 @@ func InitSecretDerivate(secret string) {
|
||||
}
|
||||
|
||||
func init() {
|
||||
os.MkdirAll(GetAbsolutePath(env.CERT_PATH), os.ModePerm)
|
||||
os.MkdirAll(GetAbsolutePath(env.DB_PATH), os.ModePerm)
|
||||
os.MkdirAll(GetAbsolutePath(env.FTS_PATH), os.ModePerm)
|
||||
os.MkdirAll(GetAbsolutePath(env.LOG_PATH), os.ModePerm)
|
||||
os.MkdirAll(GetAbsolutePath(env.PLUGIN_PATH), os.ModePerm)
|
||||
os.MkdirAll(GetAbsolutePath(env.DB_PATH), os.ModePerm)
|
||||
os.MkdirAll(GetAbsolutePath(env.CERT_PATH), os.ModePerm)
|
||||
os.MkdirAll(GetAbsolutePath(env.FTS_PATH), os.ModePerm)
|
||||
os.RemoveAll(GetAbsolutePath(env.TMP_PATH))
|
||||
os.MkdirAll(GetAbsolutePath(env.TMP_PATH), os.ModePerm)
|
||||
|
||||
assertFS(GetAbsolutePath(env.LOG_PATH))
|
||||
assertFS(GetAbsolutePath(env.PLUGIN_PATH))
|
||||
assertFS(GetAbsolutePath(env.DB_PATH))
|
||||
assertFS(GetAbsolutePath(env.TMP_PATH))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
. "github.com/mickael-kerjean/filestash/server/pkg/env"
|
||||
. "github.com/mickael-kerjean/filestash/server/pkg/utils"
|
||||
)
|
||||
|
||||
func assertFS(path string) {
|
||||
info, err := os.Stat(path)
|
||||
if err != nil {
|
||||
fmt.Printf("FATAL ERROR - %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
stat, ok := info.Sys().(*syscall.Stat_t)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
uid, gid, mode := os.Getuid(), os.Getgid(), info.Mode().Perm()
|
||||
if uid == 0 {
|
||||
return
|
||||
} else if mode&0002 != 0 {
|
||||
return
|
||||
} else if mode&0200 != 0 && uid == int(stat.Uid) {
|
||||
return
|
||||
} else if mode&0020 != 0 {
|
||||
if gid == int(stat.Gid) {
|
||||
return
|
||||
}
|
||||
if groups, err := os.Getgroups(); err == nil {
|
||||
for _, g := range groups {
|
||||
if g == int(stat.Gid) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Printf(`
|
||||
===========================================================================
|
||||
FATAL ERROR `+APPNAME+` can't write onto its own folder
|
||||
DIAGNOSIS the folder belongs to uid=%d but the process runs as uid=%d
|
||||
FIX chown -R %d:%d %s
|
||||
===========================================================================
|
||||
Shutting down ...
|
||||
`, stat.Uid, uid, uid, gid, GetAbsolutePath(""))
|
||||
time.Sleep(5 * time.Second)
|
||||
os.Exit(1)
|
||||
}
|
||||
Reference in New Issue
Block a user