confirm statping can write to current working directory

pull/224/head^2
hunterlong 2020-01-12 21:13:26 -08:00
parent d107d3cbee
commit 6e12d38921
4 changed files with 62 additions and 1 deletions

View File

@ -97,6 +97,13 @@ func main() {
if err != nil {
log.Errorln(err)
core.SetupMode = true
writeAble, err := utils.DirWritable(utils.Directory)
if err != nil {
log.Fatalln(err)
}
if !writeAble {
log.Fatalf("Statping does not have write permissions at: %v", utils.Directory)
}
if err := handlers.RunHTTPServer(ipAddress, port); err != nil {
log.Fatalln(err)
}

View File

@ -226,7 +226,7 @@ func (c *Core) Connect(retry bool, location string) error {
case "sqlite":
sqlFilename := findDbFile()
conn = sqlFilename
log.Infoln("SQL database file at: ", conn)
log.Infof("SQL database file at: %v/%v", utils.Directory, conn)
dbType = "sqlite3"
case "mysql":
host := fmt.Sprintf("%v:%v", CoreApp.Config.DbHost, CoreApp.Config.DbPort)

34
utils/utils_custom.go Normal file
View File

@ -0,0 +1,34 @@
// +build !windows
package utils
import (
"errors"
"os"
"syscall"
)
func DirWritable(path string) (bool, error) {
info, err := os.Stat(path)
if err != nil {
return false, errors.New("path doesn't exist")
}
if !info.IsDir() {
return false, errors.New("path isn't a directory")
}
if info.Mode().Perm()&(1<<(uint(7))) == 0 {
return false, errors.New("write permission bit is not set on this file for user")
}
var stat syscall.Stat_t
if err = syscall.Stat(path, &stat); err != nil {
return false, errors.New("unable to get stat")
}
if uint32(os.Geteuid()) != stat.Uid {
return false, errors.New("user doesn't have permission to write to this directory")
}
return true, nil
}

20
utils/utils_windows.go Normal file
View File

@ -0,0 +1,20 @@
package utils
import "errors"
func DirWritable(path string) (bool, error) {
info, err := os.Stat(path)
if err != nil {
return false, errors.New("path doesn't exist")
}
if !info.IsDir() {
return false, errors.New("path isn't a directory")
}
if info.Mode().Perm()&(1<<(uint(7))) == 0 {
return false, errors.New("write permission bit is not set on this file for user")
}
return true, nil
}