fspermission.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package fspermission
  2. import (
  3. "errors"
  4. "fmt"
  5. "log"
  6. "os"
  7. "strconv"
  8. )
  9. /*
  10. This module handle functions realted to local file system permission.
  11. Only enabling when the system is run with sudo mode
  12. */
  13. func GetFilePermissions(file string) (string, error) {
  14. fileStat, err := os.Stat(file)
  15. if err != nil {
  16. return "", err
  17. }
  18. permission := "0000"
  19. permission = fmt.Sprintf("%04o", fileStat.Mode().Perm())
  20. return permission, nil
  21. }
  22. func SetFilePermisson(file string, permissionKey string) error {
  23. mode := os.FileMode(0644)
  24. if len(permissionKey) != 4 {
  25. return errors.New("Invalid File Node")
  26. }
  27. finalMode := 0
  28. for i := 0; i < len(permissionKey); i++ {
  29. thisInt, err := strconv.Atoi(string(permissionKey[i]))
  30. if err != nil {
  31. return errors.New("Failed to parse permission key")
  32. }
  33. if i == 0 {
  34. if thisInt != 0 {
  35. return errors.New("Failed to parse permission key")
  36. }
  37. } else if i == 1 {
  38. if thisInt > 7 {
  39. return errors.New("Failed to parse permission key: Permission value > 7")
  40. } else {
  41. finalMode = finalMode + thisInt*100
  42. }
  43. } else if i == 2 {
  44. if thisInt > 7 {
  45. return errors.New("Failed to parse permission key: Permission value > 7")
  46. } else {
  47. finalMode = finalMode + thisInt*10
  48. }
  49. } else if i == 3 {
  50. if thisInt > 7 {
  51. return errors.New("Failed to parse permission key: Permission value > 7")
  52. } else {
  53. finalMode = finalMode + thisInt
  54. }
  55. }
  56. }
  57. //Convert the value into a file mode
  58. log.Println("Updating " + file + " permission to " + strconv.Itoa(finalMode))
  59. //Magic way to convert dec to oct
  60. output, _ := strconv.ParseInt("0"+strconv.Itoa(finalMode), 8, 64)
  61. mode = os.FileMode(output)
  62. //Set its mode
  63. err := os.Chmod(file, mode)
  64. if err != nil {
  65. return err
  66. }
  67. return nil
  68. }