fix (init): additional assert during startup

This commit is contained in:
MickaelK
2026-09-08 13:45:30 +10:00
parent 99513d9358
commit d48c9dfd1a
2 changed files with 60 additions and 3 deletions
+8 -3
View File
@@ -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))
}
+52
View File
@@ -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)
}