smbd.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package samba
  2. import (
  3. "fmt"
  4. "os/exec"
  5. )
  6. // IsSmbdRunning checks if smbd is running on the current Linux host
  7. func IsSmbdRunning() (bool, error) {
  8. cmd := exec.Command("systemctl", "is-active", "--quiet", "smbd")
  9. err := cmd.Run()
  10. if err != nil {
  11. // If the command returns a non-zero exit code, smbd is not running
  12. if exitErr, ok := err.(*exec.ExitError); ok {
  13. return exitErr.ExitCode() == 0, nil
  14. }
  15. return false, fmt.Errorf("failed to check smbd status: %v", err)
  16. }
  17. // If the command returns a zero exit code, smbd is running
  18. return true, nil
  19. }
  20. // SetSmbdEnableState enables or disables smbd via systemctl
  21. func SetSmbdEnableState(enable bool) error {
  22. var cmd *exec.Cmd
  23. if enable {
  24. //Enable smbd
  25. cmd = exec.Command("sudo", "systemctl", "enable", "smbd")
  26. err := cmd.Run()
  27. if err != nil {
  28. return fmt.Errorf("failed to start smbd: %v", err)
  29. }
  30. //Start smbd now
  31. cmd = exec.Command("sudo", "systemctl", "start", "smbd")
  32. err = cmd.Run()
  33. if err != nil {
  34. return fmt.Errorf("failed to set smbd enable state: %v", err)
  35. }
  36. } else {
  37. //Stop smbd
  38. cmd = exec.Command("sudo", "systemctl", "stop", "smbd")
  39. err := cmd.Run()
  40. if err != nil {
  41. return fmt.Errorf("failed to stop smbd: %v", err)
  42. }
  43. cmd = exec.Command("sudo", "systemctl", "disable", "smbd")
  44. //Disable service
  45. err = cmd.Run()
  46. if err != nil {
  47. return fmt.Errorf("failed to set smbd enable state: %v", err)
  48. }
  49. }
  50. return nil
  51. }