47 lines
911 B
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
|
|
}
|