MCPcopy Create free account
hub / github.com/tailscale/tailscale / SetShares

Method SetShares

drive/driveimpl/remote_impl.go:71–114  ·  view source on GitHub ↗

SetShares implements drive.FileSystemForRemote. Shares must be sorted according to drive.CompareShares.

(shares []*drive.Share)

Source from the content-addressed store, hash-verified

69// SetShares implements drive.FileSystemForRemote. Shares must be sorted
70// according to drive.CompareShares.
71func (s *FileSystemForRemote) SetShares(shares []*drive.Share) {
72 userServers := make(map[string]*userServer)
73 if drive.AllowShareAs() {
74 // Set up per-user server by running the current executable as an
75 // unprivileged user in order to avoid privilege escalation.
76 executable, err := os.Executable()
77 if err != nil {
78 s.logf("can't find executable: %v", err)
79 return
80 }
81
82 for _, share := range shares {
83 p, found := userServers[share.As]
84 if !found {
85 p = &userServer{
86 logf: s.logf,
87 username: share.As,
88 executable: executable,
89 }
90 userServers[share.As] = p
91 }
92 p.shares = append(p.shares, share)
93 }
94 for _, p := range userServers {
95 go p.runLoop()
96 }
97 }
98
99 children := make(map[string]*compositedav.Child, len(shares))
100 for _, share := range shares {
101 children[share.Name] = s.buildChild(share)
102 }
103
104 s.mu.Lock()
105 s.shares = shares
106 oldUserServers := s.userServers
107 oldChildren := s.children
108 s.children = children
109 s.userServers = userServers
110 s.mu.Unlock()
111
112 s.stopUserServers(oldUserServers)
113 s.closeChildren(oldChildren)
114}
115
116func (s *FileSystemForRemote) buildChild(share *drive.Share) *compositedav.Child {
117 getTokenAndAddr := func(shareName string) (string, string, error) {

Callers

nothing calls this directly

Implementers 1

FileSystemForRemotedrive/driveimpl/remote_impl.go

Calls 8

buildChildMethod · 0.95
stopUserServersMethod · 0.95
closeChildrenMethod · 0.95
AllowShareAsFunction · 0.92
LockMethod · 0.65
UnlockMethod · 0.65
logfMethod · 0.45
runLoopMethod · 0.45

Tested by

no test coverage detected