smaba.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * @Author: LinkLeong link@icewhale.org
  3. * @Date: 2022-07-27 10:35:29
  4. * @LastEditors: LinkLeong
  5. * @LastEditTime: 2022-08-01 13:56:44
  6. * @FilePath: /CasaOS/pkg/samba/smaba.go
  7. * @Description:
  8. * @Website: https://www.casaos.io
  9. * Copyright (c) 2022 by icewhale, All Rights Reserved.
  10. */
  11. package samba
  12. import (
  13. "errors"
  14. "net"
  15. "github.com/hirochachacha/go-smb2"
  16. )
  17. func ConnectSambaService(host, port, username, password, directory string) error {
  18. conn, err := net.Dial("tcp", host+":"+port)
  19. if err != nil {
  20. return err
  21. }
  22. defer conn.Close()
  23. d := &smb2.Dialer{
  24. Initiator: &smb2.NTLMInitiator{
  25. User: username,
  26. Password: password,
  27. },
  28. }
  29. s, err := d.Dial(conn)
  30. if err != nil {
  31. return err
  32. }
  33. defer s.Logoff()
  34. names, err := s.ListSharenames()
  35. if err != nil {
  36. return err
  37. }
  38. for _, name := range names {
  39. if name == directory {
  40. return nil
  41. }
  42. }
  43. return errors.New("directory not found")
  44. }
  45. //get share name list
  46. func GetSambaSharesList(host, port, username, password string) ([]string, error) {
  47. conn, err := net.Dial("tcp", host+":"+port)
  48. if err != nil {
  49. return nil, err
  50. }
  51. defer conn.Close()
  52. d := &smb2.Dialer{
  53. Initiator: &smb2.NTLMInitiator{
  54. User: username,
  55. Password: password,
  56. },
  57. }
  58. s, err := d.Dial(conn)
  59. if err != nil {
  60. return nil, err
  61. }
  62. defer s.Logoff()
  63. names, err := s.ListSharenames()
  64. if err != nil {
  65. return nil, err
  66. }
  67. return names, err
  68. }