gowebframework/is-writable.go

47 lines
911 B
Go

/*
* @Author: Bartuccio Antoine
* @Date: 2018-07-17 18:37:38
* @Last Modified by: klmp200
* @Last Modified time: 2018-07-17 19:35:18
*/
// +build !windows
package gowebframework
import (
"log"
"os"
"syscall"
)
// Check if a file or directory is writable
func isWritable(path string) bool {
os_stats, err := os.Stat(path)
if err != nil {
// Error reading file or folder
log.Println(err)
return false
}
if os_stats.Mode().Perm()&(1<<(uint(7))) == 0 {
// Check if user bit is enabled
log.Println("User bit on " + path + " is not enabled")
return false
}
var syscall_stats syscall.Stat_t
err = syscall.Stat(path, &syscall_stats)
if err != nil {
// Error getting stats
log.Println(err)
return false
}
if uint32(os.Getuid()) != syscall_stats.Uid {
// User doesn't have permission to write
log.Println("No permission to write on " + path)
return false
}
return true
}