diff --git a/config.go b/config.go index af1e681..2b195e7 100644 --- a/config.go +++ b/config.go @@ -2,11 +2,8 @@ package oz import ( "encoding/json" - "fmt" "io/ioutil" "os" - "path" - "syscall" ) type Config struct { @@ -67,27 +64,3 @@ func LoadConfig(cpath string) (*Config, error) { } return c, nil } - -func checkConfigPermissions(fpath string) error { - pd := path.Dir(fpath) - for _, fp := range []string{pd, fpath} { - if err := checkPathRootPermissions(fp); err != nil { - return fmt.Errorf("file (%s) is %s", fp, err) - } - } - return nil -} - -func checkPathRootPermissions(fpath string) error { - fstat, err := os.Stat(fpath) - if err != nil { - return err - } - if (fstat.Mode().Perm() & syscall.S_IWOTH) != 0 { - return fmt.Errorf("writable by everyone!", fpath) - } - if (fstat.Mode().Perm()&syscall.S_IWGRP) != 0 && fstat.Sys().(*syscall.Stat_t).Gid != 0 { - return fmt.Errorf("writable by someone else than root!", err) - } - return nil -} diff --git a/utils.go b/utils.go new file mode 100644 index 0000000..495fa35 --- /dev/null +++ b/utils.go @@ -0,0 +1,32 @@ +package oz + +import( + "fmt" + "os" + "path" + "syscall" +) + +func checkConfigPermissions(fpath string) error { + pd := path.Dir(fpath) + for _, fp := range []string{pd, fpath} { + if err := checkPathRootPermissions(fp); err != nil { + return fmt.Errorf("file `%s` is %s", fp, err) + } + } + return nil +} + +func checkPathRootPermissions(fpath string) error { + fstat, err := os.Stat(fpath) + if err != nil { + return err + } + if (fstat.Mode().Perm() & syscall.S_IWOTH) != 0 { + return fmt.Errorf("writable by everyone!") + } + if (fstat.Mode().Perm()&syscall.S_IWGRP) != 0 && fstat.Sys().(*syscall.Stat_t).Gid != 0 { + return fmt.Errorf("writable by someone else than root!") + } + return nil +}